欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Spark yarn模式任务提交

程序员文章站 2022-04-01 22:04:23
...

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模式任务提交
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模式任务提交

  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 &