Hadoop与Spark独立集群部署完整教程
环境准备与系统配置
构建分布式计算平台需要统一的软硬件基础。本文基于三台虚拟机构建Hadoop与Spark协同工作的集群,采用Standalone模式部署Spark,并与Hadoop生态系统集成。
节点角色分配
| 角色 | 主机名 | IP地址 | 核心服务 |
|---|---|---|---|
| 主控节点 | vm01 | 192.168.1.101 | NameNode, ResourceManager, Spark Master |
| 工作节点 | vm02 | 192.168.1.102 | DataNode, NodeManager, Spark Worker |
| 工作节点 | vm03 | 192.168.1.103 | DataNode, NodeManager, Spark Worker |
软件栈版本
- 操作系统:CentOS Linux 7 (Core)
- JDK:OpenJDK 1.8.0_291
- Hadoop:3.3.1
- Spark:3.1.2(适配Hadoop 3.2+)
全局前置设置
在所有机器上执行以下初始化操作:
设定主机标识
# 在各节点分别运行
hostnamectl set-hostname vm01 # 主节点
hostnamectl set-hostname vm02 # 从节点
hostnamectl set-hostname vm03 # 从节点
配置网络映射
echo "
192.168.1.101 vm01
192.168.1.102 vm02
192.168.1.103 vm03" >> /etc/hosts
禁用安全限制组件
# 停止并关闭防火墙
systemctl stop firewalld && systemctl disable firewalld
# 关闭SELinux(需重启生效)
sed -i 's/SELINUX=enforcing/SELINUX=permissive/g' /etc/selinux/config
setenforce 0
安装Java运行环境
tar -zxf jdk-8u291-linux-x64.tar.gz -C /usr/local/
ln -s /usr/local/jdk1.8.0_291 /usr/local/jdk
echo 'export JAVA_HOME=/usr/local/jdk
export PATH=$JAVA_HOME/bin:$PATH' >> /etc/profile
source /etc/profile
建立SSH无密码通信
仅在主节点操作:
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
ssh-copy-id vm01
ssh-copy-id vm02
ssh-copy-id vm03
Hadoop分布式文件系统搭建
部署Hadoop二进制包
tar -zxf hadoop-3.3.1.tar.gz -C /opt/
ln -s /opt/hadoop-3.3.1 /opt/hadoop
添加系统路径变量
echo 'export HADOOP_HOME=/opt/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin' >> /etc/profile
source /etc/profile
核心配置文件调整
运行时环境定义(hadoop-env.sh)
export JAVA_HOME=/usr/local/jdk
全局参数设置(core-site.xml)
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://vm01:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop/temp</value>
</property>
</configuration>
数据存储配置(hdfs-site.xml)
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.dir</name>
<value>/opt/hadoop/namenode</value>
</property>
<property>
<name>dfs.datanode.dir</name>
<value>/opt/hadoop/datanode</value>
</property>
</configuration>
资源调度配置(yarn-site.xml)
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>vm01</value>
</property>
</configuration>
MapReduce框架绑定(mapred-site.xml)
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
工作节点列表(workers)
vm02
vm03
集群分发与启动
scp -r /opt/hadoop vm02:/opt/
scp -r /opt/hadoop vm03:/opt/
# 格式化命名节点
hdfs namenode -format
# 启动HDFS和YARN
start-dfs.sh
start-yarn.sh
状态验证
jps
# 预期输出:
# vm01: NameNode, ResourceManager, SecondaryNameNode
# vm02/vm03: DataNode, NodeManager
# Web界面访问:
# HDFS管理页:http://192.168.1.101:9870
# YARN监控台:http://192.168.1.101:8088
Spark独立集群集成
安装Spark引擎
tar -zxf spark-3.1.2-bin-hadoop3.2.tgz -C /opt/
ln -s /opt/spark-3.1.2-bin-hadoop3.2 /opt/spark
配置环境变量
echo 'export SPARK_HOME=/opt/spark
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin' >> /etc/profile
source /etc/profile
Spark运行参数设置
环境脚本(spark-env.sh)
cp $SPARK_HOME/conf/spark-env.sh.template $SPARK_HOME/conf/spark-env.sh
cat > $SPARK_HOME/conf/spark-env.sh << EOF
export JAVA_HOME=/usr/local/jdk
export HADOOP_CONF_DIR=/opt/hadoop/etc/hadoop
export SPARK_MASTER_HOST=vm01
export SPARK_MASTER_PORT=7077
export SPARK_WORKER_CORES=2
export SPARK_WORKER_MEMORY=2g
EOF
工作实例列表(workers)
cp $SPARK_HOME/conf/workers.template $SPARK_HOME/conf/workers
echo -e "vm02\nvm03" > $SPARK_HOME/conf/workers
跨节点复制与启动
scp -r /opt/spark vm02:/opt/
scp -r /opt/spark vm03:/opt/
$SPARK_HOME/sbin/start-master.sh
$SPARK_HOME/sbin/start-workers.sh
运行状态检查
jps
# vm01应包含:Master进程
# vm02/vm03应包含:Worker进程
# 访问Spark控制台:http://192.168.1.101:8080
功能测试案例
HDFS读写验证
hdfs dfs -mkdir /input
hdfs dfs -put $HADOOP_HOME/LICENSE.txt /input/
hdfs dfs -cat /input/LICENSE.txt | head -5
YARN任务提交测试
yarn jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar pi 3 4
Spark计算验证
spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://vm01:7077 \
$SPARK_HOME/examples/jars/spark-examples_2.12-*.jar 8
典型故障排查
- 主节点无法识别子节点:确认
workers文件内容正确且无多余空格 - 端口冲突或连接失败:检查防火墙策略及SELinux状态
- 内存溢出异常:调整
SPARK_WORKER_MEMORY或yarn.nodemanager.resource.memory-mb参数 - 日志定位问题:查看
$HADOOP_HOME/logs和$SPARK_HOME/logs目录下的输出信息
常用启停指令汇总
# Hadoop全量启停
start-dfs.sh && start-yarn.sh
stop-yarn.sh && stop-dfs.sh
# Spark集群控制
$SPARK_HOME/sbin/start-all.sh
$SPARK_HOME/sbin/stop-all.sh