首页 > 其他分享 >Spark on YARN:Spark集群模式之Yarn模式的原理、搭建与实践

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

时间:2024-11-06 19:49:43浏览次数:3  
标签:opt installs Yarn YARN 集群 模式 spark Spark

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

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

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

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

目录

一、Spark on YARN 的优势

(一)统一化资源管理

(二)YARN 调度机制的优势

二、Spark YARN 集群搭建步骤

(一)关闭旧的 StandAlone 集群

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

解压与移动 Spark 安装包

修改 spark - env.sh 配置文件

修改 spark - defaults.conf 文件

修改 log4j.properties 文件

上传 Spark JAR 包到 HDFS

修改 yarn - site.xml 文件

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

(四)启动相关服务

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

(一)AppMaster 和 Driver 的功能概述

(二)client 模式

四、测试案例

(一)计算 PI 值测试

(二)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 老集群。通过以下命令在指定目录下操作:

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文件。

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

xsync.sh yarn-site.xml

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

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

  2. 分发超链接:

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

(四)启动相关服务

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

  2. 启动 MR 的 JobHistoryServer 和 Spark 的 HistoryServer
    分别使用以下命令启动相关的历史服务器:
    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 值计算案例:

/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 的实践中提供有益的参考。

标签:opt,installs,Yarn,YARN,集群,模式,spark,Spark
From: https://blog.csdn.net/weixin_64726356/article/details/143569456

相关文章

  • Spark中的shuffle
    Shuffle的本质基于磁盘划分来解决分布式大数据量的全局分组、全局排序、重新分区【增大】的问题。1、Spark的Shuffle设计SparkShuffle过程也叫作宽依赖过程,Spark不完全依赖于内存计算,面临以上问题时,也需要Shuffle过程。2、Spark中哪些算子会产生Shuffle?只要这个算子包含以......
  • 如何在DataGrip上使用hive的数据源编写Spark代码
    Spark是当今大数据领域最活跃、最热门、最高效的大数据通用计算平台之一。Spark作为一个计算平台并不是作为一个数据库不像hive以及mysql一样可以直接远程连接DataGrip使用,本篇就展示如何使用DataGrip使用hive作为数据源编写Spark代码查询hive数据库首先确保你的hive以及Spa......
  • 10.桥接模式设计思想
    10.桥接模式设计思想目录介绍01.桥接模式基础1.1桥接模式由来1.2桥接模式定义1.3桥接模式场景1.4桥接模式思考1.5解决的问题02.桥接模式实现2.1罗列一个场景2.2桥接结构2.3桥接基本实现2.4有哪些注意点03.桥接实例演示3.1需求分析3.2代码案例实......
  • 0基础学Python——类的单例模式、反射函数、记录类的创建个数、迭代器、生成器及生成
    0基础学Python——类的单例模式、反射函数、记录类的创建个数、迭代器、生成器及生成器练习类的单例模式定义代码演示反射函数代码演示记录类的创建个数迭代器定义特点生成器定义特点写法生成器练习生成器生成1-无穷的数字生成器生成无穷个素数类的单例模式定义......
  • 《SparkSQL--通过ThriftServer连接DataGrip》
    ThriftServer功能:类似于HiveServer2,负责解析客户端提交的SQL语句,转换成Spark的任务进行执行本质:Spark中的一个特殊的程序,利用程序的资源运行所有SQL,该程序除非手动关闭,否则一直运行 启动服务,该服务不会停止,一直在后台启动,假如启动不了,记得查看日志。/opt/installs/spark/sb......
  • SparkSql读取数据的方式
    一、读取普通文件 方式一:给定读取数据源的类型和地址spark.read.format("json").load(path)spark.read.format("csv").load(path)spark.read.format("parquet").load(path)方式二:直接调用对应数据源类型的方法spark.read.json(path)spark.read.csv(path)spark.read.pa......
  • 《大话设计模式》读后感
    大多数初学者都会有这样的问题,就是碰到问题就直觉地用计算机能够理解的逻辑来描述和表达待解决的问题及具体的求解过程。这其实是用计算机的方式去思考,但这样的思维却使得我们的程序只为满足实现当前的需求,不容易维护,不容易扩展,更不容易复用,从而达不到高质量代码的要求。面向对象......
  • 商密学习-分组密码加密模式笔记
    利于并行:ECB(加解密均利于并行)、CTR(加解密均并行)不利于并行:CBC(加密串行,解密可并行)、CFB(加密串行,解密可并行)、OFB(不可并行,每个密钥流块的生成依赖于前一个块的结果)需要填充:ECB、CBC不需要填充:CFB、OFB、CTR错误有扩散:CBC(加密过程错误影响随后所有,解密过程长度不改变最多影响两个......
  • 23设计模式详解
    参考博客https://baijiahao.baidu.com/s?id=1758410771062793648&wfr=spider&for=pc设计模式(Designpattern)"""对软件开发中【普遍存在(反复出现)的问题】,而提出的【解决方案】。每一个设计模式系统地命名、解释和评价了面向对象系统中一个重要和重复出现的设计通过设计......
  • C++工厂模式全解析:从简单工厂到抽象工厂的进阶之路
    在软件设计中,工厂模式(FactoryPattern)是一类创建型设计模式,用于将对象的创建过程和使用过程解耦。这种设计模式在面向对象编程中非常常见,特别是在构建复杂系统时,工厂模式可以使代码更加灵活、模块化、易于扩展。工厂模式的主要类型包括:简单工厂模式(SimpleFactory)工厂方法模......