版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/youbitch1/article/details/89140277
Spark核心架构-spark-submit 详解
史上最简单的spark教程
所有代码示例地址:https://github.com/Mydreamandreality/sparkResearch
(提前声明:文章由作者:张耀峰 结合自己生产中的使用经验整理,最终形成简单易懂的文章,写作不易,转载请注明)
(文章参考:Elasticsearch权威指南,Spark快速大数据分析文档,Elasticsearch官方文档,实际项目中的应用场景)
(帮到到您请点点关注,文章持续更新中!)
Git主页 https://github.com/Mydreamandreality
- 在教程最开始的时候,我写过一个提交spark程序并且运行的案例
- 没有看过的朋友请跳转这里 ↓
- 快速开发部署你的第一个spark+java程序
这章的目的就是深入浅出的讲一下spark程序的提交过程
- 不管我们使用的是哪种集群管理器
(yarn或者spark自身的)
,我们都可以使用spark提供给我们的spark-submit提交我们的task程序 - 通过不同的配置选项,spark-submit可以连接到相应的集群管理器上,并且控制程序使用的资源数量
- 当我们使用某些特定的资源管理器时,spark-submit也可以将驱动器节点运行在集群的内部,比如yarn的工作节点
提交应用的脚本
- /usr/local/spark/spark-2.2.3-bin-hadoop2.7/bin/spark-submit --master local[3] --executor-memory 512m --class web.SparkApplication sparkResearchMvn-1.0-SNAPSHOT.jar
- 上面这个脚本是我们之前提交时使用的,当时有过简单的介绍
这里我们首先说 --master这个参数的具体含义
–master代表我们要连接的集群URL,详见下图表
–mater连接的值 | 含义 |
---|---|
local | 运行本地模式,单核模式 |
local[N] | 运行本地模式,N核模式 |
local[*] | 运行本地模式,使用尽可能多的核心 |
yarn | 连接到一个yarn集群 |
mesos://host:port | 连接到mesos集群,主节点默认监听5050端口 |
spark://host:port | 连接到spark集群,主节点默认监听7070端口 |
- 可以看到我们的脚本是使用本地模式,3核模式进行提交的
- spark-submit的选项主要分为两类
- 第一类是调度信息,比如我们的资源大小
- 第二类是应用的运行时依赖
spark-submit脚本其他的可选参数
可选参数 | 含义 |
---|---|
–master | 连接的集群URL,详见上图表↑ |
–class | 运行Java程序的应用主类,scala也是如此 |
–name | 应用的名称,会显示在spark可视化网页中 |
–jars | 如果你需要依赖少量的外部jar,就写到这里 |
–files | 需要放到应用工作目录中的文件列表 |
–executor-memory | 执行器进程使用的内存量,字节单位 比如 512m或者 50g |
–driver-memory | 驱动器程序使用的内存量,单位大小同上↑ |
这里说一下需要注意的点
- 如果我们的spark运行与本地模式,那么spark驱动器程序和执行器都是在同一个Java进程中运行的,这算是特例,因为正常线上环境,执行器和驱动器肯定是在专用的进程中
- 相比于其他的集群管理器,驱动器节点只能运行在本地机器中
- 我们可以spark-submit --help查看所有可以选择的参数
总结
我们结合上一章spark核心架构一块把spark的整个运行流程进行总结
上一章地址: spark核心架构
- 把我们编写的spark应用编译打包
- 通过spark-submit 脚本提交我们的程序
- spark-submit脚本启动驱动器程序,调用main()
- 驱动器与集群管理器通信,申请资源启动执行器节点
- 集群管理器为驱动器启动执行器节点
- 驱动器把任务task发送到执行器,执行器创建executor负责任务的具体执行
- 任务执行完成保存结果
- 如果main()退出或者执行sparkContext.stop().那么驱动器会终止执行器,并且通过集群管理器释放资源
感兴趣的同学请点个关注哦,持续更新