Spark on YARN工作原理



MapReduce on YARN的工作流程:加载数据,执行map,shuffle,reduce,将结果写入持久化存储。

Spark on YARN的工作流程:spark中一个job包含多个stage,而非只有map和reduce,application包含多个job。


Spark工作原理

用户通过spark-sumbit提交spark application后,会启动相对应的spark driver进程,从YARN分配得到container,动态的分配executor,spark层面并不能动态的调整从Yarn分配的container资源(container是Yarn分配资源的基本单位,yarn对container分配的资源控制体现在vcore和memory上)。Yarn根据spark.executor.memory和spark.executor.cores等参数指定的要求的大小分配executor运行的container。num-executors指定executor的数量。资源申请成功后,driver进程将spark作业转化为多个stage。每个stage执行一批task(task是最小的计算单元,负责执行一模一样的计算逻辑),stage执行完毕后,会在各节点本地磁盘写入中间结果,调度下一个stage,下一个stage的task输入数据是上一个stage输出的中间结果。

Spark-submit提交任务是对应的相关参数如下:

--driver-memory

--executor-memory

--driver-cores

--executor-cores

--driver-cores

--queue

--number-executors

备注(这些参数spark on Yarn都支持,有些参数比如--total-executor-cores之类的spark standalone和Mesos支持,具体参数支持情况执行spark-submit --help查看)

Executor内存的分配

--executor-memory中指定的内存或者spark.executor.memory默认的内存有三个用途:

1.Task执行用户编写的代码时使用

2.Task通过shuffle获取上一个stage的task输出,进行聚合等操作

,默认0.2

3.RDD持久化使用

,默认0.6