:环境搭建-Spark on YARN
Posted 黑马程序员官方
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了:环境搭建-Spark on YARN相关的知识,希望对你有一定的参考价值。
Spark是大数据体系的明星产品,是一款高性能的分布式内存迭代计算框架,可以处理海量规模的数据。下面就带大家来学习今天的内容!
往期内容:
- Spark基础入门-第一章:Spark 框架概述
- Spark基础入门-第二章:Spark环境搭建-Local
- Spark基础入门-第三章:Spark环境搭建-StandAlone
- Spark基础入门-第四章:Spark环境搭建-StandAlone-HA
引言
按照前面环境部署中所学习的, 如果我们想要一个稳定的生产Spark环境, 那么最优的选择就是构建:HA StandAlone集群。
不过在企业中, 服务器的资源总是紧张的, 许多企业不管做什么业务,都基本上会有Hadoop集群. 也就是会有YARN集群。
对于企业来说,在已有YARN集群的前提下在单独准备Spark StandAlone集群,对资源的利用就不高. 所以, 在企业中,多 数场景下,会将Spark运行到YARN集群中。
YARN本身是一个资源调度框架, 负责对运行在内部的计算框架进行资源调度管理。
作为典型的计算框架, Spark本身也是直接运行在YARN中, 并接受YARN的调度的。
所以, 对于Spark On YARN, 无需部署Spark集群, 只要找一台服务器, 充当Spark的客户端, 即可提交任务到YARN集群 中运行。
一、SparkOnYarn本质
Spark On Yarn的本质?
Master角色由YARN的ResourceManager担任。
Worker角色由YARN的NodeManager担任。
Driver角色运行在YARN容器内 或 提交任务的客户端进程中,真正干活的Executor运行在YARN提供的容器内。
二、配置spark on yarn环境
此部分直接参考<<spark部署文档.doc>> 即可
三、部署模式DeployMode
Spark On YARN是有两种运行模式的,一种是Cluster模式一种是Client模式.
这两种模式的区别就是Driver运行的位置.
Cluster模式即:Driver运行在YARN容器内部, 和ApplicationMaster在同一个容器内
Client模式即:Driver运行在客户端进程中, 比如Driver运行在spark-submit程序的进程中
(1) Cluster模式
如图, 此为Cluster模式Driver运行在容器内部
(2) Client模式
如图, 此为Client模式Driver运行在客户端程序进程中(以spark-submit为例)
(3)两种模式的区别
(4)client 模式测试
假设运行圆周率PI程序,采用client模式,命令如下:
SPARK_HOME=/export/server/spark
$SPARK_HOME/bin/spark-submit \\
--master yarn \\
--deploy-mode client \\
--driver-memory 512m \\
--executor-memory 512m \\
--num-executors 1 \\
--total-executor-cores 2 \\
$SPARK_HOME/examples/src/main/python/pi.py \\
日志跟随客户端的标准输出流进行输出
(5) cluster 模式测试
假设运行圆周率PI程序,采用cluster模式,命令如下:
SPARK_HOME=/export/server/spark
$SPARK_HOME/bin/spark-submit \\
--master yarn \\
--deploy-mode cluster \\
--driver-memory 512m \\
--executor-memory 512m \\
--num-executors 1 \\
--total-executor-cores 2 \\
--conf "spark.pyspark.driver.python=/root/anaconda3/bin/python3" \\
--conf "spark.pyspark.python=/root/anaconda3/bin/python3" \\
$SPARK_HOME/examples/src/main/python/pi.py \\
四、Spark On Yarn两种模式总结
Client模式和Cluster模式最最本质的区别是: Driver程序运行在哪里。
- Client模式:学习测试时使用,生产不推荐(要用也可以,性能略低,稳定性略低)
1.Driver运行在Client上,和集群的通信成本高
2.Driver输出结果会在客户端显示
- Cluster模式:生产环境中使用该模式
1.Driver程序在YARN集群中,和集群的通信成本低
2.Driver输出结果不能在客户端显示
3.该模式下Driver运行ApplicattionMaster这个节点上,由Yarn管理,如果出现问题, yarn会重启
ApplicattionMaster(Driver)
五、扩展阅读:两种模式详细流程
在YARN Client模式下, Driver在任务提交的本地机器上运行,示意图如下:
具体流程步骤如下:
1)、 Driver在任务提交的本地机器上运行, Driver启动后会和ResourceManager通讯申请启动ApplicationMaster ;
2)、随后ResourceManager分配Container,在合适的NodeManager上启动ApplicationMaster,此时的 ApplicationMaster的功能相当于一个ExecutorLaucher,只负责向ResourceManager申请Executor内存; 3)、 ResourceManager接到ApplicationMaster的资源申请后会分配Container,然后ApplicationMaster在资源分 配指定的NodeManager上启动Executor进程;
4)、 Executor进程启动后会向Driver反向注册, Executor全部注册完成后Driver开始执行main函数; 5)、之后执行到Action算子时,触发一个Job,并根据宽依赖开始划分Stage,每个Stage生成对应的TaskSet,之后 将Task分发到各个Executor上执行。
在YARN Cluster模式下, Driver运行在NodeManager Contanier中,此时Driver与AppMaster合为一体,示意图如下:
具体流程步骤如下:
1)、任务提交后会和ResourceManager通讯申请启动ApplicationMaster;
2)、随后ResourceManager分配Container,在合适的NodeManager上启动ApplicationMaster,此时的 ApplicationMaster就是Driver;
3)、 Driver启动后向ResourceManager申请Executor内存, ResourceManager接到ApplicationMaster的资源申请 后会分配Container,然后在合适的NodeManager上启动Executor进程; 4)、 Executor进程启动后会向Driver反向注册; 5)、 Executor全部注册完成后Driver开始执行main函数,之后执行到Action算子时,触发一个job,并根据宽依赖开 始划分stage,每个stage生成对应的taskSet,之后将task分发到各个Executor上执行。
以上是关于:环境搭建-Spark on YARN的主要内容,如果未能解决你的问题,请参考以下文章
Spark单机伪分布式环境搭建完全分布式环境搭建Spark-on-yarn模式搭建
Spark基础学习笔记06:搭建Spark On YARN模式的集群