【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>
相关推荐
rui锐rui10 分钟前
大数据学习2:HIve
大数据·hive·学习
G皮T24 分钟前
【Elasticsearch】检索高亮
大数据·elasticsearch·搜索引擎·全文检索·kibana·检索·高亮
沉着的码农3 小时前
【设计模式】基于责任链模式的参数校验
java·spring boot·分布式
zskj_zhyl5 小时前
智慧养老丨从依赖式养老到自主式养老:如何重构晚年生活新范式
大数据·人工智能·物联网
哲科软件5 小时前
从“电话催维修“到“手机看进度“——售后服务系统开发如何重构客户体验
大数据·智能手机·重构
zzywxc7875 小时前
AI 正在深度重构软件开发的底层逻辑和全生命周期,从技术演进、流程重构和未来趋势三个维度进行系统性分析
java·大数据·开发语言·人工智能·spring
专注API从业者6 小时前
构建淘宝评论监控系统:API 接口开发与实时数据采集教程
大数据·前端·数据库·oracle
一瓣橙子7 小时前
缺少关键的 MapReduce 框架文件
大数据·mapreduce
永洪科技14 小时前
永洪科技荣获商业智能品牌影响力奖,全力打造”AI+决策”引擎
大数据·人工智能·科技·数据分析·数据可视化·bi
weixin_3077791314 小时前
Hive集群之间迁移的Linux Shell脚本
大数据·linux·hive·bash·迁移学习