Spark作业提交原理
1.6 Spark作业提交原理
Spark作业(任务)提交就是使用spark中spark-sumbit命令将已经封装好成jar包的程序提交到spark集群中执行运行从而得到计算结果的过程,在提交过程中我们对提交的作业(任务)进行参数设置操作
spark提交作业的语法
bin/spark-submit \
--class <main-class>
--master <master-url> \
... # other options
<application-jar> \
[application-arguments]
参数 | 解释 |
---|---|
--class | Spark程序中包含主函数的类 |
--master | Spark程序运行的模式(环境) |
--deploy-mode | master设为为Yarn模式之后,使用的模式client 和 cluster |
--driver-cores | master设为为Yarn模式之后,设置driver端的的cores个数 |
--driver-memory | master设为为Yarn模式之后,用于设置driver进程的内存(单位G或单位M) |
--num-executors | master设为为Yarn模式之后,用于设置Spark作业总共要用多少个Executor进程来执行 |
--executor-memory | 指定每个executor可用内存(单位G或单位M) |
--total-executor-cores 2 | 指定所有executor使用的cpu核数为2个 |
--executor-cores | 指定每个executor使用的cpu核数 |
application-jar | 打包好的应用jar,包含依赖。这个URL在集群中全局可见。 比如hdfs:// 共享存储系统,如果是file:// path,那么所有的节点的path都包含同样的jar |
application-arguments | 传给main()方法的参数 |
1.6.1 spark提交作业方式(Standalone模式)
提交Spark提供的利用蒙特·卡罗算法求π的例子,其中100这个参数是计算因子
spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://qianfeng01:7077 \
--executor-memory 512m \
--total-executor-cores 2 \
/usr/local/spark-3.1.2/examples/jars/spark-examples_2.12-3.1.2.jar 100
注意:在启动任务的时候并没有指定分配资源,而是有多少资源就使用了多少资源我们在跑任务的时候是可以指定资源的,可以在指定使用核数和内存资源
1.6.2 spark提交作业方式(YARN-client模式)
提交Spark提供的利用蒙特·卡罗算法求π的例子,其中100这个参数是计算因子
spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn \
--deploy-mode client \
--driver-cores 1 \
--driver-memory 600M \
--executor-memory 800M \
--executor-cores 2 \
/usr/local/spark-3.1.2/examples/jars/spark-examples_2.12-3.1.2.jar 100
? #执行结果如下:
......
2022-08-31 17:04:47,763 INFO scheduler.TaskSetManager: Finished task 99.0 in stage 0.0 (TID 99) in 20 ms on qianfeng02 (executor 2) (100/100)
2022-08-31 17:04:47,764 INFO cluster.YarnScheduler: Removed TaskSet 0.0, whose tasks have all completed, from pool
2022-08-31 17:04:47,766 INFO scheduler.DAGScheduler: ResultStage 0 (reduce at SparkPi.scala:38) finished in 1.464 s
2022-08-31 17:04:47,768 INFO scheduler.DAGScheduler: Job 0 is finished. Cancelling potential speculative or zombie tasks for this job
2022-08-31 17:04:47,768 INFO cluster.YarnScheduler: Killing all running tasks in stage 0: Stage finished
2022-08-31 17:04:47,779 INFO scheduler.DAGScheduler: Job 0 finished: reduce at SparkPi.scala:38, took 1.515996 s
Pi is roughly 3.1420551142055113
2022-08-31 17:04:47,790 INFO server.AbstractConnector: Stopped Spark@3c321bdb{HTTP/1.1, (http/1.1)}{0.0.0.0:4040}
2022-08-31 17:04:47,795 INFO ui.SparkUI: Stopped Spark web UI at http://qianfeng01:4040
......注意:在启动任务的时候并没有指定分配资源,而是有多少资源就使用了多少资源我们在跑任务的时候是可以指定资源的,可以在指定使用核数和内存资源
1.6.3 spark提交作业方式(YARN-Cluster模式)
提交Spark提供的利用蒙特·卡罗算法求π的例子,其中100这个参数是计算因子
spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn \
--deploy-mode cluster \
--driver-cores 1 \
--driver-memory 600M \
--executor-memory 800M \
--executor-cores 2 \
/usr/local/spark-3.1.2/examples/jars/spark-examples_2.12-3.1.2.jar 100
#执行结果 在yarn集群的web ui中对应作业的日志的最底部能看到打印结果。
注意:在启动任务的时候并没有指定分配资源,而是有多少资源就使用了多少资源我们在跑任务的时候是可以指定资源的,可以在指定使用核数和内存资源
1.6.4 YARN-Cluster和YARN-Client的区别
-
理解YARN-Client和YARN-Cluster深层次的区别之前先清楚一个概念:Application Master。在YARN中,每个Application实例都有一个ApplicationMaster进程,它是Application启动的第一个容器。它负责和ResourceManager打交道并请求资源,获取资源之后告诉NodeManager为其启动Container。从深层次的含义讲YARN-Cluster和YARN-Client模式的区别其实就是ApplicationMaster进程的区别
-
YARN-Cluster模式下,Driver运行在AM(Application Master)中,它负责向YARN申请资源,并监督作业的运行状况。当用户提交了作业之后,就可以关掉Client,作业会继续在YARN上运行,因而YARN-Cluster模式不适合运行交互类型的作业
-
YARN-Client模式下,Application Master仅仅向YARN请求Executor,Client会和请求的Container通信来调度他们工作,也就是说Client不能离开
总结:
(1)Yarn-Cluster的Driver是在集群的某一台NM上,但是Yarn-Client就是在Client的机器上; (2)Driver会和Executors进行通信,所以Yarn_Cluster在提交App之后可以关闭Client,而Yarn-Client不可以; (3)Yarn-Cluster适合生产环境,Yarn-Client适合交互和调试。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!