Hadoop完全分布式集群搭建实战指南
1. Hadoop完全分布式环境搭建概述
Hadoop作为Apache基金会旗下的开源分布式计算框架,已经成为大数据处理领域的事实标准。完全分布式模式是Hadoop在生产环境中的标准部署方式,它能够充分发挥分布式计算的威力,实现真正的水平扩展。对于零基础的学习者来说,搭建一个完全分布式的Hadoop集群是掌握大数据技术的重要第一步。
2. 环境准备与规划
2.1 硬件需求
建议至少准备3台物理机或虚拟机作为集群节点:
- 1台作为NameNode和JobTracker(主节点)
- 2台作为DataNode和TaskTracker(从节点) 每台机器建议配置:
- 4核CPU
- 8GB内存
- 100GB存储空间
2.2 软件需求
所有节点需要安装:
- Linux操作系统(推荐CentOS 7或Ubuntu 18.04 LTS)
- Java JDK 1.8(必须使用Oracle JDK或OpenJDK)
- SSH服务(用于节点间通信)
3. 系统配置
3.1 基础环境设置
在所有节点上执行以下操作:
- 配置主机名和hosts文件:
sudo hostnamectl set-hostname node1 # 主节点 sudo hostnamectl set-hostname node2 # 从节点1 sudo hostnamectl set-hostname node3 # 从节点2 # 编辑/etc/hosts文件,添加所有节点的IP和主机名映射 192.168.1.101 node1 192.168.1.102 node2 192.168.1.103 node3- 配置SSH免密登录:
# 在主节点生成密钥 ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa # 将公钥复制到所有节点(包括自己) cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys ssh-copy-id -i ~/.ssh/id_rsa.pub node1 ssh-copy-id -i ~/.ssh/id_rsa.pub node2 ssh-copy-id -i ~/.ssh/id_rsa.pub node33.2 Java环境安装
在所有节点上安装Java:
# 对于CentOS sudo yum install java-1.8.0-openjdk-devel # 对于Ubuntu sudo apt-get install openjdk-8-jdk # 设置JAVA_HOME环境变量 echo 'export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk' >> ~/.bashrc source ~/.bashrc4. Hadoop安装与配置
4.1 下载与解压
在主节点下载并解压Hadoop:
wget https://archive.apache.org/dist/hadoop/core/hadoop-2.10.1/hadoop-2.10.1.tar.gz tar -xzvf hadoop-2.10.1.tar.gz -C /opt/ mv /opt/hadoop-2.10.1 /opt/hadoop4.2 配置环境变量
在所有节点上配置Hadoop环境变量:
echo 'export HADOOP_HOME=/opt/hadoop' >> ~/.bashrc echo 'export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin' >> ~/.bashrc source ~/.bashrc4.3 核心配置文件修改
编辑$HADOOP_HOME/etc/hadoop/目录下的配置文件:
- core-site.xml:
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://node1:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/opt/hadoop/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>/opt/hadoop/hdfs/namenode</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>/opt/hadoop/hdfs/datanode</value> </property> </configuration>- mapred-site.xml:
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</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>node1</value> </property> </configuration>- slaves文件(列出所有从节点):
node2 node35. 集群启动与验证
5.1 格式化HDFS
在主节点执行:
hdfs namenode -format5.2 启动Hadoop集群
在主节点执行:
start-dfs.sh start-yarn.sh5.3 验证集群状态
- 检查进程:
jps # 主节点应显示:NameNode, ResourceManager # 从节点应显示:DataNode, NodeManager- 访问Web UI:
- NameNode: http://node1:50070
- ResourceManager: http://node1:8088
6. 运行测试作业
6.1 创建HDFS目录
hdfs dfs -mkdir /input hdfs dfs -put $HADOOP_HOME/etc/hadoop/*.xml /input6.2 运行MapReduce示例
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep /input /output 'dfs[a-z.]+'6.3 查看结果
hdfs dfs -cat /output/*7. 常见问题与解决方案
7.1 SSH连接问题
如果遇到SSH连接问题,检查以下几点:
- 确保sshd服务正在运行:
sudo systemctl status sshd- 检查防火墙设置:
sudo systemctl stop firewalld(测试环境)- 验证密钥权限:
chmod 600 ~/.ssh/authorized_keys
7.2 节点无法加入集群
- 检查slaves文件配置是否正确
- 查看DataNode日志:
tail -f $HADOOP_HOME/logs/hadoop-*-datanode-*.log - 确保所有节点时间同步:
sudo ntpdate pool.ntp.org
7.3 Web UI无法访问
- 检查相关进程是否运行:
jps - 查看端口监听状态:
netstat -tulnp | grep java - 检查防火墙设置
8. 集群管理与维护
8.1 安全关闭集群
stop-yarn.sh stop-dfs.sh8.2 添加新节点
- 在新节点上重复环境配置步骤
- 将新节点主机名加入slaves文件
- 在新增节点上单独启动DataNode和NodeManager:
hadoop-daemon.sh start datanode yarn-daemon.sh start nodemanager8.3 监控与优化
- 定期检查HDFS使用情况:
hdfs dfsadmin -report- 监控YARN资源使用:
yarn node -list- 调整配置参数:
- 根据硬件配置调整mapreduce.map.memory.mb和mapreduce.reduce.memory.mb
- 根据数据量调整dfs.replication
9. 实际应用建议
- 生产环境建议:
- 使用专用硬件而非虚拟机
- 配置RAID提高数据可靠性
- 设置监控告警系统
- 性能优化技巧:
- 合理设置HDFS块大小(默认为128MB)
- 根据数据特点选择合适压缩格式
- 优化Mapper和Reducer数量
- 数据安全考虑:
- 定期备份NameNode元数据
- 启用HDFS权限控制
- 考虑使用Kerberos认证
10. 学习资源推荐
- 官方文档:
- Hadoop官网:https://hadoop.apache.org
- HDFS架构指南
- MapReduce教程
- 进阶学习:
- YARN资源管理
- HBase、Hive等生态系统组件
- Spark与Hadoop集成
- 实践建议:
- 尝试不同规模的数据集
- 模拟节点故障恢复
- 测试不同配置下的性能表现