什么是SparkONYarn模式?

(一)什么是SparkONYarn模式

Spark on YARN(Yet Another Resource Negotiator)是 Spark 框架在 Hadoop 集群中运行的一种部署模式,它借助 Hadoop YARN 来管理资源和调度任务。

架构组成

ResourceManager:作为 YARN 的核心,负责整个集群的资源管理和调度。它会接收来自各个应用程序的资源请求,并根据集群资源的使用情况进行合理分配。

NodeManager:部署在集群中的每个节点上,负责管理该节点上的资源使用情况,监控容器的运行状态,并且与 ResourceManager 保持通信,汇报节点的资源使用信息。

ApplicationMaster:在 Spark 应用启动时,YARN 会为其分配一个 ApplicationMaster。它的主要职责是向 ResourceManager 申请资源,并且与 NodeManager 协作,启动和管理 Spark 的 Executor 进程。

Spark Driver:负责执行用户编写的 Spark 应用程序代码,将其转化为一系列的任务,并调度这些任务到各个 Executor 上执行。

Executor:运行在 NodeManager 管理的容器中,负责具体执行 Spark 任务,并将执行结果返回给 Driver。

(二)运行流程

提交应用:用户通过命令行或者其他方式向 YARN 提交 Spark 应用程序。

启动 ApplicationMaster:ResourceManager 接收到应用程序的请求后,会在集群中的某个节点上启动一个 ApplicationMaster 进程。

申请资源:ApplicationMaster 向 ResourceManager 注册,并根据应用程序的需求申请资源。

启动 Executor:ResourceManager 根据资源分配情况,通知相应的 NodeManager 启动 Executor 进程。

任务执行:Spark Driver 将任务分发给各个 Executor 执行,Executor 执行完任务后将结果返回给 Driver。

应用结束:当所有任务执行完毕后,ApplicationMaster 向 ResourceManager 注销,释放占用的资源。

(三)模式分类

Client 模式:Driver 运行在客户端进程中,客户端会与 ApplicationMaster 和 Executor 进行通信。这种模式适用于交互式应用,例如使用 Spark Shell 进行数据探索和分析。在这种模式下,用户可以在客户端直接看到 Driver 的输出和日志信息,方便调试和监控应用程序的运行状态。

Cluster 模式:Driver 运行在集群中的某个节点上,由 ApplicationMaster 负责管理。这种模式适用于生产环境中的长时间运行的应用程序。在 Cluster 模式下,客户端提交应用程序后可以断开连接,应用程序会在集群中独立运行,不受客户端的影响。

(四)配置集群

1.上传并解压spark-3.1.2-bin-hadoop3.2.tgz,重命名解压之后的目录为spark-yarn。对应的命令是:tar -zxvf spark-3.3.1-bin-hadoop3.tgz -C /opt/module

  1. 修改一下spark的环境变量,/etc/profile.d/my_env.sh 。

spark 环境变量

export SPARK_HOME=/opt/module/spark-yarn

export PATH=PATH:SPARK_HOME/bin:$SPARK_HOME/sbin

同步给其他的设备: xsync /etc/profile.d/

3.修改hadoop的配置。/opt/module/hadoop-3.1.3/etc/hadoop/yarn-site.xml。因为测试环境虚拟机内存较少,防止执行过程进行被意外杀死,添加如下配置。

<!--是否启动一个线程检查每个任务正使用的物理内存量,如果任务超出分配值,则直接将其杀掉,默认是true -->

<property>

<name>yarn.nodemanager.pmem-check-enabled</name>

<value>false</value>

</property>

<!--是否启动一个线程检查每个任务正使用的虚拟内存量,如果任务超出分配值,则直接将其杀掉,默认是true -->

<property>

<name>yarn.nodemanager.vmem-check-enabled</name>

<value>false</value>

</property>

把这个设置分发到其他节点。使用xsync /opt/module/hadoop-3.1.3/etc/hadoop/同步一下。

4.修改spark配置。 把三个文件的名字重新设置一下。

workers.tempalte 改成 workers,spark-env.sh.template 改成 spark-env.sh,

spark-defaults.conf.template 改成 spark-defaults.conf。

然后,在workers文件中添加

hadoop100

hadoop101

hadoop102

在spark-env.sh文件中,添加如下

SPARK_MASTER_HOST=hadoop100

SPARK_MASTER_PORT=7077

HADOOP_CONF_DIR=/opt/module/hadoop-3.1.3/etc/hadoop

YARN_CONF_DIR=/opt/module/hadoop-3.1.3/etc/hadoop

export SPARK_HISTORY_OPTS="-Dspark.history.fs.logDirectory=hdfs://hadoop100:8020/directory"

在spark-defaults.conf文件中,添加如下

spark.eventLog.enabled true

spark.eventLog.dir hdfs://hadoop100:8020/directory

spark.yarn.historyServer.address=hadoop100:18080

spark.history.ui.port=18080

5.同步配置文件到其他设备。xsync /opt/module/spark-yarn/sbin

相关推荐
恋猫de小郭8 小时前
Flutter Zero 是什么?它的出现有什么意义?为什么你需要了解下?
android·前端·flutter
崔庆才丨静觅15 小时前
hCaptcha 验证码图像识别 API 对接教程
前端
passerby606116 小时前
完成前端时间处理的另一块版图
前端·github·web components
掘了16 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
崔庆才丨静觅16 小时前
实用免费的 Short URL 短链接 API 对接说明
前端
崔庆才丨静觅16 小时前
5分钟快速搭建 AI 平台并用它赚钱!
前端
崔庆才丨静觅17 小时前
比官方便宜一半以上!Midjourney API 申请及使用
前端
Moment17 小时前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端
崔庆才丨静觅17 小时前
刷屏全网的“nano-banana”API接入指南!0.1元/张量产高清创意图,开发者必藏
前端
剪刀石头布啊17 小时前
jwt介绍
前端