1. Spark yarn模式任务提交

Spark yarn模式任务提交有两种,Yarn-cluster,Yarn-client,默认client

1.1 名词简介

1. ResourceManager
是集群所有应用程序的资源管理器,能够管理集群的计算资源并为每个Application分配,它是一个纯粹的调度器。
2. NodeManager
是每一台slave机器的代理,执行应用程序,并监控应用程序的资源使用情况。
3. Application Master
每一个应用程序都会有一个Application Master,它的主要职责是向RM申请资源、在每个NodeManager上启动executors、监控和跟踪应用程序的进程等。
4. Driver
负责创建SparkContext(spark会话框,准备spark程序的运行环境) 在Spark中由SparkContext负责与ClusterManager通讯,进行资源的申请,任务的分配和监控等。当Executor部分运行完毕后,Driver同时负责将SaprkContext关闭,通常创建SparkContext的机器代表Driver.

1.2 yarn-cluster

spark提交yarn任务到指定资源管理器 spark yarn模式提交任务_spark


cluster模式下driver运行在yarn上,避免了Application Master与活的client的频繁交互

  1. 客户端生成作业信息提交给ResourceManager,
  2. RM在会在某个NodeManager分配一个container并启动 Application Master ,AM初始化SparkContext,开始驱动程序,这个NodeManager便是driver
  3. Application Maste向ResourceManager申请资源,并在每台NodeManager上启动相应的executors
  4. Executor向NodeManager的Application Master注册汇报,并完成相应的任务

1.3 yarn-client

spark提交yarn任务到指定资源管理器 spark yarn模式提交任务_应用程序_02

  1. 客户端生成作业信息提交给ResourceManager
  2. RM在本地NodeManager上启动Application Master
  3. AM向RM申请资源,分配资源同时通知其他NodeManager启动相应的Executor
  4. Executor向本地启动的Application Master注册汇报并完成相应的任务

1.4 两者区别:

  1. 两者Driver所在位置不同
    Yarn-Client 的 driver在客户端
    Yarn-Cluster 的driver在yarn集群中随机选择
  2. 客户端的任务不同
    Yarn-Client是在客户端运行,先有driver再用Application Master,此时driver负责RDD,task生成和分发,向AM汇报注册汇报,AM负责从RM申请资源.client时刻与AM保持联系。
    Yarn-Cluster时 client将用户程序提交到到spark集群中就与spark集群断开联系了,此时client将不会发挥其他任何作用,仅仅负责提交。在此模式下。AM和driver是同一个东西。

1.5 命令案例

Spark任务提交至yarn

/spark/bin/spark-submit \
--master yarn \                  #提交模式,显而易见我们是提交到yarn上
--deploy-mode cluster \          #运行的模式,还有一种client模式,但大多用于调试,此处使用cluster模式
--class org.apache.spark.test \  #提交的任务
--name "test" \                  #任务名字
--queue root.default \    	     #提交的队列
--driver-memory 3g \             #为driver申请的内存
--num-executors 1 \              #executors的数量,可以理解为线程数,对应yarn中的Container个数
--executor-memory 6g \           #为每一个executor申请的内存
--executor-cores 4 \              #为每一个executor申请的core
--conf spark.yarn.driver.memoryOverhead=1g \    #driver可使用的非堆内存,这些内存用于如VM,字符 串常量池以及其他额外本地开销等
--conf spark.yarn.executor.memoryOverhead=2g \  #每个executor可使用的非堆内存,这些内存用于如 VM,字符串常量池以及其他额外本地开销等
  • 实际案例
su hdfs
export SPARK_MAJOR_VERSION=2
##默认的client模式
nohup spark-submit \
--master yarn \
--driver-memory 3g \
--num-executors 5 \
--executor-cores 6 \
--executor-memory 10g \
--class mergedata.BusEmpData \
--name "BusEmpData" \
/home/dgg/businessrecommender/DataLoader-1.0-SNAPSHOT-jar-with-dependencies.jar &

###指定cluster模式

nohup spark-submit \
--master yarn \
--deploy-mode cluster \
--driver-memory 3g \
--num-executors 5 \
--executor-cores 6 \
--executor-memory 10g \
--class mergedata.BusEmpData \
--name "BusEmpData" \
/home/dgg/businessrecommender/DataLoader-1.0-SNAPSHOT-jar-with-dependencies.jar &