当前位置: 首页 > 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的历史服务器的界面。

http://www.xdnf.cn/news/209521.html

相关文章:

  • 第1阶段-前5天-考试题及答案
  • (开源)视频画面增强模型:Ev-DeblurVSR (可以解决视频画面不清晰的问题)
  • C++算法(17):reverse函数用法详解,头文件<algorithm>与实战示例
  • CSS的三大特性:层叠、继承与优先级
  • UI-TARS论文解读 并提供镜像
  • 深入理解Spring AI框架的核心概念
  • HarmonyOS ArkUI交互事件与手势处理全解析:从基础到高级实践
  • 阿里Qwen3 8款模型全面开源,免费商用,成本仅为 DeepSeek-R1 的三分之一
  • 深入理解 Linux 权限管理:从基础到进阶
  • Agent开源工具:mcp快速接入,mcp-use上手指南
  • 23G显存可以跑多大尺寸的Qwen3?
  • 第十六届蓝桥杯 2025 C/C++组 旗帜
  • 常见的 CSS 知识点整理
  • 20250429在Ubuntu 20.04.6下安装VMware Workstation16
  • [零基础]内网ubuntu映射到云服务器上,http访问(frp内网穿透)
  • Java controller接口出入参时间序列化转换操作
  • AimRT 从零到一:官方示例精讲 —— 六、pb_chn示例.md
  • OpenObserve API Usage Guide for Log Management
  • 四则运算+从单向链表中删除指定值的节点+名字的漂亮度+数独(Sudoku)
  • Dali 1.1.4 | 使用尖端技术将描述转换成独特艺术品、照片和图像,发挥无限创意
  • npm如何安装pnpm
  • Flip PDF Plus Corp7.7.22电子书制作软件
  • AimRT 从零到一:官方示例精讲 —— 一、工具链与基本概念
  • css3伸缩盒模型第一章(主轴以及伸缩盒模型)
  • P1903 [国家集训队] 数颜色 / 维护队列 Solution
  • neo4j暴露公网ip接口——给大模型联通知识图谱
  • Python 使用一等函数实现设计模式(案例分析:重构“策略”模式)
  • Linux 服务管理两种方式service和systemctl
  • Node.js 事件循环和线程池任务完整指南​
  • 香港科技大学广州|可持续能源与环境学域博士招生宣讲会—四川大学专场