0%

spark环境配置

spark环境配置全指南:从本地模式到 YARN 集群部署

Spark 支持多种运行模式,从本地开发调试到分布式集群部署,满足不同场景需求。本文详细讲解 Spark 三大核心模式(本地模式、Standalone 独立集群、YARN 集群)的环境配置步骤、验证方法及参数说明,帮助开发者快速搭建 Spark 运行环境。

环境准备:前置依赖与基础配置

在配置 Spark 前,需确保基础依赖已安装并正确配置,避免因环境缺失导致部署失败。

前置依赖

依赖 版本要求 作用
Java JDK 8 或 11(推荐 8,兼容性更好) Spark 运行的基础环境
Scala 2.12.x(配合 Spark 3.x) Spark 源码基于 Scala 开发,部分 API 依赖 Scala 环境
Hadoop(可选) 3.x(如使用 HDFS 或 YARN) 提供分布式存储(HDFS)和资源管理(YARN)

Spark 安装包选择

Spark 安装包分为两种类型,根据需求选择:

  • spark-x.x.x-bin-hadoopx.x:内置 Hadoop 依赖,适合快速部署(无需单独配置 Hadoop);
  • spark-x.x.x-bin-without-hadoop:不含 Hadoop 依赖,需手动关联本地 Hadoop 环境(本文以这种为例)。

下载地址:Spark 官方下载页

基础环境变量配置

~/.bash_profile~/.zshrc 中添加环境变量:

1
2
3
4
5
6
# Spark 安装目录  
export SPARK_HOME=/usr/local/spark-3.1.1-bin-without-hadoop
# Hadoop 安装目录(若使用 Hadoop)
export HADOOP_HOME=/usr/local/hadoop-3.3.0
# PATH 中添加 Spark 和 Hadoop 命令
export PATH=$SPARK_HOME/bin:$HADOOP_HOME/bin:$PATH

执行 source ~/.bash_profile 使配置生效。

关联 Hadoop 环境(关键步骤)

对于 without-hadoop 版本,需在 Spark 中关联本地 Hadoop 依赖,否则会出现 ClassNotFoundException

在 Spark 配置目录 $SPARK_HOME/conf 中,复制模板文件并修改:

1
2
cd $SPARK_HOME/conf  
cp spark-env.sh.template spark-env.sh

编辑 spark-env.sh,添加 Hadoop 类路径:

1
2
3
4
# 关联本地 Hadoop 环境(替换为你的 Hadoop 安装路径)  
export SPARK_DIST_CLASSPATH=$(/usr/local/hadoop-3.3.0/bin/hadoop classpath)
# 可选:指定 Spark 本地 IP(避免 hostname 解析问题)
export SPARK_LOCAL_IP=127.0.0.1

本地模式(Local Mode):开发调试首选

本地模式将 Spark 所有进程运行在单个 JVM 中,无需集群,适合开发、测试和小数据量任务。

启动 Spark Shell(交互式环境)

在终端执行:

1
spark-shell  

成功启动后,终端会显示 Spark 版本信息和 Web UI 地址(默认 http://localhost:4040):

1
2
Spark context Web UI available at http://localhost:4040  
Spark context available as 'sc' (master = local[*], app id = local-xxxxxx).

验证本地模式功能

在 Spark Shell 中执行简单的 WordCount 测试(读取 HDFS 或本地文件):

1
2
3
4
5
6
// 读取本地文件(需用 file:// 前缀)  
val lines = sc.textFile("file:///path/to/wordcount.txt")
// 执行单词计数
val counts = lines.flatMap(_.split(" ")).map((_, 1)).reduceByKey(_ + _)
// 打印结果
counts.collect().foreach(println)

若输出单词计数结果,说明本地模式配置成功。

通过 spark-submit 提交任务

本地模式也支持提交打包好的 Jar 包任务,示例:

1
2
3
4
5
$SPARK_HOME/bin/spark-submit \  
--class org.apache.spark.examples.SparkPi \ # 主类名
--master local[2] \ # 本地模式,使用 2 个 CPU 核心
$SPARK_HOME/examples/jars/spark-examples_2.12-3.1.1.jar \ # Jar 包路径
10 # 传给主函数的参数(计算 Pi 的迭代次数)

执行后会输出 Pi 的近似值(约 3.14),表示任务运行成功。

独立部署模式(Standalone):Spark 自带集群

Standalone 模式是 Spark 内置的分布式集群模式,采用 Master-Worker 架构,无需依赖外部资源管理器,适合中小规模集群。

集群规划(以单机模拟集群为例)

节点角色 主机名 进程
Master localhost Master 进程(主节点)
Worker localhost Worker 进程(从节点,可启动多个模拟集群)

配置 Worker 节点

$SPARK_HOME/conf 中,复制模板文件并配置 Worker 节点:

1
cp workers.template workers  

编辑 workers,添加 Worker 节点的主机名或 IP(单机模拟时填 localhost):

1
localhost  # 每个 Worker 节点占一行,可添加多个节点模拟集群  

启动 Standalone 集群

执行 Spark 自带的启动脚本:

1
$SPARK_HOME/sbin/start-all.sh  

启动后验证进程是否正常:

1
2
3
4
jps  # 应显示 Master 和 Worker 进程  
# 输出示例:
# 1234 Master
# 1256 Worker

访问集群 Web UI

Master 节点提供 Web 监控界面,默认端口 8080

1
http://localhost:8080  

界面可查看 Worker 节点状态、资源使用情况(CPU 核心、内存)等。

提交任务到 Standalone 集群

通过 spark-submit 提交任务到集群,指定 Master 地址:

1
2
3
4
5
6
7
$SPARK_HOME/bin/spark-submit \  
--class org.apache.spark.examples.SparkPi \
--master spark://localhost:7077 \ # Standalone Master 地址(默认端口 7077)
--executor-memory 512m \ # 每个 Executor 内存
--total-executor-cores 2 \ # 所有 Executor 总核心数
$SPARK_HOME/examples/jars/spark-examples_2.12-3.1.1.jar \
10

任务执行过程中,可通过 Master Web UI(8080 端口)或应用 Web UI(4040 端口)查看进度。

停止集群

1
$SPARK_HOME/sbin/stop-all.sh  

基于 YARN 的集群模式:整合 Hadoop 生态

YARN 模式是企业生产环境的首选,Spark 作为计算引擎运行在 Hadoop YARN 上,统一管理集群资源(CPU、内存),与 HDFS、Hive 等组件无缝集成。

前置条件

  • Hadoop YARN 集群已启动(包括 HDFS 和 YARN 进程);
  • Spark 已关联 Hadoop 环境(见本文第二步第 4 点);
  • YARN 配置中需开启虚拟内存检查(默认开启,避免任务被 kill)。

配置 YARN 环境

spark-env.sh 中添加 YARN 配置文件路径(可选,Spark 会自动读取 Hadoop 配置):

1
export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop  # 指向 Hadoop 的 YARN 配置目录  

启动 YARN 集群(若未启动)

1
2
$HADOOP_HOME/sbin/start-dfs.sh  # 启动 HDFS  
$HADOOP_HOME/sbin/start-yarn.sh # 启动 YARN

提交任务到 YARN 集群

通过 spark-submit 提交任务,指定 --master yarn

1
2
3
4
5
6
7
8
$SPARK_HOME/bin/spark-submit \  
--class org.apache.spark.examples.SparkPi \
--master yarn \ # 运行在 YARN 上
--deploy-mode client \ # Driver 运行在客户端(默认)
--executor-memory 512m \
--num-executors 2 \ # 启动 2 个 Executor
$SPARK_HOME/examples/jars/spark-examples_2.12-3.1.1.jar \
10

验证任务运行状态

  • YARN Web UI:访问 http://localhost:8088,可查看 Spark 应用的状态(RUNNING/COMPLETED);
  • Spark 应用 UI:在 YARN 界面中点击应用的 ApplicationMaster 链接,查看任务执行详情(如 DAG、Stage、Task 状态)。

YARN 部署模式说明

  • Client 模式:Driver 运行在提交任务的客户端,适合交互式场景(如 Spark Shell),日志直接输出到客户端;

  • Cluster 模式:Driver 运行在 YARN 集群的某个 NodeManager 上,适合生产环境批量任务,需通过 YARN 日志查看输出:

    1
    yarn logs -applicationId <application_id>  # 查看应用日志  

关键 Web UI 与监控

Spark 和 YARN 提供丰富的 Web 界面,用于监控集群状态和任务执行情况:

界面 地址 作用
Spark Master UI(Standalone) http://localhost:8080 查看集群节点、资源使用、应用列表
Spark 应用 UI http://localhost:4040 查看当前运行应用的 DAG、Stage、Task 详情
YARN ResourceManager UI http://localhost:8088 查看 YARN 集群应用、资源分配
Spark History Server http://localhost:18080 查看历史完成的应用(需单独配置启动)

常见问题与解决方案

1. 启动 Spark Shell 时报 Could not find or load main class org.apache.spark.launcher.Main

  • 原因:未正确关联 Hadoop 环境,缺少 Hadoop 依赖。
  • 解决:确保 spark-env.shSPARK_DIST_CLASSPATH 配置正确,执行 $HADOOP_HOME/bin/hadoop classpath 验证路径是否有效。

2. YARN 任务被 kill,提示 Container killed on request. Exit code is 143

  • 原因:Executor 内存不足或 YARN 资源限制过严。
  • 解决:增加 --executor-memory 配置,或调整 YARN 内存检查阈值(yarn-site.xmlyarn.nodemanager.pmem-check-enabled 设为 false,测试环境临时用)。

3. Standalone 集群中 Worker 启动后自动退出

  • 原因:端口冲突(如 7077、8080 被占用)或主机名解析问题。
  • 解决:检查端口占用(lsof -i:7077),修改 spark-env.sh 中的 SPARK_LOCAL_IP 为正确 IP。

欢迎关注我的其它发布渠道

表情 | 预览
快来做第一个评论的人吧~
Powered By Valine
v1.3.10