Spark 3.5.1 与 Hadoop 3.3.6 集群部署:3节点 Standalone 模式配置详解
·
Spark 3.5.1 与 Hadoop 3.3.6 集群部署:3节点 Standalone 模式配置详解
在当今数据驱动的商业环境中,构建高效可靠的大数据处理平台已成为企业数字化转型的核心需求。作为业界领先的分布式计算框架组合,Spark与Hadoop的协同部署能够为企业级数据分析提供强大的计算能力和存储支持。本文将深入探讨如何在生产级环境中部署三节点Spark Standalone集群与Hadoop 3.3.6的集成方案,涵盖从基础环境准备到高级调优的全流程实践。
1. 集群规划与环境准备
1.1 硬件资源配置建议
对于生产环境的三节点集群,建议采用以下硬件配置作为基准:
| 节点角色 | CPU核心数 | 内存容量 | 存储空间 | 网络带宽 |
|---|---|---|---|---|
| Master节点 | 8核 | 32GB | 500GB | 10Gbps |
| Worker节点1 | 16核 | 64GB | 2TB | 10Gbps |
| Worker节点2 | 16核 | 64GB | 2TB | 10Gbps |
实际配置应根据业务负载特点进行调整:
- CPU密集型 作业:适当增加每节点核心数
- 内存密集型 作业:扩展内存容量并配置合理的off-heap内存
- IO密集型 作业:考虑使用SSD或NVMe存储
1.2 系统环境配置
所有节点需确保一致的运行环境:
# 检查并安装基础依赖
sudo yum install -y epel-release
sudo yum install -y java-11-openjdk-devel openssl ntp pdsh sshpass
# 配置主机名解析(所有节点执行)
cat <<EOF | sudo tee -a /etc/hosts
192.168.1.101 spark-master
192.168.1.102 spark-worker1
192.168.1.103 spark-worker2
EOF
# 配置SSH免密登录(在master节点执行)
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
ssh-copy-id spark-master
ssh-copy-id spark-worker1
ssh-copy-id spark-worker2
# 验证时钟同步
sudo systemctl enable ntpd
sudo systemctl start ntpd
ntpq -p
1.3 软件版本选择
本次部署选用经过充分验证的稳定版本组合:
- Spark 3.5.1 :2024年发布的最新稳定版,包含AQE(自适应查询执行)优化
- Hadoop 3.3.6 :支持EC(擦除编码)和S3A连接器增强
- OpenJDK 11 :LTS版本,提供长期支持
下载地址:
wget https://archive.apache.org/dist/spark/spark-3.5.1/spark-3.5.1-bin-hadoop3.tgz
wget https://archive.apache.org/dist/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz
2. Hadoop集群部署与配置
2.1 基础安装步骤
在所有节点执行以下安装流程:
# 解压Hadoop安装包
tar -xzf hadoop-3.3.6.tar.gz -C /opt
ln -s /opt/hadoop-3.3.6 /opt/hadoop
# 配置环境变量
cat <<'EOF' | sudo tee /etc/profile.d/hadoop.sh
export HADOOP_HOME=/opt/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HADOOP_LOG_DIR=/var/log/hadoop
EOF
source /etc/profile.d/hadoop.sh
# 创建必要目录
sudo mkdir -p /var/log/hadoop
sudo chown -R $(whoami):$(whoami) /var/log/hadoop
mkdir -p $HADOOP_HOME/data/{namenode,datanode}
2.2 核心配置文件优化
编辑 $HADOOP_CONF_DIR 下的关键配置文件:
core-site.xml :
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://spark-master:8020</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop/data/tmp</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
</configuration>
hdfs-site.xml :
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///opt/hadoop/data/namenode</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///opt/hadoop/data/datanode</value>
</property>
<property>
<name>dfs.blocksize</name>
<value>256m</value>
</property>
<property>
<name>dfs.namenode.handler.count</name>
<value>100</value>
</property>
</configuration>
workers文件 :
spark-worker1
spark-worker2
2.3 集群初始化与启动
在Master节点执行以下命令:
# 格式化HDFS(首次部署执行)
hdfs namenode -format
# 启动HDFS集群
start-dfs.sh
# 验证服务状态
hdfs dfsadmin -report
预期输出应显示两个活跃的DataNode节点。通过Web UI可访问NameNode状态页面:
http://spark-master:9870
3. Spark Standalone集群部署
3.1 Spark安装与基础配置
在所有节点执行以下步骤:
# 解压Spark安装包
tar -xzf spark-3.5.1-bin-hadoop3.tgz -C /opt
ln -s /opt/spark-3.5.1-bin-hadoop3 /opt/spark
# 配置环境变量
cat <<'EOF' | sudo tee /etc/profile.d/spark.sh
export SPARK_HOME=/opt/spark
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
export PYSPARK_PYTHON=/usr/bin/python3
EOF
source /etc/profile.d/spark.sh
3.2 集群配置文件定制
spark-env.sh (Master节点配置):
cp $SPARK_HOME/conf/spark-env.sh.template $SPARK_HOME/conf/spark-env.sh
cat <<EOF >> $SPARK_HOME/conf/spark-env.sh
export SPARK_MASTER_HOST=spark-master
export SPARK_MASTER_PORT=7077
export SPARK_WORKER_CORES=16
export SPARK_WORKER_MEMORY=48G
export SPARK_WORKER_INSTANCES=1
export SPARK_DAEMON_MEMORY=4G
export SPARK_LOCAL_DIRS=/opt/spark/work
export SPARK_LOG_DIR=/var/log/spark
export SPARK_PID_DIR=/var/run/spark
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
EOF
workers文件 :
spark-worker1
spark-worker2
3.3 集群服务管理
在Master节点启动集群:
# 启动Spark集群
$SPARK_HOME/sbin/start-all.sh
# 验证节点状态
$SPARK_HOME/bin/spark-shell --master spark://spark-master:7077
通过Web UI可查看集群状态:
http://spark-master:8080
4. 高级配置与调优
4.1 网络与安全配置
SSL加密配置 :
# 生成密钥库
keytool -keystore spark-keystore.jks -alias spark -validity 365 -genkey -keyalg RSA
# 配置spark-defaults.conf
spark.ssl.enabled true
spark.ssl.keyPassword yourpassword
spark.ssl.keyStore /path/to/spark-keystore.jks
spark.ssl.keyStorePassword yourpassword
spark.ssl.trustStore /path/to/spark-truststore.jks
spark.ssl.trustStorePassword yourpassword
4.2 资源调度优化
动态资源分配配置 :
spark.dynamicAllocation.enabled=true
spark.dynamicAllocation.initialExecutors=2
spark.dynamicAllocation.minExecutors=2
spark.dynamicAllocation.maxExecutors=10
spark.shuffle.service.enabled=true
4.3 监控与日志聚合
Prometheus监控集成 :
# 配置metrics.properties
*.sink.prometheusServlet.class=org.apache.spark.metrics.sink.PrometheusServlet
*.sink.prometheusServlet.path=/metrics/prometheus
master.sink.prometheusServlet.port=4040
worker.sink.prometheusServlet.port=4041
日志聚合配置 :
<!-- 在spark-defaults.conf中配置 -->
spark.eventLog.enabled true
spark.eventLog.dir hdfs://spark-master:8020/spark-logs
spark.history.fs.logDirectory hdfs://spark-master:8020/spark-logs
启动历史服务器:
$SPARK_HOME/sbin/start-history-server.sh
5. 集群验证与维护
5.1 健康检查脚本
创建 cluster_health_check.sh 脚本:
#!/bin/bash
# 检查HDFS状态
hdfs dfsadmin -report | grep -i "Live datanodes"
# 检查Spark Worker状态
curl -s http://spark-master:8080 | grep -A5 "Workers"
# 检查资源使用情况
pdsh -w spark-worker1,spark-worker2 "free -h && df -h"
# 检查服务进程
pdsh -w spark-master,spark-worker1,spark-worker2 "jps"
5.2 常见问题排查指南
Worker节点无法注册 :
- 检查防火墙设置:
sudo firewall-cmd --list-ports - 验证网络连通性:
pdsh -w spark-worker1,spark-worker2 ping -c 3 spark-master - 检查Worker日志:
tail -100 /var/log/spark/spark-*-worker-*.log
任务执行失败 :
# 检查Executor日志
hdfs dfs -ls /spark-logs/*/executors
# 分析GC情况
$SPARK_HOME/bin/spark-submit --conf "spark.executor.extraJavaOptions=-XX:+PrintGCDetails"
5.3 版本升级策略
-
滚动升级步骤 :
- 逐个停止Worker节点
- 更新软件包并验证配置
- 重新加入集群
- 最后升级Master节点
-
回退方案 :
- 保留旧版本安装目录
- 维护配置版本控制
- 准备快速回退脚本
更多推荐




所有评论(0)