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…

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…

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

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

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

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

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

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

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

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

高分辨率高电流监控器电路设计

1 简介 该单电源电流检测解决方案可以在分流电阻器上测量50mA 至10A 范围内的电流信号。电流检测放大器可以在0V 至75V 的宽共模电压范围内测量分流电阻器。全差分放大器(FDA) 执行单端至差分转换&#xff0c;并以1MSPS 的最大数据速率驱动范围为5V 的SAR ADC 差分输入。可以调…

ALB搭建

ALB: 多级分发、消除单点故障提升应用系统的可用性&#xff08;健康检查&#xff09;。 海量微服务间的高效API通信。 自带DDoS防护&#xff0c;集成Web应用防火墙 配置&#xff1a; 1.创建ECS实例 2.搭建应用 此处安装的LNMP 3.创建应用型负载均衡ALB实例 需要创建服务关联角…

【客观理性深入讨论国产中间件及数据库-科创基础软件】

随着国产化的进程&#xff0c;越来越多的国企央企开始要求软件产品匹配过程化的要求&#xff0c; 最近有一家银行保险的科技公司对行为验证码产品就要求匹配国产中间件&#xff0c; 于是开始了解国产中间件都有哪些厂家 一&#xff1a;国产中间件主要产品及厂商 1 东方通&…

了解 MybatisPlus中@InterceptorIgnore防止拦截器拦截 基本知识(附Demo)

目录 前言1. 基本知识2. Demo 前言 对于Java基本知识推荐阅读&#xff1a; java框架 零基础从入门到精通的学习路线 附开源项目面经等&#xff08;超全&#xff09;【Java项目】实战CRUD的功能整理&#xff08;持续更新&#xff09; 一开始是因为报错多租户的问题&#xff0…

【解决】Pico 串流 Unity 开发环境 Preview 黑屏问题

开发平台&#xff1a;Unity 6.0 开发工具&#xff1a;Pico SDK   一、问题描述 在 Unity 开发环境下运行 测试 PicoVR 表现时&#xff0c;出现 Game视窗 PicoVR投屏 呈现黑屏效果。详细背景如下&#xff1a; UnitySwitch PlateformPICO Integration SDKPICO Live Preview6…

数据结构与算法——图

图 1.图的定义和表示 图的定义 图G由集合V和集合E组成&#xff0c;记作G(V,E),其中&#xff1a; 1、V是顶点元素的有限集合&#xff1b; 2、E是顶点间关系——边的有限集合。 3、边是顶点的无序对或有序对。 无向图和有向图&#xff1a; 无向图 由没有方向的边构成的图…

HTMLCSS:爱上班的猫咪

这段HTML和CSS代码是一个SVG动画的示例&#xff0c;它描述了一个包含猫咪和笔记本电脑的复杂场景 HTML <div class"content"><div class"container"><svg id"bongo-cat" xmlns"http://www.w3.org/2000/svg" xmlns:x…

CPU Study - Pipeline Basic

参考来源&#xff1a;《超标量处理器设计》—— 姚永斌 超标量处理器 一个程序执行时间的公式如下&#xff0c;而这个公式通常也反映了处理器的性能&#xff1a; 图中的CPI - Cycle Per Instruction也就是CPU每条指令需要的周期数量&#xff0c;CPI计算方法就是周期数量除以…