Spark在Yarn上的资源调度和任务调度


spark在Yarn上的资源调度和任务调度

一、spark的执行架构

spark代码会分为两部分:Driver端、Executor端

二、spark on yarn的资源调度(申请资源)

大数据引擎的执行过程:

1、资源调度(申请资源):申请CPU、内存、Executor的数量

2、任务调度(执行task)

1、spark on yarn client模式的执行流程图

spark--粗粒度资源申请
spark会在任务执行之前将所有的资源全部申请下来。
task在执行的时候不需要再单独申请资源,直接发送到Executor中执行,启动快。
但是spark需要等待所有的task执行完成才会释放资源,会导致资源浪费

MapReduce--细粒度资源申请
每一个task在执行的时候自己去申请资源。
task启动之前需要先申请资源,启动就会变慢,整个任务执行就会变慢。
每一个task单独申请资源,不会占用额外的资源
Driver的功能是将task发送到Executor中执行。
Driver是知道整个任务执行进度的,在本地可以看到详细的执行日志。

如果在本地提交大量的spark任务,会导致本地服务器的网卡流量剧增,
所以client模式一般用于上线前的测试,可以看到日志方便调试
2、spark on yarn cluster模式

yarn cluster模式,Driver不在本地启动,在本地也没有详细的日志,
不会导致某台服务器网卡剧增,一般用于上线使用

三、spark on yarn的任务调度(执行task)

spark程序结构(由大到小)

1、Application:应用程序

2、Job:由action算子触发(代码中有多少action算子就有多少个Job)

3、stage:由宽依赖切分得到,是一组可以并行计算的task

4、task:线程对象,task中封装了算子的代码逻辑(底层会自动封装)

Application:基于Spark的应用程序,包含了driver程序和集群上的executor

DriverProgram:Driver代码,算子之外的代码。运行main函数并且新建SparkContext的程序 

ClusterManager:在集群上获取资源的外部服务(例如standalone,Mesos,Yarn )

WorkerNode:集群中任何可以运行应用用代码的节点 

Executor:执行task。
		  是在一个workernode上为某应用用启动的一个进程,该进程负责运行任务,
		  并且负责将数据存在内存或者磁盘上。每个应用用都有各自自独立的executors 

Task:数量由分区和shuffle决定。被送到某个executor上的执行单元

Job:包含很多任务的并行计算的task,
	 可以看做和Spark的action对应,每个action都会触发一个job任务 

Stage:一个Job会被拆分很多组任务,每组任务被称为Stage
	  (就像MapReduce分map任务和reduce任务一样) 
1、宽依赖和窄依赖

宽依赖:一分区对多分区,产生shuffle

窄依赖:一分区对 一分区,不产生shuffle

2、任务调度解释说明

如果task执行失败,Task调度器会重试3次再继续执行task,
如果Task调度器重试3次失败,DAG调度器会重试Task调度器4次,
如果DAG调度器会重试Task调度器4次失败,那么就会报错
3、资源调度和任务调度的执行流程图(yarn client模式)

如果task执行失败,TaskScheduler会重试3次,如果还失败,由DAGScheduler重试Stage4次。

如果是因为shuffle文件找不到出现的溢出,TaskScheduler不负责重试task,
而是由DAGScheduler重试上一个Stage

推测执行:如果有一个task执行很慢,TaskScheduler会再发送一个一样的task去竞争


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM