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节点无法注册

  1. 检查防火墙设置: sudo firewall-cmd --list-ports
  2. 验证网络连通性: pdsh -w spark-worker1,spark-worker2 ping -c 3 spark-master
  3. 检查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 版本升级策略

  1. 滚动升级步骤

    • 逐个停止Worker节点
    • 更新软件包并验证配置
    • 重新加入集群
    • 最后升级Master节点
  2. 回退方案

    • 保留旧版本安装目录
    • 维护配置版本控制
    • 准备快速回退脚本
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐