Spark on YARN:Spark集群模式之Yarn模式的原理、搭建与实践

Spark 的介绍与搭建:从理论到实践-CSDN博客

Spark 的Standalone集群环境安装与测试-CSDN博客

PySpark 本地开发环境搭建与实践-CSDN博客

Spark 程序开发与提交:本地与集群模式全解析-CSDN博客

目录

[一、Spark on YARN 的优势](#一、Spark on YARN 的优势)

(一)统一化资源管理

[(二)YARN 调度机制的优势](#(二)YARN 调度机制的优势)

[二、Spark YARN 集群搭建步骤](#二、Spark YARN 集群搭建步骤)

[(一)关闭旧的 StandAlone 集群](#(一)关闭旧的 StandAlone 集群)

[(二)配置第一台服务器(以 bigdata01 为例)](#(二)配置第一台服务器(以 bigdata01 为例))

[解压与移动 Spark 安装包](#解压与移动 Spark 安装包)

[修改 spark - env.sh 配置文件](#修改 spark - env.sh 配置文件)

[修改 spark - defaults.conf 文件](#修改 spark - defaults.conf 文件)

[修改 log4j.properties 文件](#修改 log4j.properties 文件)

[上传 Spark JAR 包到 HDFS](#上传 Spark JAR 包到 HDFS)

[修改 yarn - site.xml 文件](#修改 yarn - site.xml 文件)

(三)分发配置到其他服务器

(四)启动相关服务

[三、Spark on YARN 不同 deploy mode 的区别](#三、Spark on YARN 不同 deploy mode 的区别)

[(一)AppMaster 和 Driver 的功能概述](#(一)AppMaster 和 Driver 的功能概述)

[(二)client 模式](#(二)client 模式)

四、测试案例

[(一)计算 PI 值测试](#(一)计算 PI 值测试)

[(二)wordcount 案例测试](#(二)wordcount 案例测试)

五、常见问题及解决方法

六、总结


在大数据处理领域,Spark 是一款非常流行的分布式计算框架。而在 Spark 的运行模式中,YARN 模式具有独特的优势。本文将深入探讨为什么要将 Spark 程序运行在 YARN 上而不是 Spark 自带的 Standalone 集群上,详细介绍 Spark 的 YARN 集群搭建过程,以及在 YARN 模式下不同 deploy mode 的区别,并结合实际测试案例,帮助读者全面理解 Spark on YARN 这一重要的大数据技术应用。

一、Spark on YARN 的优势

(一)统一化资源管理

  1. Standalone 集群的局限性
    Standalone 是 Spark 专用的资源管理集群,其设计初衷是为了专门运行 Spark 程序。这意味着如果企业或组织中存在多种分布式计算需求,使用 Standalone 集群就需要额外为其他类型的分布式程序(如 MR、Tez、Flink 等)搭建不同的资源管理平台。从硬件资源利用和管理成本的角度来看,这种方式效率较低。
  2. YARN 的通用性
    YARN 是一个功能强大的分布式资源管理平台,它具有高度的通用性。可以在同一个 YARN 集群上运行各种不同类型的分布式程序。在实际工作场景中,硬件集群通常只有一套,选择 YARN 作为统一的资源管理平台,可以更好地整合资源,实现多种分布式计算任务的协同运行,从整个技术架构层面来说,YARN 是更为合适的选择。

(二)YARN 调度机制的优势

  1. 动态资源分配
    YARN 支持动态资源分配,这对于运行 Spark 程序非常有帮助。在 Spark 作业运行过程中,计算资源的需求可能会随着数据处理阶段的不同而发生变化。例如,在数据读取和预处理阶段可能需要较少的资源,而在复杂的计算和聚合阶段可能需要更多的资源。YARN 的动态资源分配机制可以根据 Spark 作业的实际需求,动态地为其分配或回收资源,提高资源的利用率。
  2. 多种调度机制
    YARN 提供了多种调度机制,如容量调度和公平调度。容量调度可以为不同的用户或业务部门分配固定的资源容量,保证每个用户或部门都能获得稳定的计算资源,适用于多用户共享集群的场景。公平调度则确保每个作业都能公平地获取资源,避免某些作业长时间占用大量资源而导致其他作业饥饿的情况,提高了集群资源分配的公平性和整体作业执行效率。

二、Spark YARN 集群搭建步骤

(一)关闭旧的 StandAlone 集群

在开始搭建 Spark 的 YARN 集群之前,需要先关闭之前的 StandAlone 老集群。通过以下命令在指定目录下操作:

bash 复制代码
cd /opt/installs/spark
sbin/stop - master.sh
sbin/stop - workers.sh
sbin/stop - history - server.sh

这一步骤确保在搭建新的 YARN 集群时,不会受到旧集群的干扰。

(二)配置第一台服务器(以 bigdata01 为例)

解压与移动 Spark 安装包
bash 复制代码
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 配置文件
bash 复制代码
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 配置文件目录:

bash 复制代码
export JAVA_HOME=/opt/installs/jdk
export HADOOP_CONF_DIR=/opt/installs/hadoop/etc/hadoop
export YARN_CONF_DIR=/opt/installs/hadoop/etc/hadoop

同时,还需要配置历史日志服务器相关参数:

bash 复制代码
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 文件
bash 复制代码
cd /opt/installs/spark/conf
mv spark - defaults.conf.template spark - defaults.conf
vim spark - defaults.conf

添加以下内容:

bash 复制代码
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,减少打印的日志数量,提高系统性能。

bash 复制代码
# 19行:修改日志级别为WARN
log4j.rootCategory=WARN, console
上传 Spark JAR 包到 HDFS

因为 YARN 中运行 Spark 需要用到 Spark 的一些类和方法,如果不上传到 HDFS,每次运行 YARN 都要重新上传一次,速度较慢。通过以下命令手动上传:

bash 复制代码
hdfs dfs - mkdir - p /spark/jars/
hdfs dfs - put /opt/installs/spark/jars/* /spark/jars/
修改 yarn - site.xml 文件
bash 复制代码
cd /opt/installs/hadoop/etc/hadoop

检查并配置以下内容:

bash 复制代码
<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文件。

大数据集群中实用的三个脚本文件解析与应用-CSDN博客

bash 复制代码
xsync.sh yarn-site.xml

(三)分发配置到其他服务器

  1. 分发 Spark - yarn 目录
    使用xsync.sh脚本将第一台机器的spark - yarn目录分发到第二台和第三台服务器,保证集群中各节点的 Spark 安装和配置一致。

    bash 复制代码
    xsync.sh /opt/installs/spark-yarn
  2. 分发 超链接:

    同时,也需要将/opt/installs/spark这个超链接 分发到其他服务器,确保整个集群的环境统一。

    bash 复制代码
    xsync.sh /opt/installs/spark

(四)启动相关服务

  1. 启动 YARN
    使用start - yarn.sh命令启动 YARN 集群,这是运行 Spark on YARN 的基础。

    bash 复制代码
    start-yarn.sh
  2. 启动 MR 的 JobHistoryServer 和 Spark 的 HistoryServer
    分别使用以下命令启动相关的历史服务器:

    bash 复制代码
    mapred -- daemon start historyserver
    
    /opt/installs/spark/sbin/start - history - server.sh

这些历史服务器对于查看作业执行历史和日志非常重要。

三、Spark on YARN 不同 deploy mode 的区别

(一)AppMaster 和 Driver 的功能概述

  1. AppMaster 功能
    AppMaster 在 YARN 中承担着重要的功能,包括申请资源、调度、监控 Task 和反馈结果等。它一定运行在 NodeManager 上,是 YARN 中负责管理 Spark 作业执行的关键组件。

  2. Driver 功能
    Driver 同样具有申请资源、解析 Task、调度 Task、监控 Task 和反馈结果等功能。不过,Driver 的运行位置由 deploy mode 决定。

  3. deploy mode 有两种,一个是client ,一个是cluster

    假如是client : 客户端提交任务,谁提交Driver程序就在谁的电脑上运行,Driver就在客户端中运行了。客户端是不能关闭的。

(二)client 模式

  1. 运行位置
    在 client 模式下,客户端提交任务时,Driver 程序就在提交任务的客户端电脑上运行。这意味着客户端在任务执行期间不能关闭,因为 Driver 在其中运行。
  2. 与 AppMaster 的关系
    在这种模式下,Driver 和 AppMaster 是共存关系。它们同时存在,共同协调 Spark 作业在 YARN 集群中的执行。

四、测试案例

(一)计算 PI 值测试

通过以下命令测试官方给出的 PI 值计算案例:

bash 复制代码
/opt/installs/spark/bin/spark - submit -- master yarn /opt/installs/spark/examples/src/main/python/pi.py 10

如果遇到资源有限的情况,可以稍作等待,观察作业执行情况。

(二)wordcount 案例测试

使用以下命令测试自己编写的 wordcount 案例:

bash 复制代码
/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。可以通过以下命令创建符号链接解决:

bash 复制代码
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 的实践中提供有益的参考。

相关推荐
莫叫石榴姐27 分钟前
数据科学与SQL:组距分组分析 | 区间分布问题
大数据·人工智能·sql·深度学习·算法·机器学习·数据挖掘
魔珐科技2 小时前
以3D数字人AI产品赋能教育培训人才发展,魔珐科技亮相AI+教育创新与人才发展大会
大数据·人工智能
上优2 小时前
uniapp 选择 省市区 省市 以及 回显
大数据·elasticsearch·uni-app
samLi06203 小时前
【更新】中国省级产业集聚测算数据及协调集聚指数数据(2000-2022年)
大数据
Mephisto.java3 小时前
【大数据学习 | Spark-Core】Spark提交及运行流程
大数据·学习·spark
EasyCVR4 小时前
私有化部署视频平台EasyCVR宇视设备视频平台如何构建视频联网平台及升级视频转码业务?
大数据·网络·音视频·h.265
hummhumm4 小时前
第 22 章 - Go语言 测试与基准测试
java·大数据·开发语言·前端·python·golang·log4j
科技象限5 小时前
电脑禁用U盘的四种简单方法(电脑怎么阻止u盘使用)
大数据·网络·电脑
天冬忘忧6 小时前
Kafka 生产者全面解析:从基础原理到高级实践
大数据·分布式·kafka
青云交6 小时前
大数据新视界 -- Hive 数据仓库:构建高效数据存储的基石(下)(2/ 30)
大数据·数据仓库·hive·数据安全·数据分区·数据桶·大数据存储