当前位置: 首页 > news >正文

如何搭建spark yarn 模式的集群集群

什么是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

2. 修改一下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

第二课时

前面我们完成了配置,接下来,我们去启动集群。

启动集群

注意这里要同时启动hadoop和spark。

1.启动hdfs和yarn。使用我们之前配置的脚本:myhadoop start

2.启动spark和spark的历史服务器。进入/opt/module/spark-yarn/sbin,运行: ./start-all.sh 和 ./start-history-server.sh

并通过jps去检查是否有对应的进程。

提交任务到集群

使用spark-submit提交任务

spark-submit --class org.apache.spark.examples.SparkPi --master yarn --deploy-mode cluster  /opt/module/spark-standalone/examples/jars/spark-examples_2.12-3.1.1.jar 10

代码说明:

  1. spark-submit:这是 Spark 提供的用于提交 Spark 应用程序的脚本。

2. --class org.apache.spark.examples.SparkPi:指定了应用程序的主类,也就是包含 main 方法的类。这里的 org.apache.spark.examples.SparkPi 是 Spark 自带的示例程序,用于通过蒙特卡罗方法估算圆周率 π的值。

3. --master yarn:指定了 Spark 应用程序的运行模式为 YARN。YARN 是 Hadoop 的资源管理系统,能够为 Spark 应用程序分配资源。

4. --deploy-mode cluster:指定了应用程序的部署模式为集群模式。在集群模式下,Driver 进程会在 YARN 集群内部的某个节点上运行。

5. /opt/module/spark-standalone/examples/jars/spark-examples_2.12-3.1.1.jar:指定了包含应用程序代码的 JAR 文件的路径。

6. 10:这是传递给应用程序的参数,在 SparkPi 示例中,这个参数表示用于估算π的采样点数。

查看运行结果

1. 在yarn任务面板页面中可以看到任务的信息。http://hadoop101:8088/cluster

2.点击history上的链接,可以跳转进入到spark的历史服务器的界面。

相关文章:

  • 贝叶斯优化RF预测模型
  • MYSQL三大日志、隔离级别(MVCC+锁机制实现)
  • 【深度学习与大模型基础】第14章-分类任务与经典分类算法
  • Vue2 相关知识点整理
  • 数据结构---单链表的增删查改
  • 第十六届蓝桥杯 2025 C/C++组 25之和
  • 【Bash】可以请您解释性地说明一下“2>1”这个语法吗?
  • 基于tabula对pdf中多个excel进行识别并转换成word中的优化(四)
  • 关于插值和拟合(数学建模实验课)
  • 【记】Laya2.x数字末尾导致换行异常问题
  • C# 14 field keyword:属性简化新利器
  • 基于PyTorch的Fashion-MNIST图像分类数据集处理与可视化
  • Java后端图形验证码的使用
  • [Linux网络_68] 转发 | 路由(Hop by Hop) | IP的分片和组装
  • 当OA闯入元宇宙:打卡、报销和会议的未来狂想
  • 【C++11】包装器:function与bind
  • 【BotSharp框架示例 ——实现聊天机器人,并通过 DeepSeek V3实现 function calling】
  • 【MuJoCo仿真】开源SO100机械臂导入到仿真环境
  • 在 Ubuntu 上离线安装 ClickHouse
  • ShaderToy学习笔记 05.3D旋转
  • 打造全域消费场景,上海大世界百个演艺娱乐新物种待孵化
  • 太好玩了!坐进大卫·霍克尼的敞篷车穿越他画笔下的四季
  • 三位成功女性,如何应对失败
  • 北京公园使用指南
  • 金融创新破局记:中小微企业转型背后的金融力量
  • 玉渊谭天丨中方减少美国农产品进口后,舟山港陆续出现巴西大豆船