史上最简单的spark教程第十五章-spark核心架构之spark-submit详解

版权声明:本文为博主原创文章,未经博主允许不得转载。 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程序的提交过程

  • 不管我们使用的是哪种集群管理器(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核心架构

  1. 把我们编写的spark应用编译打包
  2. 通过spark-submit 脚本提交我们的程序
  3. spark-submit脚本启动驱动器程序,调用main()
  4. 驱动器与集群管理器通信,申请资源启动执行器节点
  5. 集群管理器为驱动器启动执行器节点
  6. 驱动器把任务task发送到执行器,执行器创建executor负责任务的具体执行
  7. 任务执行完成保存结果
  8. 如果main()退出或者执行sparkContext.stop().那么驱动器会终止执行器,并且通过集群管理器释放资源
    在这里插入图片描述

感兴趣的同学请点个关注哦,持续更新

猜你喜欢

转载自blog.csdn.net/youbitch1/article/details/89140277