4. Apache Spark简介¶
中国谚语
知己知彼,百战不殆。 –孙子兵法的成语
4.1. 核心概念¶
以下大部分内容来自 [Kirillov2016]. 所以版权属于 安东基里洛夫 . 我建议你从 Apache Spark core concepts, architecture and internals .
在深入了解Apache Spark的工作原理之前,让我们先了解Apache Spark的行话。
作业:一段代码,它从HDF或本地读取一些输入,对数据执行一些计算并写入一些输出数据。
阶段:工作分为阶段。阶段被划分为一个映射或减少阶段(如果你在Hadoop上工作过并且想要关联的话,更容易理解)。阶段是根据计算边界划分的,所有计算(运算符)不能在单个阶段中更新。它发生在许多阶段。
任务:每个阶段都有一些任务,每个分区一个任务。一个任务在一个执行器(机器)上的一个数据分区上执行。
DAG:DAG代表有向无环图,在当前上下文中它是一个DAG运算符。
执行者:负责执行任务的过程。
主:驱动程序运行的机器
从机:执行程序运行的机器。
4.2. Spark 组件¶
![]()
Spark 驱动器
执行用户应用程序的单独进程
创建SparkContext以计划作业执行并与群集管理器协商
遗嘱执行人
运行驱动程序计划的任务
将计算结果存储在内存、磁盘上或堆外
与存储系统交互
集群管理器
介子
YARN
Spark独立
spark driver包含更多负责将用户代码转换为在集群上执行的实际作业的组件:
![]()
SparkContext
表示到 Spark 簇的连接,可用于在该簇上创建RDD、累加器和广播变量。
DAGScheduler
为每个作业计算阶段的DAG,并将其提交给TaskScheduler确定任务的首选位置(基于缓存状态或无序处理文件位置),并找到运行作业的最小计划。
TaskScheduler
负责将任务发送到集群,运行它们,在出现故障时重试,并减轻分散者
SchedulerBackend
用于调度系统的后端接口,允许插入不同的实现(介子、纱线、独立、本地)
BlockManager
提供将块本地和远程放入和检索到各种存储(内存、磁盘和堆外)的接口。
4.3. 架构¶
4.4. Spark 是如何工作的?¶
Spark有一个小的代码库,系统分为不同的层。每一层都有一些责任。这些层彼此独立。
第一层是解释器,Spark使用scala解释器,并做了一些修改。当您在Spark控制台中输入代码(创建RDD并应用操作符)时,Spark会创建一个操作符图。当用户运行一个操作(如collect)时,图形将提交到DAG调度程序。DAG调度程序将操作员图划分为(映射和减少)阶段。阶段由基于输入数据分区的任务组成。DAG调度程序将操作程序连接在一起以优化图形。例如,许多地图操作员可以安排在一个阶段。这种优化是 Spark 性能的关键。DAG调度程序的最终结果是一组阶段。阶段被传递给任务调度程序。任务调度程序通过集群管理器启动任务。(独立 Spark /纱线/介子)。任务调度程序不知道阶段之间的依赖关系。