基于spark1.6测试(虽然很多公司都已经在用2.X了,但是1.6我认为是最经典的版本,CDH最新版本至今默认的spark版本依然是1.6,不过2.X提交方式是基本没有变的)

Standalone

(1)standalone-client提交任务方式

提交命令

./spark-submit \
--master spark://node1:7077 \
--class org.apache.spark.examples.SparkPi \
../lib/spark-examples-1.6.0-hadoop2.6.0.jar \
1000

或者

./spark-submit
--master spark://node1:7077
--deploy-mode client
--class org.apache.spark.examples.SparkPi
../lib/spark-examples-1.6.0-hadoop2.6.0.jar
100

执行原理图解

执行流程讲解

1.client模式提交任务后,会在客户端启动Driver进程。
2.Driver会向Master申请启动Application启动的资源。
3.资源申请成功,Driver端将task发送到worker端执行。
4.worker将task执行结果返回到Driver端。

总结

client模式适用于测试调试程序。Driver进程是在客户端启动的,这里的客户端就是指提交应用程序的当前节点。在Driver端可以看到task执行的情况。生产环境下不能使用client模式,是因为:假设要提交100个application到集群运行,Driver每次都会在client端启动,那么就会导致客户端100次网卡流量暴增的问题。

(2)standalone-cluster提交任务方式

提交命令

./spark-submit
--master spark://node1:7077
--deploy-mode cluster
--class org.apache.spark.examples.SparkPi
../lib/spark-examples-1.6.0-hadoop2.6.0.jar
100

执行原理

执行流程

1.cluster模式提交应用程序后,会向Master请求启动Driver.
2.Master接受请求,随机在集群一台节点启动Driver进程。
3.Driver启动后为当前的应用程序申请资源。
4.Driver端发送task到worker节点上执行。
5.worker将执行情况和执行结果返回给Driver端。

总结

Driver进程是在集群某一台Worker上启动的,在客户端是无法查看task的执行情况的。假设要提交100个application到集群运行,每次Driver会随机在集群中某一台Worker上启动,那么这100次网卡流量暴增的问题就散布在集群上。

总结Standalone两种方式提交任务,Driver与集群的通信包括

  1. Driver负责应用程序资源的申请
  2. 任务的分发。
  3. 结果的回收。
  4. 监控task执行情况。

Yarn

(1)yarn-client提交任务方式

提交命令

./spark-submit
--master yarn
 --class org.apache.spark.examples.SparkPi ../lib/spark-examples-1.6.0-hadoop2.6.0.jar
100

或者

./spark-submit
--master yarn–client
 --class org.apache.spark.examples.SparkPi ../lib/spark-examples-1.6.0-hadoop2.6.0.jar
100

或者

./spark-submit
--master yarn
--deploy-mode  client
 --class org.apache.spark.examples.SparkPi ../lib/spark-examples-1.6.0-hadoop2.6.0.jar
100

执行原理图解

执行流程

1.客户端提交一个Application,在客户端启动一个Driver进程。
2.应用程序启动后会向RS(ResourceManager)发送请求,启动AM(ApplicationMaster)的资源。
3.RS收到请求,随机选择一台NM(NodeManager)启动AM。这里的NM相当于Standalone中的Worker节点。
4.AM启动后,会向RS请求一批container资源,用于启动Executor.
5.RS会找到一批NM返回给AM,用于启动Executor。
6.AM会向NM发送命令启动Executor。
7.Executor启动后,会反向注册给Driver,Driver发送task到Executor,执行情况和结果返回给Driver端。

总结

Yarn-client模式同样是适用于测试,因为Driver运行在本地,Driver会与yarn集群中的Executor进行大量的通信,会造成客户机网卡流量的大量增加.

ApplicationMaster的作用

1.为当前的Application申请资源
2.给NameNode发送消息启动Executor。
注意:ApplicationMaster有launchExecutor和申请资源的功能,并没有作业调度的功能。

(2)yarn-cluster提交任务方式

提交命令

./spark-submit
--master yarn
--deploy-mode cluster
--class org.apache.spark.examples.SparkPi ../lib/spark-examples-1.6.0-hadoop2.6.0.jar
100

或者

./spark-submit
--master yarn-cluster
--class org.apache.spark.examples.SparkPi ../lib/spark-examples-1.6.0-hadoop2.6.0.jar
100

执行原理

执行流程

1.客户机提交Application应用程序,发送请求到RS(ResourceManager),请求启动AM(ApplicationMaster)。
2.RS收到请求后随机在一台NM(NodeManager)上启动AM(相当于Driver端)。
3.AM启动,AM发送请求到RS,请求一批container用于启动Executor。
4.RS返回一批NM节点给AM。
5.AM连接到NM,发送请求到NM启动Executor。
6.Executor反向注册到AM所在的节点的Driver。Driver发送task到Executor。

总结

Yarn-Cluster主要用于生产环境中,因为Driver运行在Yarn集群中某一台nodeManager中,每次提交任务的Driver所在的机器都是随机的,不会产生某一台机器网卡流量激增的现象,缺点是任务提交后不能看到日志。只能通过yarn查看日志。

ApplicationMaster的作用

1.为当前的Application申请资源
2.给NameNode发送消息启动Excutor。
任务调度。

停止集群任务命令:yarn application -kill applicationID

下一篇将讲解详细的提交参数

Spark提交代码的两种方式相关推荐

  1. Spark Standalone -- 独立集群模式、Spark 提交任务的两种模式、spark在yarn上运行的环境搭建、自己写的spark代码如何提交到yarn上并运行...

    目录 Spark Standalone -- 独立集群模式 Standalone 架构图 Standalone 的搭建 1.上传.解压.重命名 2.配置环境变量 3.修改配置文件 conf 4.同步到 ...

  2. 网页刷新代码(html)两种方式

    网页刷新代码(html)两种方式: window.location.href = window.location.href; window.location.reload();

  3. 向服务器端提交数据的两种方式

    朴素版:                                                                                                 ...

  4. springboot项目启动成功后执行一段代码的两种方式

    实现ApplicationRunner接口 package com.lnjecit.lifecycle;import org.springframework.boot.ApplicationArgum ...

  5. form表单提交数据的两种方式——submit直接提交、AJAX提交

    submit提交 form表单本身提供action属性,在action属性中填写数据提交地址后,点击submit类型的按钮即可将数据提交至指定地址,代码如下: <form action=&quo ...

  6. git下载代码的两种方式

    1.第一种使用tortoiseGit插件: a.首先在setting中的Git中添加user&email b.通过git clone填写url和branch,选择下载工程的不同分支上的代码 2 ...

  7. Python 执行代码的两种方式

    1.交互执行即黑屏命令行执行 优点:即时调时程序,调试方便 缺点:无法永久无法保存代码 2.即文件存储代码执行Python代码文件 优点:可以永久保存代码 缺点:调试不方便 转载于:https://w ...

  8. spark创建DF的两种方式

    1.创建一个SparkContext,然后再创建SQLContext 2.先创建RDD,对数据进行整理,然后关联case class,将非结构化的数据转换成结构化数据 3.显示的调用toDF方法,将R ...

  9. linux中安shell怎么传入参数,【linux】linux 下 shell命令 执行结果赋值给变量【两种方式】...

    方法1:[通用方法] 使用Tab键上面的反引号 例子如下: find命令 模糊查询在/apps/swapping目录下 查找 文件名中包含swapping并且以.jar结尾的文件 使用反引号 引住命令 ...

最新文章

  1. 移动端video隐藏进度条_机器学习模型部署--打通前后端任督二脉
  2. Eclipse 导入 Tomcat 源码
  3. rest风格的get加密字符串怎么接收_RESTful Api的设计与风格,你该学一下咯
  4. 数据产品经理为什么吃香?
  5. linux环境发送中文失败,linux - 无法从linux命令发送邮件 - SO中文参考 - www.soinside.com...
  6. 对于引用的控件被拒绝访问的解决办法的补充(续)
  7. linux 混杂设备 miscdevice设备介绍
  8. python定时任务之cron_Python定时任务框架APScheduler 3.0.3 Cron示例
  9. 用.net改写的uploadify多文件上传控件
  10. 修改他人代码:怎么才能减少发布Bug概率?
  11. 10月8日提交的结对编程工程中的经验和教训
  12. 三角网格(Triangle Mesh)
  13. 马斯克发起投票:是否应该出售特斯拉10%的股票?超5成粉丝赞成
  14. 最简单的dubbo教程-快速入门《一》
  15. 小白入门Web测试方法总结
  16. OrangePi PC 玩Linux主线内核踩坑之旅(三)之设置静态IP地址
  17. Mac-iTerm2固定标签名字
  18. jQuery的click点击方法合集
  19. 浏览器播放rtsp视频流:3、rtsp转webrtc播放
  20. Linux中的NFS共享

热门文章

  1. [原创]RedisDesktopManager工具使用介绍
  2. 深度学习在推断阶段(inference)的硬件实现方法概述
  3. 迭代器、生成器、函数递归与二分法
  4. 10月19日 蒟蒻的流水账
  5. 算法复习周------“贪心问题之‘单源最短路径’”
  6. 第二十二篇 jQuery 学习4 内容和属性
  7. Gradle 构建 android 应用常见问题解决指南
  8. 2014ACM/ICPC亚洲区西安站 F题 color (组合数学,容斥原理)
  9. Servlet学习-MVC开发模式
  10. Hadoop笔记整理(二):HDFS