保姆级避坑指南:Ubuntu系统下Hadoop HA集群搭建,我踩过的那些SSH和配置文件的“坑”
Ubuntu下Hadoop HA集群搭建那些教科书不会告诉你的实战陷阱第一次在Ubuntu上搭建Hadoop HA集群时我天真地以为照着官方文档就能顺利跑起来。直到SSH连接莫名其妙失败、JournalNode权限报错刷屏、ZKFC死活不启动时才明白为什么有人说大数据生态是配置地狱。这篇文章不会重复那些随处可查的基础步骤而是聚焦于真正会导致你熬夜调试的七个致命坑点每个问题都附带经过生产环境验证的解决方案。1. SSH免密登录你以为配置对了可能还差这三步几乎所有教程都会告诉你用ssh-keygen生成密钥对然后把公钥追加到authorized_keys。但没人提醒你# 关键检查点每台机器执行 stat ~/.ssh # 确认权限为700 stat ~/.ssh/authorized_keys # 确认权限为600 sudo vi /etc/ssh/sshd_config # 检查PasswordAuthentication是否为no最容易忽略的陷阱如果authorized_keys权限不对SSH会静默失败Ubuntu默认的sshd_config可能仍允许密码登录导致HA切换时卡在认证环节主机名解析失败时错误信息可能伪装成密钥认证问题提示用ssh -vvv userhost查看详细调试信息重点关注Authentication succeeded是否出现我曾遇到一个诡异现象手动SSH正常但Hadoop进程间通信失败。最终发现是/etc/hosts文件里同时存在IPv4和IPv6地址解析导致ZKFC连接超时。正确的配置应该像这样# /etc/hosts 规范示例 192.168.1.101 master1 192.168.1.102 master2 192.168.1.103 slave012. JournalNode数据目录权限问题的花式死法当你看到这样的报错时java.io.IOException: Cannot create directory /usr/local/hadoop/data/journal/data千万别急着用chmod 777粗暴解决。正确的权限体系应该是目录所属用户权限必要性/usr/local/hadoophadoop755避免sudo运行data/journalhadoop755JournalNode需要写dfs/namehadoop700NameNode元数据安全dfs/datahadoop700DataNode块存储安全血泪教训用hadoop用户创建所有目录避免权限混杂首次启动前执行sudo rm -rf /usr/local/hadoop/tmp # 清除旧单节点残留 hdfs namenode -format # 仅在主NameNode执行检查日志中的StorageDirectory错误grep -A5 StorageDirectory /usr/local/hadoop/logs/hadoop-*-namenode-*.log3. XML配置文件隐藏的语法炸弹以下这个hdfs-site.xml配置看起来没问题实际会引发ZKFC启动失败!-- 错误示例 -- property namedfs.ha.fencing.methods/name valuesshfence shell(/bin/true) /value !-- 注意多余空格 -- /property高危检查清单所有XML标签必须闭合属性值用双引号避免中文标点符号特别是复制网页代码时ZooKeeper地址列表不能有空格!-- 正确 -- valuemaster1:2181,master2:2181,slave01:2181/value !-- 错误 -- valuemaster1:2181, master2:2181, slave01:2181/value用这个命令验证配置有效性xmllint --noout /usr/local/hadoop/etc/hadoop/*.xml4. 端口冲突看不见的杀手Hadoop HA集群需要开放这些关键端口端口服务冲突症状9000NameNode RPCConnection refused8485JournalNode编辑日志同步失败2181ZooKeeperZKFC无法连接9870NameNode HTTPWebUI打不开快速检测端口占用# 查看已用端口 netstat -tulnp | grep -E 9000|8485|2181|9870 # 杀死占用进程谨慎操作 sudo kill -9 $(lsof -ti:9000)特别提醒Ubuntu的ufw防火墙会默默拦截这些端口建议测试时暂时禁用sudo ufw disable # 生产环境应精确放行 sudo ufw allow 9000/tcp5. 启动顺序错一步全盘皆输正确的启动序列应该是ZooKeeper集群所有节点zkServer.sh start zkServer.sh status # 确认一个leader两个followerJournalNode所有节点hadoop-daemon.sh start journalnode jps | grep JournalNode # 确认进程存在主NameNode仅master1hdfs namenode -format # 仅首次执行 hadoop-daemon.sh start namenode备NameNode仅master2hdfs namenode -bootstrapStandby # 同步元数据 hadoop-daemon.sh start namenodeDataNode所有工作节点hadoop-daemon.sh start datanodeZKFC两个NameNodehdfs zkfc -formatZK # 仅首次执行 hadoop-daemon.sh start zkfc致命错误先启动ZKFC再启动JournalNode会导致脑裂。如果启动失败必须按顺序彻底清理# 停止所有服务 stop-dfs.sh zkServer.sh stop # 清除临时文件所有节点 rm -rf /usr/local/hadoop/tmp/* rm -rf /usr/local/hadoop/dfs/* rm -rf /usr/local/hadoop/logs/* # 然后重新按顺序启动6. Web UI异常浏览器不会告诉你的真相当NameNode Web界面显示异常时按这个流程排查检查HTTP端口是否监听curl -I http://master1:9870查看浏览器控制台错误F12打开开发者工具查看Console和Network标签页的红色错误常见问题解决空白页面可能是dfs.webhdfs.enabled未设为trueMissing静态资源检查hadoop.http.staticuser.user是否设为hadoopActive/Standby状态不更新刷新间隔设为5秒property namedfs.ha.health-check.interval/name value5000/value /property7. 故障转移测试你以为成功了可能是个假象手动触发故障转移后hdfs haadmin -failover nn1 nn2必须验证以下三点才算真正成功状态确认hdfs haadmin -getServiceState nn1 hdfs haadmin -getServiceState nn2数据写入测试hdfs dfs -touchz /test_failover hdfs dfs -ls /自动恢复测试# 杀死当前Active节点 kill -9 $(jps | grep NameNode | awk {print $1}) # 30秒内Standby应自动切换如果测试失败检查ZKFC日志中的关键信息tail -100 /usr/local/hadoop/logs/hadoop-*-zkfc-*.log | grep -i failover
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2456193.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!