本文是大数据系列第 68 篇,手把手搭建 Apache Spark 分布式计算环境,基于已有的三节点 Hadoop 集群扩展部署。
环境前提
本文假设已按照本系列前几篇完成以下准备:
- 三台 Linux 节点(
h121、h122、h123),已配置免密 SSH - Hadoop 3.x 集群已正常运行(HDFS + YARN)
- JDK 8 已安装,
JAVA_HOME环境变量已配置
下载 Spark
从 Apache 官方归档下载与 Hadoop 版本匹配的 Spark(选择 without-hadoop 版本,避免 Jar 冲突):
# 下载 Spark 2.4.5(without-hadoop 版本)
wget https://archive.apache.org/dist/spark/spark-2.4.5/spark-2.4.5-bin-without-hadoop-scala-2.12.tgz
# 解压到统一安装目录
tar -zxvf spark-2.4.5-bin-without-hadoop-scala-2.12.tgz -C /opt/servers/
cd /opt/servers/
mv spark-2.4.5-bin-without-hadoop-scala-2.12 spark-2.4.5
配置环境变量
在 /etc/profile 中追加 Spark 环境变量(三个节点都需要执行):
export SPARK_HOME=/opt/servers/spark-2.4.5
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
执行 source /etc/profile 使配置生效。
配置核心文件
进入 $SPARK_HOME/conf 目录,复制模板文件并修改:
slaves —— 从节点列表
cp slaves.template slaves
编辑 slaves,填入所有 Worker 节点的主机名:
h121.wzk.icu
h122.wzk.icu
h123.wzk.icu
spark-env.sh —— 环境参数
cp spark-env.sh.template spark-env.sh
在文件末尾添加:
export JAVA_HOME=/opt/servers/jdk1.8
export HADOOP_HOME=/opt/servers/hadoop-3.1.3
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export SPARK_HOME=/opt/servers/spark-2.4.5
export SPARK_MASTER_HOST=h121.wzk.icu
export SPARK_MASTER_PORT=7077
spark-defaults.conf —— 默认配置
cp spark-defaults.conf.template spark-defaults.conf
添加关键参数:
spark.master spark://h121.wzk.icu:7077
spark.eventLog.enabled true
spark.eventLog.dir hdfs://h121.wzk.icu:8020/spark-logs
spark.driver.memory 512m
spark.serializer org.apache.spark.serializer.KryoSerializer
注意:事件日志目录需提前在 HDFS 上创建:
hadoop fs -mkdir -p /spark-logs
分发配置到其他节点
使用 rsync 将配置文件同步到 h122、h123:
rsync -av /opt/servers/spark-2.4.5 root@h122.wzk.icu:/opt/servers/
rsync -av /opt/servers/spark-2.4.5 root@h123.wzk.icu:/opt/servers/
# 同步环境变量(或在各节点手动添加)
rsync -av /etc/profile root@h122.wzk.icu:/etc/profile
rsync -av /etc/profile root@h123.wzk.icu:/etc/profile
启动集群
在 Master 节点(h121)执行:
# 启动所有节点(Master + 全部 Worker)
$SPARK_HOME/sbin/start-all.sh
# 验证进程
jps
# h121: Master
# h122/h123: Worker
访问 Spark Web UI:http://h121.wzk.icu:8080,可看到已注册的 Worker 节点及可用资源。
验证:运行示例程序
使用内置的 Pi 估算示例验证集群是否正常:
spark-submit \
--master spark://h121.wzk.icu:7077 \
--class org.apache.spark.examples.SparkPi \
$SPARK_HOME/examples/jars/spark-examples_2.12-2.4.5.jar \
100
执行完毕后,控制台输出 Pi is roughly 3.14159... 即表示集群部署成功。
常见问题
| 问题 | 排查方向 |
|---|---|
| Worker 无法注册到 Master | 检查防火墙是否开放 7077 端口;确认 spark-env.sh 中 SPARK_MASTER_HOST 填写正确 |
| 事件日志写入失败 | 确认 HDFS /spark-logs 目录已创建且有写权限 |
| 序列化异常 | 确认 KryoSerializer 配置正确,自定义类已注册 |
Spark Standalone 集群搭建完成后,下一步将学习核心数据抽象 RDD 的概念与操作。