Spark 的Standalone集群环境安装与测试-CSDN博客
Spark 程序开发与提交:本地与集群模式全解析-CSDN博客
目录
三、Spark on YARN 不同 deploy mode 的区别
在大数据处理领域,Spark 是一款非常流行的分布式计算框架。而在 Spark 的运行模式中,YARN 模式具有独特的优势。本文将深入探讨为什么要将 Spark 程序运行在 YARN 上而不是 Spark 自带的 Standalone 集群上,详细介绍 Spark 的 YARN 集群搭建过程,以及在 YARN 模式下不同 deploy mode 的区别,并结合实际测试案例,帮助读者全面理解 Spark on YARN 这一重要的大数据技术应用。
一、Spark on YARN 的优势
(一)统一化资源管理
- Standalone 集群的局限性
Standalone 是 Spark 专用的资源管理集群,其设计初衷是为了专门运行 Spark 程序。这意味着如果企业或组织中存在多种分布式计算需求,使用 Standalone 集群就需要额外为其他类型的分布式程序(如 MR、Tez、Flink 等)搭建不同的资源管理平台。从硬件资源利用和管理成本的角度来看,这种方式效率较低。 - YARN 的通用性
YARN 是一个功能强大的分布式资源管理平台,它具有高度的通用性。可以在同一个 YARN 集群上运行各种不同类型的分布式程序。在实际工作场景中,硬件集群通常只有一套,选择 YARN 作为统一的资源管理平台,可以更好地整合资源,实现多种分布式计算任务的协同运行,从整个技术架构层面来说,YARN 是更为合适的选择。
(二)YARN 调度机制的优势
- 动态资源分配
YARN 支持动态资源分配,这对于运行 Spark 程序非常有帮助。在 Spark 作业运行过程中,计算资源的需求可能会随着数据处理阶段的不同而发生变化。例如,在数据读取和预处理阶段可能需要较少的资源,而在复杂的计算和聚合阶段可能需要更多的资源。YARN 的动态资源分配机制可以根据 Spark 作业的实际需求,动态地为其分配或回收资源,提高资源的利用率。 - 多种调度机制
YARN 提供了多种调度机制,如容量调度和公平调度。容量调度可以为不同的用户或业务部门分配固定的资源容量,保证每个用户或部门都能获得稳定的计算资源,适用于多用户共享集群的场景。公平调度则确保每个作业都能公平地获取资源,避免某些作业长时间占用大量资源而导致其他作业饥饿的情况,提高了集群资源分配的公平性和整体作业执行效率。
二、Spark YARN 集群搭建步骤
(一)关闭旧的 StandAlone 集群
在开始搭建 Spark 的 YARN 集群之前,需要先关闭之前的 StandAlone 老集群。通过以下命令在指定目录下操作:
cd /opt/installs/spark
sbin/stop - master.sh
sbin/stop - workers.sh
sbin/stop - history - server.sh
这一步骤确保在搭建新的 YARN 集群时,不会受到旧集群的干扰。
(二)配置第一台服务器(以 bigdata01 为例)
解压与移动 Spark 安装包
cd /opt/modules/
tar - zxf spark - 3.1.2 - bin - hadoop3.2.tgz - C /opt/installs
cd /opt/installs
mv spark - 3.1.2 - bin - hadoop3.2 spark - yarn
rm - rf /opt/installs/spark
ln - s /opt/installs/spark - yarn /opt/installs/spark
这一系列操作完成了 Spark 安装包的解压、重命名和创建符号链接,方便后续配置和使用。
修改 spark - env.sh 配置文件
cd /opt/installs/spark/conf
mv spark - env.sh.template spark - env.sh
vim /opt/installs/spark/conf/spark - env.sh
在这个配置文件中,大约 22 行左右需要设置 JAVA 安装目录、HADOOP 和 YARN 配置文件目录:
export JAVA_HOME=/opt/installs/jdk
export HADOOP_CONF_DIR=/opt/installs/hadoop/etc/hadoop
export YARN_CONF_DIR=/opt/installs/hadoop/etc/hadoop
同时,还需要配置历史日志服务器相关参数:
export SPARK_DAEMON_MEMORY=1g
export SPARK_HISTORY_OPTS="-Dspark.history.fs.logDirectory=hdfs://bigdata01:9820/spark/eventLogs/ -Dspark.history.fs.cleaner.enabled=true"
修改 spark - defaults.conf 文件
cd /opt/installs/spark/conf
mv spark - defaults.conf.template spark - defaults.conf
vim spark - defaults.conf
添加以下内容:
spark.eventLog.enabled true
spark.eventLog.dir hdfs://bigdata01:9820/spark/eventLogs
spark.eventLog.compress true
spark.yarn.historyServer.address bigdata01:18080
spark.yarn.jars hdfs://bigdata01:9820/spark/jars/*
这些配置用于启用事件日志记录、指定日志存储位置和压缩方式,以及设置 YARN 历史服务器地址和 Spark 相关的 JAR 包路径。
修改 log4j.properties 文件
将log4j.properties.template
重命名为log4j.properties
,并修改日志级别为 WARN,减少打印的日志数量,提高系统性能。
# 19行:修改日志级别为WARN
log4j.rootCategory=WARN, console
上传 Spark JAR 包到 HDFS
因为 YARN 中运行 Spark 需要用到 Spark 的一些类和方法,如果不上传到 HDFS,每次运行 YARN 都要重新上传一次,速度较慢。通过以下命令手动上传:
hdfs dfs - mkdir - p /spark/jars/
hdfs dfs - put /opt/installs/spark/jars/* /spark/jars/
修改 yarn - site.xml 文件
cd /opt/installs/hadoop/etc/hadoop
检查并配置以下内容:
<property>
<name>yarn.log - aggregation - enable</name>
<value>true</value>
</property>
<!-- 历史日志在HDFS保存的时间,单位是秒 -->
<!-- 默认的是-1,表示永久保存 -->
<property>
<name>yarn.log - aggregation.retain - seconds</name>
<value>604800</value>
</property>
<property>
<name>yarn.log.server.url</name>
<value>http://bigdata01:19888/jobhistory/logs</value>
</property>
<!-- 关闭yarn内存检查 -->
<property>
<name>yarn.nodemanager.pmem - check - enabled</name>
<value>false</value>
</property>
<property>
<name>yarn.nodemanager.vmem - check - enabled</name>
<value>false</value>
</property>
配置完成后,使用xsync.sh
脚本分发yarn - site.xml
文件。
xsync.sh yarn-site.xml
(三)分发配置到其他服务器
- 分发 Spark - yarn 目录
使用xsync.sh
脚本将第一台机器的spark - yarn
目录分发到第二台和第三台服务器,保证集群中各节点的 Spark 安装和配置一致。xsync.sh /opt/installs/spark-yarn
- 分发超链接:
同时,也需要将/opt/installs/spark
这个超链接分发到其他服务器,确保整个集群的环境统一。xsync.sh /opt/installs/spark
(四)启动相关服务
- 启动 YARN
使用start - yarn.sh
命令启动 YARN 集群,这是运行 Spark on YARN 的基础。start-yarn.sh
- 启动 MR 的 JobHistoryServer 和 Spark 的 HistoryServer
分别使用以下命令启动相关的历史服务器:mapred -- daemon start historyserver /opt/installs/spark/sbin/start - history - server.sh
这些历史服务器对于查看作业执行历史和日志非常重要。
三、Spark on YARN 不同 deploy mode 的区别
(一)AppMaster 和 Driver 的功能概述
- AppMaster 功能
AppMaster 在 YARN 中承担着重要的功能,包括申请资源、调度、监控 Task 和反馈结果等。它一定运行在 NodeManager 上,是 YARN 中负责管理 Spark 作业执行的关键组件。 - Driver 功能
Driver 同样具有申请资源、解析 Task、调度 Task、监控 Task 和反馈结果等功能。不过,Driver 的运行位置由 deploy mode 决定。 -
deploy mode 有两种,一个是client ,一个是cluster
假如是client : 客户端提交任务,谁提交Driver程序就在谁的电脑上运行,Driver就在客户端中运行了。客户端是不能关闭的。
(二)client 模式
- 运行位置
在 client 模式下,客户端提交任务时,Driver 程序就在提交任务的客户端电脑上运行。这意味着客户端在任务执行期间不能关闭,因为 Driver 在其中运行。 - 与 AppMaster 的关系
在这种模式下,Driver 和 AppMaster 是共存关系。它们同时存在,共同协调 Spark 作业在 YARN 集群中的执行。
四、测试案例
(一)计算 PI 值测试
通过以下命令测试官方给出的 PI 值计算案例:
/opt/installs/spark/bin/spark - submit -- master yarn /opt/installs/spark/examples/src/main/python/pi.py 10
如果遇到资源有限的情况,可以稍作等待,观察作业执行情况。
(二)wordcount 案例测试
使用以下命令测试自己编写的 wordcount 案例:
/opt/installs/spark/bin/spark - submit \
-- master yarn \
-- deploy - mode client \
-- driver - memory 512M \
-- driver - cores 1 \
-- supervise \
-- executor - memory 1G \
-- executor - cores 1 \
-- total - executor - cores 2 \
/home/pyspark_core_word_args.py \
/spark/wordcount/input \
/spark/wordcount/output001
同时,也可以测试 cluster 模式下是否支持,经过测试,在 YARN 集群下,cluster 模式是支持的,而在 standalone 模式下不支持 cluster 模式。
五、常见问题及解决方法
在运行任务或者启动 YARN 时,如果遇到/bin/java
没有这个文件的报错,本质原因是缺少 java。可以通过以下命令创建符号链接解决:
ln - s /opt/installs/jdk/bin/java /bin/java
六、总结
本文详细介绍了 Spark on YARN 的相关内容,包括其相对于 Standalone 集群的优势、YARN 集群搭建步骤、不同 deploy mode 的区别以及测试案例和常见问题解决方法。通过将 Spark 程序运行在 YARN 上,可以实现统一的资源管理和利用 YARN 更完善的调度机制,提高大数据处理的效率和灵活性。在实际应用中,读者可以根据自己的业务需求和硬件环境,合理选择 Spark 的运行模式,并通过本文介绍的方法进行搭建和配置,以充分发挥 Spark 在大数据处理中的强大功能。同时,对于在使用过程中可能遇到的问题,也可以参考本文提供的解决方法进行处理,确保 Spark on YARN 的稳定运行。希望本文能为广大大数据开发者和运维人员在 Spark on YARN 的实践中提供有益的参考。