您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Modeler   Code  
会员   
 
   
 
 
     
   
 订阅
  捐助
Spark执行模式解析
 
来源:博客 发布于: 2017-5-2
   次浏览      
 

一、执行模式

提交脚本常见的语法:

./bin/spark-submit \

--class <main-class>

--master <master-url> \

--deploy-mode <deploy-mode> \

--conf <key>=<value> \

... # other options

<application-jar> \

[application-arguments]

脚本说明:

(1)—-class: 主类,即main函数所有的类

(2)—- master : master的URL,见下面的详细说明。

(3)—-deploy-mode:client和cluster2种模式

(4)—-conf:指定key=value形式的配置

下面对各种模式做一个说明:

1、local

本地跑程序,一般用来测试。可以指定线程数

# Run application locally on 8 cores

./bin/spark-submit \

--class org.apache.spark.examples.SparkPi \

--master local[8] \

/path/to/examples.jar \

100

2.Standalone client

该方式应用执行流程:

(1)用户启动客户端,之后客户端运行用户程序,启动Driver进程。在Driver中启动或实例化DAGScheduler等组件。 客户端的Driver向Master注册。

(2)Worker向Master注册,Master命令Worker启动Exeuctor。Worker通过创建ExecutorRunner线程,在ExecutorRunner线程内部启动ExecutorBackend进程。

(3)ExecutorBackend启动后,向客户端Driver进程内的SchedulerBackend注册,这样Driver进程就能找到计算资源。Driver的DAGScheduler解析应用中的RDD DAG并生成相应的Stage,每个Stage包含的TaskSet通过TaskScheduler分配给Executor。 在Executor内部启动线程池并行化执行Task。

示例脚本:

# Run on a Spark Standalone cluster in client deploy mode

./bin/spark-submit \

--class org.apache.spark.examples.SparkPi \

--master spark://207.184.161.138:7077 \

--executor-memory 20G \

--total-executor-cores 100 \

/path/to/examples.jar \

1000

3、standalone cluster

该方式应用执行流程:

(1)用户启动客户端,客户端提交应用程序给Master。

(2)Master调度应用,针对每个应用分发给指定的一个Worker启动Driver,即Scheduler-Backend。 Worker接收到Master命令后创建DriverRunner线程,在DriverRunner线程内创建SchedulerBackend进程。Driver充当整个作业的主控进程。Master会指定其他Worker启动Exeuctor,即ExecutorBackend进程,提供计算资源。流程和上面很相似,(3)Worker创建ExecutorRunner线程,ExecutorRunner会启动ExecutorBackend进程。

(4)ExecutorBackend启动后,向Driver的SchedulerBackend注册,这样Driver获取了计算资源就可以调度和将任务分发到计算节点执行。SchedulerBackend进程中包含DAGScheduler,它会根据RDD的DAG切分Stage,生成TaskSet,并调度和分发Task到Executor。对于每个Stage的TaskSet,都会被存放到TaskScheduler中。TaskScheduler将任务分发到Executor,执行多线程并行任务。

示例脚本:

# Run on a Spark Standalone cluster in cluster deploy mode with supervise

./bin/spark-submit \

--class org.apache.spark.examples.SparkPi \

--master spark://207.184.161.138:7077 \

--deploy-mode cluster

--supervise

--executor-memory 20G \

--total-executor-cores 100 \

/path/to/examples.jar \

1000

4、yarn-client

在yarn-client模式下,Driver运行在Client上,通过ApplicationMaster向RM获取资源。本地Driver负责与所有的executor container进行交互,并将最后的结果汇总。结束掉终端,相当于kill掉这个spark应用。一般来说,如果运行的结果仅仅返回到terminal上时需要配置这个。

客户端的Driver将应用提交给Yarn后,Yarn会先后启动ApplicationMaster和executor,另外ApplicationMaster和executor都 是装载在container里运行,container默认的内存是1G,ApplicationMaster分配的内存是driver- memory,executor分配的内存是executor-memory。同时,因为Driver在客户端,所以程序的运行结果可以在客户端显 示,Driver以进程名为SparkSubmit的形式存在。

Yarn-client模式下作业执行流程:

1. 客户端生成作业信息提交给ResourceManager(RM)

2. RM在本地NodeManager启动container并将Application Master(AM)分配给该NodeManager(NM)

3. NM接收到RM的分配,启动Application Master并初始化作业,此时这个NM就称为Driver

4. Application向RM申请资源,分配资源同时通知其他NodeManager启动相应的Executor

5. Executor向本地启动的Application Master注册汇报并完成相应的任务

示例脚本:

# Run on a YARN client

export HADOOP_CONF_DIR=XXX

./bin/spark-submit \

--class org.apache.spark.examples.SparkPi \

--master yarn-client \

--executor-memory 20G \

--num-executors 50 \

/path/to/examples.jar \

1000

5、Yarn-cluster

Spark Driver首先作为一个ApplicationMaster在YARN集群中启动,客户端提交给ResourceManager的每一个job都会在集群的worker节点上分配一个唯一的ApplicationMaster,由该ApplicationMaster管理全生命周期的应用。因为Driver程序在YARN中运行,所以事先不用启动Spark Master/Client,应用的运行结果不能在客户端显示(可以在history server中查看),所以最好将结果保存在HDFS而非stdout输出,客户端的终端显示的是作为YARN的job的简单运行状况

Yarn-cluster模式下作业执行流程:

1. 客户端生成作业信息提交给ResourceManager(RM)

2. RM在某一个NodeManager(由Yarn决定)启动container并将Application Master(AM)分配给该NodeManager(NM)

3. NM接收到RM的分配,启动Application Master并初始化作业,此时这个NM就称为Driver

4. Application向RM申请资源,分配资源同时通知其他NodeManager启动相应的Executor

5. Executor向NM上的Application Master注册汇报并完成相应的任务

示例脚本:

# Run on a YARN cluster

export HADOOP_CONF_DIR=XXX

./bin/spark-submit \

--class org.apache.spark.examples.SparkPi \

--master yarn-cluster \

--executor-memory 20G \

--num-executors 50 \

/path/to/examples.jar \

1000

二、执行注意事项

1、关于jar包

hadoop和spark的配置会被自动加载到SparkContext,因此,提交application时只需要提交用户的代码以及其它依赖包,这有2种做法:

(1)将用户代码打包成jar,然后在提交application时使用—-jar来添加依赖jar包(推荐使用这种方法)

(2)将用户代码与依赖一起打包成一个大包 assembly jar (打一个jar包,有可能整个jar打出来上百M,打包和发布过程慢)

2、调试模式

Spark Standlong模式:

只支持FIFO

Spark On Mesos模式:有两种调度模式

1) 粗粒度模式(Coarse-grained Mode)

2) 细粒度模式(Fine-grained Mode)

Spark On YARN模式:

目前仅支持粗粒度模式(Coarse-grained Mode)

3、读取配置优先级

在代码中的SparkConf中的配置参数具有最高优先级,其次是传送spark-submit脚本的参数,最后是配置文件(conf/spark-defaults.conf)中的参数。

如果不清楚配置参数从何而来,可以使用spark-submit的—verbose选项来打印出细粒度的调度信息。

 

   
次浏览       
相关文章

基于EA的数据库建模
数据流建模(EA指南)
“数据湖”:概念、特征、架构与案例
在线商城数据库系统设计 思路+效果
 
相关文档

Greenplum数据库基础培训
MySQL5.1性能优化方案
某电商数据中台架构实践
MySQL高扩展架构设计
相关课程

数据治理、数据架构及数据标准
MongoDB实战课程
并发、大容量、高性能数据库设计与优化
PostgreSQL数据库实战培训
最新活动计划
LLM大模型应用与项目构建 12-26[特惠]
QT应用开发 11-21[线上]
C++高级编程 11-27[北京]
业务建模&领域驱动设计 11-15[北京]
用户研究与用户建模 11-21[北京]
SysML和EA进行系统设计建模 11-28[北京]

APP推广之巧用工具进行数据分析
Hadoop Hive基础sql语法
应用多级缓存模式支撑海量读服务
HBase 超详细介绍
HBase技术详细介绍
Spark动态资源分配
更多...   

Hadoop与Spark大数据架构
Hadoop原理与高级实践
Hadoop原理、应用与优化
大数据体系框架与应用
大数据的技术与实践
Spark大数据处理技术

GE 区块链技术与实现培训
航天科工某子公司 Nodejs高级应用开发
中盛益华 卓越管理者必须具备的五项能力
某信息技术公司 Python培训
某博彩IT系统厂商 易用性测试与评估
中国邮储银行 测试成熟度模型集成(TMMI)
中物院 产品经理与产品管理
更多...