一 介绍
基于YARN的提交模式,总共有2种:一种是基于YARN的yarn-cluster模式;一种是基于YARN的yarn-client模式。
需要将提交应用程序的spark-submit的脚本中加上--master参数,设置为yarn-cluster或者yarn-client。如果没有设置,默认就是standalone模式。
spark-submit --class com.spark.sql.SyncHive2MySQL \
--master yarn-client/yarn-cluster \
--deploy-mode client/cluster \
--num-executors 1 \
--driver-memory 1g \
--executor-memory 1g \
--executor-cores 1 \
--conf "spark.ui.port=4040"
/opt/run/spark-app.jar
二 Spark ON Yarn 的 Job History 配置
# yarm-site.xml 需要开启日志聚合功能
yarn.log-aggregation-enabled= true
# 配置log dir
yarn.log-aggregation-enbaled = true
yarn.log,server.urtl:
http://hadoop-all-02:19888.jobhistory.job
# Spark的job history 服务启动
start-historyserver.sh(18080)
# 在spark-defaults中配置,将event归档
spark.eventLog.enabled true
spark.eventLog.dirhdfs://hdfs-cluster/spark-history
# spark_env.sh,配置SPARK_HISTORY_OPTS然后展示归档文件的的event
SPARK_HISTORY_OPTS=-Dspark.history.fs.logDirectory=hdfs://hdfs-cluster/spark-history–Dspark.history.ui.port=18080
spark.yarn.historyServer.addresshtttp://hadoop-all-01:18080
三 yarn-cluster 流程图
3.1 提交应用程序,发送请求到RM,向RM申请启动ApplicationMaster的Container资源。
3.2 RM分配该Container资源到某一个NM,通知该NM启动ApplicationMaster,这个AM就相当于Driver,用于分配
3.3 NM启动Application Master
3.4 Application Master启动之后,向RM申请一批Container资源,用韵启动Executors
3.5 分配Container资源到各个NM
3.6 启动Executor
3.7 Executor然后向Driver反向注册
四 yarn-client流程图
4.1 提交应用程序,向RM发送请求,申请启动Application Master所需资源
4.2 RM分配Container资源给某一个NM
4.3 该NM根据分配的Container启动ApplicationMaster,这个ApplicationMaster与yarn-cluster中的AM区别在于:它不运行SparkContext,只是和SparkContext进行联系,进行资源分派
4.4 SparkContext启动完毕后,与AM建立通信,向RM注册申请运行Executor的Container资源
4.5 RM通知NM根据分配的Container资源启动Executor
4.6 Executor启动之后,需要向SparkContext反向注册,申请任务集
4.7 SparkContext分配任务集给Executor,并向DriverEndpoint汇报运行状态
五MapReduce On YARN的流程:
# 客户端向RM申请Container资源运行AM
# 分配资源后,RM通知NM启动AM
# AM向RM申请Container资源运行Job
# 通知NM启动相关的Task
# AM 监控和调度Task的运行