阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Spark集群的运行流程

261次阅读
没有评论

共计 3845 个字符,预计需要花费 10 分钟才能阅读完成。

一、Spark on Standalone

1.spark 集群启动后,Worker 向 Master 注册信息

Spark 集群的运行流程

2.spark-submit 命令提交程序后,driver 和 application 也会向 Master 注册信息

Spark 集群的运行流程

Spark 集群的运行流程

3. 创建 SparkContext 对象:主要的对象包含 DAGScheduler 和 TaskScheduler

4.Driver 把 Application 信息注册给 Master 后,Master 会根据 App 信息去 Worker 节点启动 Executor

5.Executor 内部会创建运行 task 的线程池,然后把启动的 Executor 反向注册给 Dirver

6.DAGScheduler:负责把 Spark 作业转换成 Stage 的 DAG(Directed Acyclic Graph 有向无环图),根据宽窄依赖切分 Stage,然后把 Stage 封装成 TaskSet 的形式发送个 TaskScheduler;

  同时 DAGScheduler 还会处理由于 Shuffle 数据丢失导致的失败;

7.TaskScheduler:维护所有 TaskSet,分发 Task 给各个节点的 Executor(根据数据本地化策略分发 Task),监控 task 的运行状态,负责重试失败的 task;

8. 所有 task 运行完成后,SparkContext 向 Master 注销,释放资源;

注:job 的失败不会重试

Spark 集群的运行流程

二、Spark on Yarn

yarn 是一种统一的资源管理机制,可以通过队列的方式,管理运行多套计算框架。Spark on Yarn 模式根据 Dirver 在集群中的位置分为两种模式

一种是 Yarn-Client 模式,另一种是 Yarn-Cluster 模式

yarn 框架的基本运行流程图

Spark 集群的运行流程

ResourceManager:负责将集群的资源分配给各个应用使用,而资源分配和调度的基本单位是 Container,其中封装了集群资源(CPU、内存、磁盘等),每个任务只能在 Container 中运行,并且只使用 Container 中的资源;

NodeManager:是一个个计算节点,负责启动 Application 所需的 Container,并监控资源的使用情况汇报给 ResourceManager

ApplicationMaster:主要负责向 ResourceManager 申请 Application 的资源,获取 Container 并跟踪这些 Container 的运行状态和执行进度,执行完后通知 ResourceManager 注销 ApplicationMaster,ApplicationMaster 也是运行在 Container 中;

(1)client

 yarn-client 模式,Dirver 运行在本地的客户端上。

Spark 集群的运行流程

1.client 向 ResouceManager 申请启动 ApplicationMaster,同时在 SparkContext 初始化中创建 DAGScheduler 和 TaskScheduler

2.ResouceManager 收到请求后,在一台 NodeManager 中启动第一个 Container 运行 ApplicationMaster

3.Dirver 中的 SparkContext 初始化完成后与 ApplicationMaster 建立通讯,ApplicationMaster 向 ResourceManager 申请 Application 的资源

4. 一旦 ApplicationMaster 申请到资源,便与之对应的 NodeManager 通讯,启动 Executor,并把 Executor 信息反向注册给 Dirver

5.Dirver 分发 task,并监控 Executor 的运行状态,负责重试失败的 task

6. 运行完成后,Client 的 SparkContext 向 ResourceManager 申请注销并关闭自己

(2)cluster

yarn-cluster 模式中,当用户向 yarn 提交应用程序后,yarn 将分为两阶段运行该应用程序:

第一个阶段是把 Spark 的 Dirver 作为一个 ApplicationMaster 在 yarn 中启动;

第二个阶段是 ApplicationMaster 向 ResourceManager 申请资源,并启动 Executor 来运行 task,同时监控 task 整个运行流程并重试失败的 task;

 Spark 集群的运行流程

Yarn-client 和 Yarn-cluster 的区别:

yarn-cluster 模式下,Dirver 运行在 ApplicationMaster 中,负责申请资源并监控 task 运行状态和重试失败的 task,当用户提交了作业之后就可以关掉 client,作业会继续在 yarn 中运行;

yarn-client 模式下,Dirver 运行在本地客户端,client 不能离开。

Dirver 与集群间的通信主要有以下几点:

1. 注册 Dirver 信息

2. 根据宽窄依赖切分 stage

3. 注册 Application 信息

4. 分发 task

5. 监听 task 的运行状态

6. 重试失败的 task

7. 重试失败的 stage

 Spark 的数据本地化机制有以下 5 种:

1、PROCESS_LOCAL 进程本地化
2、NODE_LOCAL 节点本地化
3、NO_PREF        读取的数据在数据库中
4、RACK_LOCAL  机架本地化
5、ANY   跨机架
如何选择数据本地化的级别?
TaskScheduler 发送的 task 在 Executor 上无法执行时,TaskScheduler 会降低数据本地化的级别,再次发送,如果还是无法执行,再降低一次数据本地化的级别,再次发送,直至可以执行。

默认每次等待 3s,重试 5 次,之后降一级本地化级别。

如何提高数据本地化的级别?
task 执行的等待时间延长,从原来的 3s 提高到 6s
提高数据本地化的级别要注意,不要本末倒置
spark.locality.wait 默认 3s
spark.locality.process 等待进程本地化的时间,默认与 spark.locality.wait 相等
spark.locality.node
spark.locality.rack

Spark shuffle 阶段的数据传输

MapOutputTrackerWorker(从):在 spark 集群的每个 worker 中,负责将本地的 map output block 信息发送给 master 中的 MapOutputTrackerMaster

MapOutputTrackerMaster(主):在 spark 集群的 master 中,负责记录各个 worker 节点的 map output block 信息

BlockManager:每个 Executor 中的 BlockManager 实例化的时候都会向 Dirver 中的 BlockManagerMaster 注册信息,而 BlockManagerMaster 会创建 BlockManagerInfo 来管理元数据信息

BlockManagerMaster:在 DAGScheduler 对象中,管理元数据信息

BlockManagerSlaveEndpoint:在 Executor 端,负责接收 BlockManagerMaster 发送过来的信息

BlockTransferService:传输各个节点的 block

MemoryStore、DiskStore

更多 Spark 相关教程见以下内容

CentOS 7.0 下安装并配置 Spark  http://www.linuxidc.com/Linux/2015-08/122284.htm

Ubuntu 系统搭建单机 Spark 注意事项  http://www.linuxidc.com/Linux/2017-10/147220.htm

Spark1.0.0 部署指南 http://www.linuxidc.com/Linux/2014-07/104304.htm

Spark2.0 安装配置文档  http://www.linuxidc.com/Linux/2016-09/135352.htm

Spark 1.5、Hadoop 2.7 集群环境搭建  http://www.linuxidc.com/Linux/2016-09/135067.htm

Spark 官方文档 – 中文翻译  http://www.linuxidc.com/Linux/2016-04/130621.htm

在 Ubuntu 17.10 上安装 Apache Spark  http://www.linuxidc.com/Linux/2017-12/149853.htm

CentOS 6.2(64 位)下安装 Spark0.8.0 详细记录 http://www.linuxidc.com/Linux/2014-06/102583.htm

Spark-2.2.0 安装和部署详解  http://www.linuxidc.com/Linux/2017-08/146215.htm

Spark2.0.2 Hadoop2.6.4 全分布式配置详解 http://www.linuxidc.com/Linux/2016-11/137367.htm

Ubuntu 14.04 LTS 安装 Spark 1.6.0(伪分布式)http://www.linuxidc.com/Linux/2016-03/129068.htm

Spark 的详细介绍:请点这里
Spark 的下载地址:请点这里

本文永久更新链接地址:http://www.linuxidc.com/Linux/2018-02/150886.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计3845字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中