写点什么

Spark 详细剖析

发布于: 2021 年 03 月 21 日
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


发布于: 2021 年 03 月 21 日阅读数: 11
用户头像

还未添加个人签名 2020.11.10 加入

专注于大数据技术

评论

发布
暂无评论
Spark详细剖析