【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.memory 和 spark.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>
相关推荐
遇码4 小时前
流式调用中途断连别直接报错:瞬态故障识别、退避重试与中文根因诊断的搭建方法
大数据·人工智能·ai·rust·数据分析·大模型·agent
JXJD20044 小时前
224G PAM4 高速线束:阻抗匹配设计与损耗控制的核心逻辑
大数据·ai
康实训4 小时前
老年评估仿真实训平台架构设计与老年人能力评估实训室教学落地实践
大数据·人工智能·算法·实训室·实训室建设
ha_lydms4 小时前
Datetime Functions(日期时间函数)
大数据·hadoop·阿里云·spark·数据处理·dataworks·maxcompute
lisw054 小时前
制造业信息化:现代工业的发展趋势!
大数据·网络·人工智能
AllData公司负责人4 小时前
AllData搭建大模型资产中台集成开源项目BISHENG/Crater/Coze-Studio/Coze-Loop/DataFIow,建设AI大模型开发底座
大数据·人工智能·开源·bisheng·coze-studio·crater·datafiow
lisanmengmeng5 小时前
Ganglia分布式集群监控系统安装手册
分布式
cc5725026535 小时前
2027校招岗位拆解:数学与应用数学转量化运营,SQL、Python与量化研究要求有何不同?
大数据
cspttty5 小时前
2027用户研究求职准备:应用统计学如何补齐研究设计与业务表达
大数据·数据库
麦豆GEO5 小时前
GEO与传统内容营销的核心差异:AI时代内容运营的全面升级
大数据·人工智能·内容运营