Spark 详细剖析
1. Application/App:Spark 应用程序
指的是用户编写的 Spark 应用程序/代码,包含了 Driver 功能代码和分布在集群中多个节点上运行的 Executor 代码。
Spark 应用程序,由一个或多个作业 JOB 组成(因为代码中可能会调用多次 Action),如下图所示:
2. Driver:驱动程序
Spark 中的 Driver 即运行上述 Application 的 Main()函数并且创建 SparkContext,其中创建 SparkContext 的目的是为了准备 Spark 应用程序的运行环境。
在 Spark 中由 SparkContext 负责和 ClusterManager 通信,进行资源的申请、任务的分配和监控等;
当 Executor 部分运行完毕后,Driver 负责将 SparkContext 关闭。
通常 SparkContext 代表 Driver,如下图所示:
3. Cluster Manager:资源管理器
指的是在集群上获取资源的外部服务,常用的有:
Standalone,Spark 原生的资源管理器,由 Master 负责资源的分配;
Haddop Yarn,由 Yarn 中的 ResourcesManager 负责资源的分配;
Messos,由 Messos 中的 Messos Master 负责资源管理,
如下图所示:
4. Worker:计算节点
集群中任何可以运行 Application 代码的节点,类似于 Yarn 中的 NodeManager 节点。
在 Standalone 模式中指的就是通过 Slave 文件配置的 Worker 节点,
在 Spark on Yarn 模式中指的就是 NodeManager 节点,
在 Spark on Messos 模式中指的就是 Messos Slave 节点,
如下图所示:
5. Executor:执行器
Application 运行在 Worker 节点上的一个进程,该进程负责运行 Task,并且负责将数据存在内存或者磁盘上,
每个 Application 都有各自独立的一批 Executor,
注意:一个完整的 Spark 任务提交给 Worker 之后会在 Worker 上开启一个 Executor 进程,该进程中可以运行作用在各个分区上的多个 Task(线程)
一个 Executor 进程中可以运行多个 Task 线程
如下图所示:
6. RDD:弹性分布式数据集
Resillient Distributed Dataset,Spark 的基本计算单元,可以通过一系列算子进行操作(主要有 Transformation 和 Action 操作),
如下图所示:
7. NarrowDependency 窄依赖
父 RDD 一个分区被子 RDD 的一个分区所依赖;
如图所示:
8. ShuffleDependency 宽依赖
父 RDD 的一个分区都被子 RDD 多个分区所使用/依赖
如图所示:
●常见的窄依赖有:
map、filter、union、mapPartitions、mapValues、join(父 RDD 是宽依赖)、笛卡尔积
●常见的宽依赖有:
groupByKey、partitionBy、reduceByKey、join(父 RDD 是窄依赖)
9. DAG:有向无环图
Directed Acycle graph,反应 RDD 之间的依赖关系,
DAG 其实就是一个 JOB(会根据依赖关系被划分成多个 Stage)
注意:一个 Spark 程序会有 1~n 个 DAG,调用一次 Action 就会形成一个 DAG
如图所示:
10. DAGScheduler:有向无环图调度器
基于 DAG 划分 Stage 并以 TaskSet 的形式提交 Stage 给 TaskScheduler;
负责将作业拆分成不同阶段的具有依赖关系的多批任务;
最重要的任务之一就是:计算作业和任务的依赖关系,制定调度逻辑。
在 SparkContext 初始化的过程中被实例化,一个 SparkContext 对应创建一个 DAGScheduler。
●总结:DAGScheduler 完成以下工作:
1. DAGScheduler 划分 Stage(TaskSet),记录哪个 RDD 或者 Stage 输出被物化(缓存),通常在一个复杂的 shuffle 之后,通常物化一下(cache、persist),方便之后的计算。
2. 重新提交出错/失败的 Stage(shuffle 输出丢失的 stage/stage 内部计算出错)
3. 将 Taskset 传给底层调度器
ü spark-cluster TaskScheduler
ü yarn-cluster YarnClusterScheduler
ü yarn-client YarnClientClusterScheduler
版权声明: 本文为 InfoQ 作者【五分钟学大数据】的原创文章。
原文链接:【http://xie.infoq.cn/article/8372b0f4cf8bb882ebb354136】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论