spark-yarn提交任务的几种方式
1、Yarn模式两种提交任务方式
1.yarn-client:用于测试,driver运行在本地客户端,负责调整application,会与yarn集群产生大量网络通信,网卡流量过大,导致网络阻塞i,可能会导致任务失败,好处为执行时,本地可以看到所有log。
2.yarn-cluster:用于生产环境,因为driver运行在NM上,没有网卡流量问题,但log会分散在每个节点上,只能通过yarn app logs命令查看。
提交方式对比
1.1、yarn-client提交任务方式
提交命令
>bin/spark-submit \
--master yarn \
--class org.apache.spark.examples.SparkPi \
examples/jars/spark-examples_2.11-2.3.3.jar \
100
或
>bin/spark-submit \
--master yarn–client \
--class org.apache.spark.examples.SparkPi \
examples/jars/spark-examples_2.11-2.3.3.jar \
100
或
>bin/spark-submit \
--master yarn \
--deploy-mode client \
--class org.apache.spark.examples.SparkPi \
examples/jars/spark-examples_2.11-2.3.3.jar \
100
1.1.1 yarn-client执行流程
1.客户端提交一个application,在客户端启动一个driver进程
2.客户端向ResourceManager发送请求,启动一个ApplicationMaster
3.RS收到请求,会随机选择一台NM分配container启动AM
4.AM启动后,会像RS申请一批container,用于启动Executor
5.AM连接其他NM启动Executor
6.Excutor启动后,会反向注册给Driver
7.Driver发送task到Excutor,并返回执行情况和结果到Driver端
1.2、yarn-cluster提交任务方式
>bin/spark-submit \
--master yarn \
--deploy-mode cluster \
--class org.apache.spark.examples.SparkPi \
examples/jars/spark-examples_2.11-2.3.3.jar \
100
或
bin/spark-submit \
--master yarn-cluster \
--class org.apache.spark.examples.SparkPi \
examples/jars/spark-examples_2.11-2.3.3.jar \
100
1.2.1 yarn-cluster执行流程
1.客户机提交Application应用程序,发送请求到RS(ResourceManager),请求启动AM(ApplicationMaster)。
2.RS收到请求后随机在一台NM(NodeManager)上启动AM(相当于Driver端)。
AM启动,AM发送请求到RS,请求一批container用于启动Executor。
3.RS返回一批NM节点给AM。
4.AM连接到NM,发送请求到NM启动Executor。
5.Executor反向注册到AM所在的节点的Driver。Driver发送task到Executor。
1.3、ApplicationMaster作用
-
初始化向ResourceManager报告自己的活跃信息的进程
-
计算应用程序的的资源需求。
-
将需求转换为YARN调度器可以理解的ResourceRequest。
-
与调度器协商申请资源
-
与NodeManager协同合作使用分配的Container。
-
跟踪正在运行的Container状态,监控它的运行。
-
对Container或者节点失败的情况进行处理,在必要的情况下重新申请资源。