Hadoop 3.1.3 集群部署实战:从零搭建高可用分布式环境
1. 环境准备:三台虚拟机的标准化配置
搭建Hadoop集群的第一步是准备三台配置一致的虚拟机。我建议使用CentOS 7或Ubuntu 18.04 LTS作为操作系统,这两个版本在Hadoop社区的支持度最高。每台虚拟机建议配置4GB内存和50GB硬盘空间,这个配置可以满足中小规模数据处理需求。如果只是学习测试,可以适当降低到2GB内存,但生产环境建议至少8GB起步。
安装基础工具包时,很多人会忽略时区同步的问题。我遇到过因为各节点时间不同步导致YARN任务调度失败的案例,所以务必执行:
sudo yum install -y ntp
sudo systemctl start ntpd
sudo systemctl enable ntpd
网络配置是新手最容易出错的地方。除了修改ifcfg-ens33文件外,还需要检查网络适配器是否设置为桥接模式。曾经有学员因为使用NAT模式导致节点间通信异常,排查了半天才发现是网络模式问题。配置静态IP时,建议保留一个IP段用于后续扩容,比如192.168.43.150-192.168.43.200。
2. 系统环境调优:那些容易被忽视的细节
主机名映射看似简单,但跨平台访问时需要特别注意。Windows系统的hosts文件需要管理员权限才能修改,我习惯用Notepad++以管理员身份打开编辑。Linux下的/etc/hosts文件修改后,建议执行ping hadoop002测试连通性,避免因为拼写错误导致后续步骤失败。
防火墙管理有个坑:禁用firewalld后,某些云主机可能需要额外关闭Security-Enhanced Linux。执行:
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
创建/opt/software目录时,建议统一使用root用户操作,避免权限问题。我遇到过因为用普通用户创建目录,导致后续Hadoop服务启动失败的案例。正确的做法是:
sudo mkdir -p /opt/software
sudo chmod -R 755 /opt
3. JDK安装:版本选择的玄机
虽然Hadoop 3.x支持JDK 8到JDK 11,但我强烈建议使用JDK 8u201这个特定版本。新版本的JDK可能会遇到兼容性问题,比如JDK 11需要额外配置才能正常使用G1垃圾回收器。卸载旧JDK时,用rpm -qa | grep java命令可能会漏掉一些组件,保险起见可以手动检查/usr/lib/jvm目录。
环境变量配置有个技巧:在/etc/profile.d/下创建单独的脚本文件,比如java.sh,这样更容易管理多个环境变量。配置完成后,不要只是source一下,最好新开终端验证:
echo $JAVA_HOME
which java
java -version
这三个命令都能正确输出才算配置成功。
4. Hadoop安装与核心配置解析
解压Hadoop安装包时,注意检查tar.gz文件是否完整。我遇到过因为网络中断导致压缩包损坏的情况,可以用tar -tzf hadoop-3.1.3.tar.gz | head快速检查。环境变量PATH的配置顺序很重要,Hadoop的bin和sbin目录应该放在系统路径前面。
SSH免密登录是集群管理的基础。生成密钥对时,如果提示"Enter passphrase",直接回车设为空密码。有个常见错误是只配置了hadoop001到其他节点的免密登录,却忘了配置反向登录。应该在所有节点上都执行:
ssh-keygen -t rsa
ssh-copy-id hadoop001
ssh-copy-id hadoop002
ssh-copy-id hadoop003
5. 关键配置文件深度解读
core-site.xml中的fs.defaultFS决定了整个HDFS的访问入口。生产环境中建议使用域名而非IP,方便后续迁移。hadoop.tmp.dir指定的目录要有足够空间,我一般单独挂载一个大容量磁盘专门存放临时文件。
hdfs-site.xml的配置需要特别注意副本数设置:
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
这个值应该小于等于DataNode数量,否则会导致块无法正常复制。
yarn-site.xml的内存配置需要根据实际硬件调整。对于4GB内存的虚拟机,建议:
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>3072</value>
</property>
保留1GB给系统进程使用。
6. 集群启动与验证:避开那些坑
首次启动前格式化NameNode时,一定要确保所有节点都没有残留数据。我习惯先执行:
rm -rf /opt/software/hadoop-3.1.3/data/*
rm -rf /opt/software/hadoop-3.1.3/logs/*
启动HDFS时如果报错"Unable to load native-hadoop library",需要安装开发工具包:
sudo yum install -y snappy snappy-devel
验证集群状态时,除了Web UI外,还应该运行一个测试作业:
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar pi 10 10
这个命令会计算π的近似值,可以全面检测集群的计算能力。
7. 高可用配置进阶
基础集群搭建完成后,可以考虑配置NameNode高可用。这需要ZooKeeper服务的支持,最少需要三个ZooKeeper节点。在hdfs-site.xml中添加:
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2</value>
</property>
ResourceManager的高可用配置相对简单,只需要在yarn-site.xml中设置:
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
8. 日常运维实用技巧
查看HDFS文件系统使用情况:
hdfs dfsadmin -report
平衡DataNode之间的数据分布:
hdfs balancer -threshold 10
查看YARN任务队列:
yarn application -list
遇到问题时,首先检查日志文件。NameNode日志在$HADOOP_HOME/logs/hadoop--namenode-.log,ResourceManager日志在yarn--resourcemanager-.log。我习惯用tail -f实时监控日志变化。
更多推荐
所有评论(0)