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.xdnf.cn/news/6215.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

是时候用开源降低AI落地门槛了

过去三十多年&#xff0c;从Linux到KVM&#xff0c;从OpenStack到Kubernetes&#xff0c;IT领域众多关键技术都来自开源。开源技术不仅大幅降低了IT成本&#xff0c;也降低了企业技术创新的门槛。 那么&#xff0c;在生成式AI时代&#xff0c;开源能够为AI带来什么&#xff1f;…

机器学习—矩阵乘法的规则

有一个23的矩阵A&#xff0c;有两行三列&#xff0c;把这个矩阵的列想象成三个向量a1,a2,a3&#xff0c;用一个转置&#xff0c;把它相乘&#xff0c;首先&#xff0c;什么是转置&#xff0c;把一个矩阵进行行变列&#xff0c;列变行的操作&#xff0c;所以这些行现在是一个转置…

字节面试Java基础部分——HashMap

字节面试Java基础部分 面试管&#xff1a;Java应该很熟悉吧&#xff0c;接下来问你几个Java基础问题&#xff1a; HashMap 是什么样的数据结构 JDK 7 中&#xff0c;HashMap 由“数组链表”组成&#xff0c;数组是 HashMap 的主体&#xff0c;链表则是主要为了解决哈希冲突而…

Rust 力扣 - 2461. 长度为 K 子数组中的最大和

文章目录 题目描述题解思路题解代码题目链接 题目描述 题解思路 我们遍历长度为k的窗口&#xff0c;用一个哈希表记录窗口内的所有元素&#xff08;用来对窗口内元素去重&#xff09;&#xff0c;我们取哈希表中元素数量等于k的窗口总和的最大值 题解代码 use std::collecti…

《AI在企业战略中的关键地位:以微软和阿里为例》

内容概要 在当今商业环境中&#xff0c;人工智能&#xff08;AI&#xff09;的影响力如滔滔洪水&#xff0c;愈演愈烈。文章将揭示AI在企业战略中的崛起&#xff0c;尤其以微软和阿里巴巴为代表的企业&#xff0c;这两家科技巨头通过不同方式&#xff0c;将智能技术融入其核心…

线上lgb使用

1. 单机版模型 转 spark集群 打分 速度超快&#xff0c;十亿数据&#xff0c;十多分钟&#xff01;&#xff01;&#xff01; 1.1 主函数-主要获取模型路径 # codingutf-8 import pyspark.sql.functions as F from pyspark.sql import SparkSession from pyspark.sql.types …

Uniapp安装Pinia并持久化(Vue3)

安装pinia 在uni-app的Vue3版本中&#xff0c;Pinia已被内置&#xff0c;无需额外安装即可直接使用&#xff08;Vue2版本则内置了Vuex&#xff09;。 HBuilder X项目&#xff1a;直接使用&#xff0c;无需安装。CLI项目&#xff1a;需手动安装&#xff0c;执行yarn add pinia…

JVM基础

JRE&#xff1a;运行java字节码的环境。它是运行已编译java程序所需要的所有内容的集合&#xff0c;主要包括java虚拟机JVM和java基础类库&#xff08;class library&#xff09; JVM&#xff1a;是Java Virtual Machine的缩写&#xff0c;即Java虚拟机。‌它是一个虚构的计算…

vm虚拟机中添加网卡却在network-scripts文件找不到,解决方法

前言 进入network-scripts文件发现只有eth0网卡 ifconfig发现添加进去了 解决方法 nmcli d s #查看目前服务器中所有网卡 手动启用该接口 nmcli d connect eth1 重启网卡 systemctl restart network 解决问题

keepalive+mysql8双主

1.概述 利用keepalived实现Mysql数据库的高可用&#xff0c;KeepalivedMysql双主来实现MYSQL-HA&#xff0c;我们必须保证两台Mysql数据库的数据完全一致&#xff0c;实现方法是两台Mysql互为主从关系&#xff0c;通过keepalived配置VIP&#xff0c;实现当其中的一台Mysql数据库…

论文阅读(一种基于球面投影和特征提取的岩石点云快速配准算法)

目前存在的问题&#xff1a; 在图像配准研究方面比点云配准更早、更有发展。相对之下&#xff0c;点云配准方法不成熟&#xff0c;将图像配准的思想与ICP相结合。 文章主要研究内容&#xff1a; 单站扫描仪的点云数据通过球极坐标转换为数字图像提取图像特征并去除边缘点&#…

人脸检测之MTCNN算法网络结构

MTCNN&#xff08;Multi-task Cascaded Convolutional Networks&#xff09;是一种用于人脸检测和关键点检测的深度学习模型&#xff0c;特别适合在复杂背景下识别出多尺度的人脸。它通过多任务学习来实现人脸检测和人脸关键点定位&#xff08;如眼睛、鼻子、嘴巴的位置&#x…

CocosCreator 构建透明背景应用(最新版!!!)

文章目录 透明原理补充设置截图以及代码step1: electron-js mian.jsstep2:ENABLE_TRANSPARENT_CANVASstep3:SOLID_COLOR Transparentstep:4 Build Web phonestep5:package electron-js & change body background-color 效果图补充 透明原理 使用Cocos creator 做桌面应用开…

【设计模式】结构型模式(三):桥接模式、外观模式

结构型模式&#xff08;三&#xff09;&#xff1a;桥接模式 4.桥接模式&#xff08;Bridge&#xff09;4.1 结构4.2 示例4.2.1 抽象类4.2.2 细化抽象类4.2.3 实现类接口4.2.4 具体实现类4.2.5 客户端 5.外观模式&#xff08;Facade&#xff09; 4.桥接模式&#xff08;Bridge&…

初识Linux

Linux指令 输入指令&#xff0c;实际上是在Linux环境下&#xff0c;做Windows的操作。 ls指令 语法&#xff1a; ls [选项][目录或文件] 功能&#xff1a; 对于目录&#xff0c;该命令列出该目录下的所有子目录与文件。 对于文件&#xff0c;将列出文件名以及其他信息。 常…

【Uniapp】Uniapp Android原生插件开发指北

前言 在uniapp开发中当HBuilderX中提供的能力无法满足App功能需求&#xff0c;需要通过使用Andorid/iOS原生开发实现时&#xff0c;或者是第三方公司提供的是Android的库&#xff0c;这时候可使用App离线SDK开发原生插件来扩展原生能力。 插件类型有两种&#xff0c;Module模…

软考教材重点内容 信息安全工程师 第1章 网络信息安全概述

第 1 章 网络信息安全概述 1.1.1 网络信息安全相关概念 狭义上的网络信息安全特指网络信息系统的各组成要素符合安全属性的要求&#xff0c;即机密性、完整性、可用性、抗抵赖性、可控性。 广义上的网络信息安全是涉及国家安全、城市安全、经济安全、社会安全、生产安全、人身安…

Redis ——发布订阅

问题引入&#xff1a; 服务器A、B、C、D&#xff0c;客户端&#xff1a;C1&#xff0c;C2&#xff0c;C3&#xff0c;C4&#xff1b; 客户端基于集群聊天服务器的负载均衡分配&#xff1b; C1 被分配到A&#xff0c;C2 被分配到B&#xff0c;C3 被分配到C&#xff0c;C4 被分…

【网络】传输层协议TCP(下)

目录 四次挥手状态变化 流量控制 PSH标记位 URG标记位 滑动窗口 快重传 拥塞控制 延迟应答 mtu TCP异常情况 四次挥手状态变化 之前我们讲了四次挥手的具体过程以及为什么要进行四次挥手&#xff0c;下面是四次挥手的状态变化 那么我们下面可以来验证一下CLOSE_WAIT这…

单链表专题

单链表 1. 链表的概念2. 链表的分类3. 实现无头单向非循环链表&#xff08;单链表&#xff09;3.1 单链表的声明3.2 单链表的打印3.3 尾插3.4 头插3.5 尾删3.6 头删3.7 查找3.8 在指定位置之前插入数据3.9 在指定位置之后插入数据3.10 删除指定节点3.11 销毁链表 4. 一些细节4.…