【Spark】使用Spark集群搭建Yarn模式

以下是使用 YARN 作为资源管理器搭建 Spark 集群的详细步骤:

1. 环境准备

1.1 集群规划

假设已有 Hadoop YARN 集群(至少包含 NameNode、ResourceManager、NodeManager):

  • 主节点 :hadoop-master (192.168.1.100)
    • 运行 NameNode、ResourceManager
  • 从节点 :hadoop-worker1 (192.168.1.101)、hadoop-worker2 (192.168.1.102)
    • 运行 DataNode、NodeManager
1.2 系统要求
  • 所有节点安装 Hadoop 3.x 并正常运行 YARN
  • 所有节点安装 Java 8+(推荐 OpenJDK 11)
  • 所有节点安装 Spark 3.x(版本需与 Hadoop 兼容)

2. 安装 Spark

2.1 下载并解压 Spark

在所有节点执行:

bash

复制代码
wget https://downloads.apache.org/spark/spark-3.3.2/spark-3.3.2-bin-hadoop3.tgz
tar -zxvf spark-3.3.2-bin-hadoop3.tgz
mv spark-3.3.2-bin-hadoop3 /opt/spark
2.2 配置环境变量

在所有节点的 ~/.bashrc 中添加:

bash

复制代码
export SPARK_HOME=/opt/spark
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
export HADOOP_CONF_DIR=/etc/hadoop/conf  # Hadoop 配置目录

使环境变量生效:

bash

复制代码
source ~/.bashrc

3. 配置 Spark 与 YARN 集成

3.1 修改 Spark 配置文件

所有节点$SPARK_HOME/conf 目录下:

3.1.1 spark-env.sh

复制模板并编辑:

bash

复制代码
cp spark-env.sh.template spark-env.sh

添加以下内容:

bash

复制代码
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64  # 根据实际路径修改
export HADOOP_CONF_DIR=/etc/hadoop/conf
export SPARK_DIST_CLASSPATH=$(hadoop classpath)
export SPARK_EXECUTOR_CORES=2
export SPARK_EXECUTOR_MEMORY=2g
export SPARK_DRIVER_MEMORY=1g
3.1.2 spark-defaults.conf

复制模板并编辑:

bash

复制代码
cp spark-defaults.conf.template spark-defaults.conf

添加以下内容:

properties

复制代码
spark.master                     yarn
spark.submit.deployMode          cluster
spark.yarn.am.memory             1g
spark.yarn.am.cores              1

4. 验证 Hadoop YARN 集群

确保 YARN 集群正常运行:

bash

复制代码
# 在主节点检查 HDFS
hdfs dfsadmin -safemode leave
hdfs dfs -ls /

# 在主节点检查 YARN
yarn resourcemanager -format-state-store
yarn node -list

访问 YARN Web UI (http://hadoop-master:8088) 确认所有 NodeManager 正常注册。

5. 提交 Spark 应用到 YARN

5.1 测试 Spark Pi 示例

在任意节点执行:

bash

复制代码
spark-submit \
  --class org.apache.spark.examples.SparkPi \
  --master yarn \
  --deploy-mode cluster \
  $SPARK_HOME/examples/jars/spark-examples_2.12-3.3.2.jar \
  100

参数说明:

  • --master yarn:指定 YARN 作为资源管理器
  • --deploy-mode cluster:Driver 运行在 YARN 集群中
  • --deploy-mode client:Driver 运行在提交命令的客户端
5.2 查看应用状态
  • 通过 YARN Web UI (http://hadoop-master:8088) 查看应用运行状态
  • 通过 Spark History Server (http://hadoop-master:18080) 查看历史应用日志

6. 高级配置(可选)

6.1 启用 Spark History Server

spark-defaults.conf 中添加:

properties

复制代码
spark.eventLog.enabled           true
spark.eventLog.dir               hdfs:///spark-logs
spark.history.fs.logDirectory    hdfs:///spark-logs

创建 HDFS 目录并启动服务:

bash

复制代码
hdfs dfs -mkdir -p /spark-logs
hdfs dfs -chmod 777 /spark-logs
start-history-server.sh
6.2 调整资源分配

根据集群规模调整以下参数(spark-defaults.conf):

properties

复制代码
spark.executor.memory            4g
spark.executor.cores             4
spark.dynamicAllocation.enabled  true
spark.shuffle.service.enabled    true

7. 故障排查

  • 应用无法提交
    • 检查 YARN 集群是否正常运行 (yarn node -list)
    • 确认 HADOOP_CONF_DIR 指向正确的 Hadoop 配置目录
  • 内存不足错误
    • 调整 spark.executor.memoryspark.driver.memory
    • 检查 YARN 内存总量 (yarn-site.xml 中的 yarn.nodemanager.resource.memory-mb)
  • 历史服务器无法访问
    • 确保 HDFS 目录 /spark-logs 存在且权限正确
    • 检查 History Server 日志 ($SPARK_HOME/logs)

8. 常用命令

bash

复制代码
# 启动 Spark Shell (YARN 模式)
spark-shell --master yarn --deploy-mode client

# 停止 History Server
stop-history-server.sh

# 查看 YARN 应用列表
yarn application -list

# 杀死 YARN 应用
yarn application -kill <application_id>
相关推荐
张人玉30 分钟前
数据可视化大屏——物流大数据服务平台(二)
大数据·信息可视化
掘金-我是哪吒1 小时前
分布式微服务系统架构第126集:集群,数据库扩展,多节点分布,分库,分表,分片,分表,运维
运维·数据库·分布式·微服务·系统架构
Leo.yuan1 小时前
数据分析怎么做?高效的数据分析方法有哪些?
大数据·数据库·信息可视化·数据挖掘·数据分析
·云扬·2 小时前
【PmHub后端篇】Skywalking:性能监控与分布式追踪的利器
分布式·skywalking
杜清卿2 小时前
Spark处理过程-转换算子和行动算子
大数据·分布式·spark
小冻梨!!!3 小时前
Spark,在shell中运行RDD程序
大数据·javascript·spark
IvanCodes4 小时前
五、Hive表类型、分区及数据加载
大数据·数据仓库·hive
小白的白是白痴的白4 小时前
Spark基础介绍
大数据·分布式·spark
火山引擎开发者社区4 小时前
推理加速新范式:火山引擎高性能分布式 KVCache (EIC)核心技术解读
分布式·火山引擎·eic