:环境搭建-Spark on YARN

Posted 黑马程序员官方

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了:环境搭建-Spark on YARN相关的知识,希望对你有一定的参考价值。

Spark是大数据体系的明星产品,是一款高性能的分布式内存迭代计算框架,可以处理海量规模的数据。下面就带大家来学习今天的内容!

  往期内容:


引言

按照前面环境部署中所学习的, 如果我们想要一个稳定的生产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模式搭建

CDH5.5.1 安装Spark ON Yarn环境

Spark on YARN的部署

Spark基础学习笔记06:搭建Spark On YARN模式的集群

使用 Docker 搭建 Hadoop 集群 和 Spark On Yarn

Spark2x on yarn日志配置详解