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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/58467.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java后端工程师转行AI大模型岗,工作、自我提升两不误!

随着技术的不断进步&#xff0c;人工智能&#xff08;AI&#xff09;已经成为当今科技领域最热门的话题之一。许多开发者开始考虑从传统的软件开发领域&#xff0c;如Java&#xff0c;转向人工智能领域&#xff0c;今天小编和大家一起来探讨Java开发者是否可以转型到人工智能&a…

【系统设计】提升Kafka系统性能:Spring Boot实现Lag感知的生产者与消费者

在分布式系统中&#xff0c;消息队列扮演着至关重要的角色&#xff0c;而Kafka凭借其高吞吐量和低延迟的特性&#xff0c;成为了流数据处理的首选。然而&#xff0c;随着应用规模的扩大&#xff0c;如何有效管理Kafka的offset与lag&#xff0c;确保系统的高可用性和性能稳定&am…

通宵修bug

前两个月的某天凌晨&#xff0c;我司全新的一个营销工具&#xff0c;在全国如期上线。然而整个发布过程并非一帆风顺&#xff0c;在线上环境全量发布后&#xff0c;有同事观测到他所负责模块的监控曲线有异常&#xff01;监控曲线在发布的时刻近乎于直线下跌。 经过初步排查&am…

Rust-宏编程

巴山楚水凄凉地&#xff0c;二十三年弃置身。 怀旧空吟闻笛赋&#xff0c;到乡翻似烂柯人。 沉舟侧畔千帆过&#xff0c;病树前头万木春。 今日听君歌一曲&#xff0c;暂凭杯酒长精神。 ——《酬乐天扬州初逢席上见赠》唐刘禹锡 【哲理】翻覆的船只旁仍有千千万万的帆船经过&a…

leetcode912.排序数组的题解

题目描述&#xff1a; 题目要求在不使用任何内置函数的情况下解决问题&#xff0c;时间复杂度为 O(nlog(n))。 笔者使用了快速排序&#xff0c;但是直接使用最原始的快速排序&#xff0c;有些特殊的测试用例会超时。 1&#xff09;如果数组本身基本有序&#xff0c;则使用原始…

TikTok品牌出海:从“流量为王”到“价值为王”

随着市场竞争的加剧&#xff0c;品牌逐渐意识到&#xff0c;仅仅依靠流量已不足以在海外市场立足&#xff0c;必须实现从“流量为王”到“价值为王”的转变。本文Nox聚星将和大家探讨品牌如何与TikTok达人合作&#xff0c;在海外市场中建立长期稳定的品牌形象。 一、品牌出海的…

纯血鸿蒙系统 HarmonyOS NEXT自动化测试实践

1、测试框架选择 hdc&#xff1a;类似 android 系统的 adb 命令&#xff0c;提供设备信息查询&#xff0c;包管理&#xff0c;调试相关的命令ohos.UiTest&#xff1a;鸿蒙 sdk 的一部分&#xff0c;类似 android sdk 里的uiautomator&#xff0c;基于 Accessibility 服务&…

Kafka 可观测性最佳实践

Kafka 概述 Kafka 是由 LinkedIn 开发一个分布式的基于发布订阅模式的消息队列&#xff0c;是一个实时数据处理系统&#xff0c;可以横向扩展。与 RabbitMQ、RockerMQ 等中间件一样拥有几大特点&#xff1a; 异步处理服务解耦流量削峰 监控 Kafka 是非常重要的&#xff0c;因…

《XGBoost算法的原理推导》12-13树的叶子节点权重w和映射关系q 公式解析

本文是将文章《XGBoost算法的原理推导》中的公式单独拿出来做一个详细的解析&#xff0c;便于初学者更好的理解。 我们重新定义一颗树&#xff0c;包括两个部分&#xff1a; 叶子结点的权重向量 w w w&#xff1b;实例 -> 叶子结点的映射关系 q q q&#xff08;本质是树的…

电商API:开启电商新时代的关键钥匙

一、电商API&#xff1a;定义与发展 电商API&#xff0c;即应用程序编程接口&#xff0c;是连接不同软件系统的桥梁&#xff0c;在电商领域中发挥着至关重要的作用。电商API的发展历程可以追溯到20世纪90年代&#xff0c;当时电子商务刚刚兴起&#xff0c;企业开始意识到通过A…

多client向同一个pushgateway推送指标被覆盖问题

问题: 多个client向同一个pushgateway推送指标&#xff0c;每个client推送的指标名称相同但是lable不同。如下&#xff1a; # TYPE ObjectCount gauge ObjectCount{server_id"server1"} 4 ObjectCount{server_id"server2"} 4 ObjectCount{server_id"…

C++__XCode工程中Debug版本库向Release版本库的切换

Debug和Release版本分别设置编译后&#xff0c;就分别得到了对应的lib库&#xff0c;如下图&#xff1a; 再生成Release后如下图&#xff1a;

梧桐数据库中处理连续日期序列的解决方案

在数据库管理中&#xff0c;处理时间序列数据是一项常见的任务&#xff0c;尤其是在需要识别连续日期序列的场景中。例如&#xff0c;在一个生产环境中&#xff0c;我们可能需要跟踪产品的输出类型&#xff0c;并记录这些输出是否连续。本文将介绍如何在梧桐数据库中实现这一功…

增删改增删改

savePostMapping("/save") public ResponseResult save(RequestBody ChannelDto channelDto){ // 参数判断 if(channelDto null || StringUtils.isBlank(channelDto.getName())){ return ResponseResult.error(AppHttpCodeEnum.PARA…

消费疲软下,家居品牌如何利用营销实现新的突围与增长?

在消费疲软的大环境下&#xff0c;家居品牌面临着前所未有的挑战与机遇。尤其以耐消品为主的家居行业&#xff0c;也受到一定程度影响——有效需求不足导致产能过剩&#xff0c;营销乏力&#xff0c;市场竞争开始变得激烈&#xff0c;不少家居品牌正在面临业绩压力。家居品牌如…

Apache Shiro -配置先后的影响

在Apache Shiro框架中&#xff0c;shiroFilterChainDefinition&#xff08;或filterChainDefinitions&#xff09;的配置顺序确实有影响。以下是具体的影响和原因&#xff1a; URL匹配规则&#xff1a;Shiro在验证URL时&#xff0c;会按照filterChainDefinitions中配置的顺序进…

How to use ffmpeg to convert video format from .webm to .mp4

The .mp4 container format doesn’t support the VP8 codec, which is commonly used in .webm files. MP4 containers typically use the H.264 codec for video and AAC for audio. You’ll need to re-encode the video using the H.264 codec and re-encode the audio us…

ORACLE _11G_R2_ASM 常用命令

--------查看磁盘组&#xff0c;(空间情况) select name,state,free_mb,total_mb,usable_file_mb from v$asm_diskgroup; --------查看磁盘情况 select GROUP_NUMBER,free_mb,total_mb,disk_number,MOUNT_STATUS,mode_status, HEADER_STATUS,name,PATH from v$asm_disk order …

连985都没有面试机会 二本就更没戏了:瞎说,这就是三年高考的意义

最近有二本同学在直播里说&#xff1a;“看到很多面经说&#xff0c;连985同学都没有面试机会&#xff0c;而且是零offer。那我们二本就更没戏了。” 其实这种言论是在瞎扯。 我们一直在强调校招是分层的。 现在学生太多了&#xff0c;而且招聘对学历是有要求的。比如大厂的…

微信小程序运营日记(第四天)

2024年11月6日-星期三-2024年45周 {微信小程序的时间板块进行一个增加&#xff0c;增加&#xff1a;2024年第45周|共53周&#xff0c;星期三&#xff0c;今年时间剩余&#xff0c;本周时间剩余} 开源竞争&#xff1a; 开源竞争&#xff08;当你无法掌握一个技术就开源这个技术…