【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>
相关推荐
cui_win33 分钟前
Kafka运维实战 14 - kafka消费者组消费进度(Lag)深入理解【实战】
分布式·kafka
梦想画家2 小时前
Apache Kafka实时数据流处理实战指南
分布式·kafka·apache
Ice__Cai2 小时前
Django + Celery 详细解析:构建高效的异步任务队列
分布式·后端·python·django
java叶新东老师4 小时前
git 提交时排除一个或多个文件
大数据·git·elasticsearch
阿里云大数据AI技术4 小时前
Hologres V3.1版本发布,Serverless型实例从零开始构建OLAP系统
大数据·人工智能·机器学习
优测云服务平台5 小时前
优测推出HarmonyOS全场景测试服务,解锁分布式场景应用卓越品质!
分布式·harmonyos
秋难降6 小时前
一篇文章带你了解Pandassssssssssssssss
大数据·python·pandas
宇宙机长6 小时前
【kafka】消息队列
分布式·kafka
数据皮皮侠7 小时前
中国汽车能源消耗量(2010-2024年)
大数据·数据库·人工智能·物联网·金融·汽车·能源
TDengine (老段)7 小时前
TDengine 转化函数 TO_TIMESTAMP 用户手册
java·大数据·数据库·物联网·时序数据库·tdengine·涛思数据