Hadoop-2.7.6全分布式部署core-site.xml配置异常及节点超时问题求助
我之前在搭建Hadoop集群时也碰到过类似的组合问题,给你整理几个实用的排查和解决方向:
一、先搞定InvalidProtocolBufferException错误
这个报错本质是Protobuf协议序列化/反序列化不兼容,或者节点间的RPC通信链路出了问题,结合你的场景优先检查这几点:
确保所有节点的Hadoop版本完全一致
哪怕是小版本差异(比如2.7.5和2.7.6),依赖的Protobuf版本都可能不一样,直接导致协议不兼容。你可以在每个节点上执行hadoop version确认版本号,要是有不一致的,重新部署相同版本的Hadoop。验证端口连通性与配置正确性
你自定义了32222端口,先在每个从节点上测试能不能连通namenode的这个端口:# 用telnet测试 telnet namenode 32222 # 或者用nc命令(更简洁) nc -zv namenode 32222如果连不通,先检查namenode的防火墙是否开放了32222端口(比如CentOS系统可以执行
firewall-cmd --add-port=32222/tcp --permanent,然后重启防火墙);同时确认所有节点的core-site.xml里,fs.default.name的配置完全一致,端口号、主机名不能有拼写错误。清理临时文件并重新格式化namenode(谨慎操作)
如果之前有过版本切换或者配置修改,可能残留了旧的序列化数据:- 先停止所有Hadoop服务:
stop-all.sh - 删除所有节点上Hadoop的临时目录(就是
hadoop.tmp.dir配置的路径,默认是/tmp/hadoop-${user}) - 在namenode上重新格式化:
hdfs namenode -format(注意:格式化会清空HDFS上的所有数据,有重要数据一定要先备份) - 重新启动集群:
start-all.sh
- 先停止所有Hadoop服务:
二、解决从节点超时问题
这个问题通常和节点间通信、配置一致性、资源限制有关,结合上面的Protobuf错误,大概率是通信层面的问题,按以下步骤排查:
确认SSH免密登录是否完全配置到位
namenode到每个slave节点,以及slave节点之间都要能免密登录。测试方法:在namenode上执行ssh slave1和ssh slave2,看是否不需要输入密码就能直接登录。如果不行,重新生成密钥对,把公钥复制到所有从节点的~/.ssh/authorized_keys里,还要确保~/.ssh目录权限是700,authorized_keys权限是600。检查从节点的Hadoop配置文件一致性
所有节点的core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml必须完全一致,尤其是:core-site.xml里的fs.default.name必须和namenode一致,指向hdfs://namenode:32222hdfs-site.xml里的dfs.namenode.rpc-address建议显式配置为namenode:32222(默认会继承fs.default.name的端口,但显式配置更稳妥)
调整超时时间参数
如果是网络延迟导致的超时,可以修改hdfs-site.xml里的参数:<property> <name>dfs.namenode.handler.count</name> <value>20</value> <!-- 增大处理线程数,应对多节点连接请求 --> </property> <property> <name>dfs.client.socket-timeout</name> <value>300000</value> <!-- 把超时时间改成5分钟,默认是30秒 --> </property> <property> <name>dfs.datanode.socket.timeout</name> <value>300000</value> </property>修改后同步到所有节点,重启集群即可。
检查节点资源情况
从节点内存不足也可能导致超时,执行free -h查看内存使用情况,如果可用内存太少,要么关闭其他占用内存的服务,要么调整Hadoop的内存配置(比如yarn-site.xml里的yarn.nodemanager.resource.memory-mb参数,不要超过节点可用内存的80%)。
建议的排查顺序
- 先确认所有节点的Hadoop版本和配置文件完全一致
- 测试节点间的SSH免密登录和端口连通性
- 清理临时文件并重新格式化namenode(备份数据后操作)
- 调整超时参数和资源配置
内容的提问来源于stack exchange,提问作者withkikoz

