通常而言,DriverApplication 的执行与输出都是通过SparkContext完成的,在正式提交Application 之前,首先需要初始化SparkContext。SparkContext隐藏了网络通信、分布式部署、消息通信、存储能力、计算能力、缓存、测量系统、文件服务、web服务等内容。应用程序的开发者只需要使用SparkContext 提供的API完成功能开发。
一个application ---> 一个或者多个job----->一个或者多个stage----->多个task
SparkContext 内置的DAGScheduler 负责去创建Job,将一个application转化成为多个Job。(相应的Job的划分,是看应用程序中,执行了多少个action算子)
SparkContext 内置的TaskScheduler :负责进行任务的派发,发送到相应的节点,执行task。
Spark优先考虑使用节点的内存作为存储,当内存不足时槽考虑使用磁盘,这极大的减少了磁盘I/O,提升了执行的效率,使得Spark适用于实时计算、流式计算等场景。此外,Spark还提供了以内存为中心的高容错的分布式文件系统Tachyon ,供用户选择。
计算引擎由 SparkContext 中的 DAGScheduler、RDD 以及具体节点上的 Executor 负责执行的 Map 和 Reduce 任务组成。DAGScheduler 和 RDD 虽然位于 SparkContext 内部,但是在任务正式提交与执行之前将Job 中的 RDD 组织成有向无环图(简称 DAG)、并对 Stage 进 行划分决定了任务执行阶段任务的数量、迭代计算、shuffle 等过程。
单节点不足以提供足够的存储计算能力,所以作为大数据处理的Spark在SparkContext的TaskScheduler 组件中提供了,Standalone 部署模式的实现和YANR、Mesos 等分布式资源管理系统的支持。除了可用于实际生产环境 的 Standalone、YARN、Mesos、kubernetes、Cloud 等部署模式外,Spark 还提供了 Local 模式和 local-cluster 模式便于开发和调试。
Standalone、YARN、Mesos、kubernetes、Cloud:用于分布式生产场景。
Local用于本地测试。
Cluster Manager:spark集群的管理者,主要负责资源你的分配与管理。集群管理分配的资源属于一级分配,它将各个worker上的内存、CPU,等资源分配给应用程序,但是并不对executor的资源分配。目前:Standalone、YARN、Mesos、K8S,EC2 等都可以作为 Spark 的集群管理器。
Master:spark集群的主节点。
Worker:Spark集群的工作节点,对spark应用程序来说,由集群管理器分配得到资源的worker主要负责以下工作:创建 Executor,将资源和任务进一步分配给 Executor,同步资源信息给 Cluster Manager。
Executor:执行计算任务的进程。主要负责执行任务,以及与 Worker、Driver Application 的信息同步。(主要是初始化一个线程池,调度其中的线程执行相应的计算任务)
Driver Appication:客户端驱动程序,也可以理解为客户端的应用程序,用于将任务程序转化为RDD和DAG,并与Cluster Manager 进行通信与调度,其中SparkContext这个对象的创建就是在Driver Appication中。
Deploy mode:部署的模式,在写好的代码,提交到集群中运行时:--master 指定资源的管理器。
其中常见的有yarn,在使用yarn的方式进行任务提交的时候,通常必须配置另一个参数:--deploy-mode client/cluster 有client和cluster两种。
client,表示就把Driver程序,放在提交的节点。
cluster 表示把Driver程序,放在集群中的任意节点。Driver程序决定了SparkContext对象在哪里创建。
各个角色之间的关系:
Spark 计算平台有两个重要角色,Driver 和 executor,不论是 StandAlone 模式还是 YARN 模式, 都是 Driver 充当 Application 的 master 角色,负责任务执行计划生成和任务分发及调度; executor 充当 worker 角色,负责实际执行任务的 task,计算的结果返回 Driver。
- 用户使用SparkContext 提供的 API(常用的有 textFile、sequenceFile、runJob、stop 等) 编写Driver Application程序。
- 使用sparkContext对象提交的用户应用程序,首先会使用 BlockManager 和 BroadcastManager 将任务的资源配置进行广播。然后由 DAGScheduler 将任务转换为 RDD 并组织成 DAG, DAG 还将被划分为不同的 Stage。最后由 TaskScheduler 借助 ActorSystem 将任务提交给集群管理器(ClusterManager)。
- 集群管理器(ClusterManager)给任务分配资源,即将具体任务分配到 Worker 上,Worker 创建 Executor 来处理任务的运行。Standalone、YARN、Mesos、kubernetes、EC2 等都可以作 为 Spark 的集群管理器。
RDD 可以看做是对各种数据计算模型的统一抽象,Spark 的计算过程主要是 RDD 的迭代计算 过程,如上图。RDD 的迭代计算过程非常类似于管道。分区数量取决于 partition 数量的设定,每个分区的数据只会在一个 Task 中计算。所有分区可以在多个机器节点的 Executor 上 并行执行。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。