目录
一、引言
二、SparkOnYarn 本质
2.1 Spark On Yarn 的本质?
2.2 Spark On Yarn 需要啥?
三、配置 spark on yarn 环境
3.1 spark-env.sh
3.2 连接到 YARN 中
3.2.1 bin/pyspark
3.2.2 bin/spark-shell
3.2.3 bin/spark-submit (PI)
四、部署模式 DeployMode
4.1 Cluster 模式
4.2 Client 模式
4.3 两种模式的区别
4.4 测试
4.4.1 client 模式测试
4.4.2 cluster 模式测试
4.5 两种模式总结
五、两种模式详细流程
5.1 Client 模式
5.2 Cluster 模式
按照前面环境部署中所了解到的,如果我们想要一个稳定的生产 Spark 环境,那么最优的选择就是构建 HA StandAlone 集群。
不过在企业中,服务器的资源总是紧张的,许多企业不管做什么业务,都基本上会有 Hadoop 集群,也就是会有 YARN 集群。
对于企业来说,在已有 YARN 集群的前提下在单独准备 Spark StandAlone 集群,对资源的利用就不高,所以在企业中,多数场景下,会将 Spark 运行到 YARN 集群中。
YARN 本身是一个资源调度框架,负责对运行在内部的计算框架进行资源调度管理.。作为典型的计算框架,Spark 本身也是直接运行在 YARN 中,并接受 YARN 的调度的。所以,对于 Spark On YARN 无需部署 Spark 集群,只要找一台服务器,充当 Spark 的客户端,即可提交任务到 YARN 集群中运行。
具体安装 spark 步骤:Spark-3.2.4 高可用集群安装部署详细图文教程_Stars.Sky的博客-CSDN博客
确保:HADOOP_CONF_DIR、YARN_CONF_DIR 在 spark-env.sh 以及环境变量配置文件中即可(其他的配置文件都不需要修改,切 spark 和 YARN 在同一机器上):
(base) [root@hadoop01 /bigdata/spark-3.2.4]# vim conf/spark-env.sh
## HADOOP软件配置文件目录,读取HDFS上文件和运行YARN集群
HADOOP_CONF_DIR=/bigdata/hadoop/server/hadoop-3.2.4/etc/hadoop/
YARN_CONF_DIR=/bigdata/hadoop/server/hadoop-3.2.4/etc/hadoop/
bin/pyspark --master yarn --deploy-mode client|cluster
# --deploy-mode 选项是指定部署模式,默认是客户端模式
# client 就是客户端模式
# cluster 就是集群模式
# --deploy-mode 仅可以用在 YARN 模式下
注意:交互式环境 pyspark 和 spark-shell 无法运行 cluster 模式。
bin/spark-shell --master yarn --deploy-mode client|cluster
注意:交互式环境 pyspark 和 spark-shell 无法运行 cluster 模式。
bin/spark-submit --master yarn --deploy-mode client|cluster /xxx/xxx/xxx.py 参数
Spark On YARN 是有两种运行模式的,一种是 Cluster 模式,一种是 Client 模式。这两种模式的区别就是 Driver 运行的位置:
如图,此为 Cluster 模式 Driver运行在容器内部:
如图,此为Client 模式 Driver 运行在客户端程序进程中(以 spark-submit 为例) :
假设运行圆周率 PI 程序,采用 client 模式,命令如下:
(base) [root@hadoop01 /bigdata/spark-3.2.4]# bin/spark-submit --master yarn --deploy-mode client --driver-memory 512m --executor-memory 512m --num-executors 2 --total-executor-cores 2 /bigdata/spark-3.2.4/examples/src/main/python/pi.py 10
bin/spark-submit
: 这是用于提交 Spark 任务的脚本。
--master yarn
: 指定 Spark 集群管理器为 YARN。
--deploy-mode client
: 这意味着 Spark 任务的 driver 程序将在客户端机器(即你提交命令的机器)上运行。
--driver-memory 512m
: 分配给 driver 的内存为 512 MB。
--executor-memory 512m
: 每个 Spark executor 使用 512 MB 内存。
--num-executors 2
: 指定 Spark 应使用 2 个 executor 进程。
--total-executor-cores 2
: 指定所有 executors 合计可使用的 CPU 核心数为 2。
/bigdata/spark-3.2.4/examples/src/main/python/pi.py
: 这是你要运行的 Python 程序的路径。
10
: 这是传递给 pi.py
程序的一个参数。具体来说,这通常用于指定计算π值时的迭代次数或精度。
日志跟随客户端的标准输出流进行输出:
假设运行圆周率 PI 程序,采用 cluster 模式,命令如下:
(base) [root@hadoop01 /bigdata/spark-3.2.4]# bin/spark-submit --master yarn --deploy-mode cluster --driver-memory 512m --executor-memory 512m --num-executors 2 --total-executor-cores 2 /bigdata/spark-3.2.4/examples/src/main/python/pi.py 10
客户端是无日志信息和结果输出的:
Client 模式和 Cluster 模式最最本质的区别是:Driver 程序运行在哪里。
Client 模式:学习测试时使用,生产不推荐(要用也可以,性能略低,稳定性略低)
Cluster模式:生产环境中使用该模式
在 YARN Client 模式下,Driver 在任务提交的本地机器上运行,示意图如下:
在 YARN Cluster 模式下,Driver 运行在 NodeManager Contanier 中,此时 Driver 与 AppMaster 合为一体,示意图如下:
具体流程步骤如下:
上一篇文章:Spark-3.2.4 高可用集群安装部署详细图文教程_Stars.Sky的博客-CSDN博客