Hadoop 3.3.3 集群搭建保姆级避坑指南:从CentOS7配置到WordCount测试一气呵成
Hadoop 3.3.3 集群搭建实战:从零开始构建高可用分布式环境
第一次接触Hadoop集群部署的新手,往往会在配置环节遇到各种"坑"。本文将从一个实践者的角度,带你完整走通Hadoop 3.3.3完全分布式集群的搭建流程,特别针对CentOS 7环境下容易出错的环节提供解决方案。不同于简单的步骤罗列,我们会深入每个配置项背后的原理,确保你不仅能够成功搭建,还能理解为什么这样做。
1. 环境准备与基础配置
1.1 系统环境检查
在开始前,请确保你已准备好至少三台CentOS 7虚拟机(1主2从),并完成以下基础检查:
# 检查系统版本
cat /etc/redhat-release
# 检查网络连通性
ping -c 4 master
ping -c 4 worker1
ping -c 4 worker2
关键配置项:
| 配置项 | 主节点 | 从节点1 | 从节点2 |
|---|---|---|---|
| 主机名 | master | worker1 | worker2 |
| IP地址 | 192.168.1.101 | 192.168.1.102 | 192.168.1.103 |
| 内存 | ≥4GB | ≥2GB | ≥2GB |
| 磁盘 | ≥50GB | ≥30GB | ≥30GB |
提示:生产环境建议从节点配置与主节点相同,避免资源不足问题。
1.2 JDK安装与配置
Hadoop 3.3.3需要Java 8环境,以下是详细安装步骤:
# 解压JDK到指定目录
tar -zxvf jdk-8u162-linux-x64.tar.gz -C /usr/local/src/
# 配置环境变量
echo 'export JAVA_HOME=/usr/local/src/jdk1.8.0_162' >> /etc/profile
echo 'export PATH=$PATH:$JAVA_HOME/bin' >> /etc/profile
source /etc/profile
# 验证安装
java -version
常见问题排查:
- 如果
java -version报错,检查JAVA_HOME路径是否正确 - 确保所有节点使用相同版本的JDK
2. 集群基础服务配置
2.1 网络与安全设置
Hadoop集群对网络环境有严格要求,需要完成以下配置:
# 关闭防火墙(所有节点)
systemctl stop firewalld
systemctl disable firewalld
# 设置主机名(分别在各节点执行)
hostnamectl set-hostname master # 主节点
hostnamectl set-hostname worker1 # 从节点1
hostnamectl set-hostname worker2 # 从节点2
# 配置主机名解析(所有节点相同)
cat >> /etc/hosts <<EOF
192.168.1.101 master
192.168.1.102 worker1
192.168.1.103 worker2
EOF
2.2 SSH免密登录配置
集群节点间的SSH免密登录是Hadoop正常工作的基础:
# 生成密钥对(所有节点)
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
# 主节点配置免密登录到所有节点
ssh-copy-id master
ssh-copy-id worker1
ssh-copy-id worker2
# 测试免密登录
ssh worker1 'hostname' # 应返回worker1
注意:如果提示"Permission denied",检查
/etc/ssh/sshd_config中PasswordAuthentication是否为yes
3. Hadoop核心配置详解
3.1 Hadoop安装与环境变量
# 解压Hadoop安装包
tar -zxvf hadoop-3.3.3.tar.gz -C /usr/local/src/
# 配置环境变量
echo 'export HADOOP_HOME=/usr/local/src/hadoop-3.3.3' >> /etc/profile
echo 'export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin' >> /etc/profile
source /etc/profile
# 验证安装
hadoop version
3.2 关键配置文件修改
进入$HADOOP_HOME/etc/hadoop目录,修改以下文件:
hadoop-env.sh:
export JAVA_HOME=/usr/local/src/jdk1.8.0_162
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
core-site.xml:
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/src/hadoop-3.3.3/tmp</value>
</property>
</configuration>
hdfs-site.xml (重点配置):
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/usr/local/src/hadoop-3.3.3/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/usr/local/src/hadoop-3.3.3/data</value>
</property>
<property>
<name>dfs.namenode.http-address</name>
<value>master:9870</value>
</property>
</configuration>
workers文件 (原slaves文件):
worker1
worker2
3.3 配置文件分发
将配置好的Hadoop分发到所有从节点:
cd /usr/local/src
scp -r hadoop-3.3.3 worker1:$PWD
scp -r hadoop-3.3.3 worker2:$PWD
scp /etc/profile worker1:/etc/
scp /etc/profile worker2:/etc/
# 在从节点上执行
source /etc/profile
4. 集群启动与验证
4.1 初始化与启动
# 格式化NameNode(仅在首次启动时执行)
hdfs namenode -format
# 启动HDFS
start-dfs.sh
# 启动YARN
start-yarn.sh
# 检查进程
jps
预期输出:
- 主节点应有:NameNode、ResourceManager、SecondaryNameNode
- 从节点应有:DataNode、NodeManager
4.2 Web界面验证
访问以下URL验证集群状态:
- HDFS: http://master:9870
- YARN: http://master:8088
Hadoop 3.x与2.x的端口变化:
- HDFS Web UI端口从50070改为9870
- SecondaryNameNode端口从50090改为9868
4.3 WordCount测试案例
# 创建测试文件
echo -e "hadoop hdfs hdfs\nhadoop mapreduce\nmapreduce hadoop\nhdfs hadoop\nyarn yarn" > words.txt
# HDFS操作
hdfs dfs -mkdir /input
hdfs dfs -put words.txt /input/
# 运行WordCount
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.3.jar wordcount /input /output
# 查看结果
hdfs dfs -cat /output/part-r-00000
预期输出:
hadoop 4
hdfs 3
mapreduce 2
yarn 2
5. 常见问题排查
在实际部署中,你可能会遇到以下典型问题:
-
DataNode无法启动
- 检查
dfs.datanode.data.dir目录权限 - 确保所有节点的Hadoop版本一致
- 删除
hadoop.tmp.dir目录后重新格式化
- 检查
-
Web界面无法访问
- 确认防火墙已关闭
- 检查
dfs.namenode.http-address配置 - 验证网络连通性
-
YARN任务提交失败
- 检查
mapreduce.framework.name设为yarn - 验证NodeManager日志中的资源分配情况
- 检查
-
HDFS写操作权限拒绝
- 临时解决方案:
hdfs dfs -chmod 777 / - 生产环境应配置正确的用户和组权限
- 临时解决方案:
# 常用诊断命令
hdfs dfsadmin -report # 查看集群状态
yarn node -list # 查看YARN节点状态
hdfs dfs -ls / # 检查HDFS根目录
6. 性能优化建议
完成基础部署后,可以考虑以下优化措施:
配置优化:
- 调整
yarn.nodemanager.resource.memory-mb匹配节点物理内存 - 设置合理的
mapreduce.map.memory.mb和mapreduce.reduce.memory.mb - 根据数据量调整
dfs.replication因子
硬件建议:
- 为NameNode配置RAID-1或RAID-10存储
- 生产环境建议每个节点至少16GB内存
- 使用SSD存储提升I/O性能
监控方案:
- 启用Hadoop自带的JMX监控
- 考虑集成Prometheus+Grafana监控栈
- 定期检查HDFS磁盘使用情况
<!-- yarn-site.xml资源限制示例 -->
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>8192</value> <!-- 8GB内存 -->
</property>
经过完整测试后,你的Hadoop 3.3.3集群已经可以用于开发和学习了。记得定期备份重要数据,特别是NameNode的元数据目录。在实际项目中,建议进一步研究HDFS HA、YARN资源调度等高级特性。
更多推荐
所有评论(0)