主节点 (Master):spark-master (192.168.1.100)
工作节点 (Worker):spark-worker1 (192.168.1.101)、spark-worker2 (192.168.1.102)
所有节点安装相同版本的 Java 8+(推荐 OpenJDK 11)
所有节点安装 Python 3.6+(可选,用于 PySpark)
关闭防火墙或开放以下端口:
Master:7077(集群通信)、8080(Web UI)
Worker:8081(Web UI)
访问 Apache Spark 官网,选择合适的版本进行下载。例如,可以选择 spark-3.3.2-bin-hadoop3 这个预编译版本。下载完成后,将文件解压到目标目录。
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
在所有节点的 ~/.bashrc 中添加:
bash
export SPARK_HOME=/opt/spark
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
使环境变量生效:
bash
source ~/.bashrc
在 Master 节点 (spark-master) 上编辑以下文件:
3.1.1 spark-env.sh
复制模板并编辑:
bash
cd $SPARK_HOME/conf
cp spark-env.sh.template spark-env.sh
添加以下内容:
bash
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 # 根据实际路径修改
export SPARK_MASTER_HOST=192.168.1.100
export SPARK_MASTER_PORT=7077
export SPARK_WORKER_MEMORY=2g # 每个 Worker 可用内存
export SPARK_WORKER_CORES=2 # 每个 Worker 可用 CPU 核心数
3.1.2 workers
复制模板并编辑:
bash
cp workers.template workers
添加所有 Worker 节点的主机名或 IP:
plaintext
spark-worker1
spark-worker2
将配置好的 Spark 目录复制到所有 Worker 节点:
bash
# 在 Master 节点执行
scp -r /opt/spark spark-worker1:/opt/
scp -r /opt/spark spark-worker2:/opt/
在 spark-master 上执行:
bash
start-master.sh
验证 Master 启动成功:访问 http://192.168.1.100:8080,应看到 Spark Master 界面。
若自动启动失败,可在每个 Worker 节点手动启动:
bash
start-worker.sh spark://192.168.1.100:7077
刷新 Master Web UI,应看到两个 Worker 节点已注册。
使用 spark-submit 提交应用到集群:
bash
spark-submit \
--master spark://192.168.1.100:7077 \
--class org.apache.spark.examples.SparkPi \
--executor-memory 1g \
--total-executor-cores 2 \
$SPARK_HOME/examples/jars/spark-examples_2.12-3.3.2.jar \
100
在 spark-defaults.conf 中启用:
bash
cp spark-defaults.conf.template spark-defaults.conf
添加:
properties
spark.dynamicAllocation.enabled true
spark.shuffle.service.enabled true
配置 ZooKeeper 实现 Master 高可用:
bash
export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=zk1:2181,zk2:2181,zk3:2181 -Dspark.deploy.zookeeper.dir=/spark"
bash
# 停止集群
stop-all.sh
# 启动历史服务器
start-history-server.sh
# 查看日志
cd $SPARK_HOME/logs