持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第14天,点击查看活动详情
我们知道,Spark运行模式有四种:
- Local 模式: 在本地部署单个Spark服务
- Standalone 模式:Spark自带的任务调度模式。(国内常用)
- YARN 模式:Spark使用Hadoop的YARN组件进行资源与任务调度。(国内最常用)
- Mesos 模式:Spark使用Mesos平台进行资源与任务的调度。(国内很少用)
今天这一章节,我们主要说一下 Spark使用Yarn模式,那么Spark使用Yarn呢,也分为两种:
- yarn-client: Driver程序运行在客户端,适用于交互、调试,希望立即看到app的输出。
- yarn-cluster: Driver程序运行在由ResourceManager启动的APPMaster中,适用于生产环境。
这两种运行模式的区别在于:Driver程序的运行节点。
下面我们我们以求Pi的值为例,来具体介绍下这两种模式的区别。
1. 客户端模式(默认)
[yong@hadoop102 spark-yarn]$ bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn \
--deploy-mode client \
./examples/jars/spark-examples_2.12-3.0.0.jar \
10
代码中的 --deploy-mode client,就表示Driver程序运行在本地客户端。其结果Pi的值是直接打印在本地的。
运行流程图如下所示
这里需要注意的是,图中 Driver在客户端启动,然后初始化sc并执行任务切分操作,然后向yarn请求申请资源,注意此时,RM在一个节点中启动的AM是不执行任务切分操作的,因为任务切分已被Driver做完(yarn中叫AM,spark中叫ExecutorLauncher)。
2. 集群模式
[yong@hadoop102 spark-yarn]$ bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn \
--deploy-mode cluster \
./examples/jars/spark-examples_2.12-3.0.0.jar \
10
代码中的 --deploy-mode cluster,就表示Driver程序运行在集群中。其结果Pi的值可以在Hadoop的历史服务器中查看。
运行流程图如下所示
我们可以看到这里的Driver是在AM中启动的,SparkSubmit只是做提交任务的操作。Driver做完切分任务后向RM申请资源找节点处理数据,所以在其他的NodeManager中启动 ExecutorBackend ,然后在EB内部创建 Executor对象,最后向Driver反向注册,分配任务。
总结
这两种运行模式还是很重要的,尤其是基于yarn的集群模式,读者可以多画几张图,对流程的印象会更加深刻。