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