Hadoop多集群安装问题:守护进程运行但无法识别数据节点
解决Hadoop 3.0.0多节点集群DataNode不显示存活的问题
兄弟,我搭Hadoop 3.0.0多节点集群的时候也踩过一模一样的坑!NameNode上jps能看到NameNode、SecondaryNameNode、ResourceManager都在跑,但访问http://namenode:9870死活显示0个存活DataNode,给你几个我当时排查解决的关键点:
先确认DataNode的进程状态
先去DataNode节点跑jps看看——如果根本没看到DataNode进程,那就是DataNode没启动起来;如果有进程但WebUI不认,那大概率是身份验证或配置一致性问题。
优先查DataNode日志(最管用!)
直接去DataNode节点的$HADOOP_HOME/logs目录,找hadoop-*-datanode-*.log文件,搜ERROR或者FATAL关键词,常见问题有这几个:
- 集群ID不匹配:NameNode和DataNode的
clusterID不一致,这时候得删掉DataNode的dfs.data.dir目录下的所有文件,然后重新格式化NameNode(注意格式化前要停掉所有Hadoop进程!) - 端口被占用:DataNode默认用9864(HTTP)和50020(数据传输)端口,用
netstat -tulpn | grep 9864或者ss -tulpn | grep 50020检查是不是被其他进程占了
核对所有节点的配置文件一致性
所有节点的这几个配置文件必须完全一致:
core-site.xml:检查fs.defaultFS是不是指向NameNode的正确地址,比如hdfs://你的namenode主机名:9000hdfs-site.xml:确认dfs.replication设置合理(比如你有2个DataNode就设2),dfs.namenode.http-address是namenode主机名:9870,dfs.datanode.http-address是datanode主机名:9864workers文件(Hadoop3.x已经替换了旧的slaves):里面要写所有DataNode的主机名或IP,而且要确保NameNode能通过SSH免密登录这些节点,主机名解析正常(可以在所有节点的/etc/hosts里手动添加IP和主机名的映射)
检查SSH免密和时间同步
- SSH免密登录:在NameNode上执行
ssh datanode主机名 jps,如果要输密码,说明免密没配置好——重新生成密钥对,把公钥拷贝到每个DataNode的~/.ssh/authorized_keys里,还要确保权限正确(~/.ssh是700,authorized_keys是600) - 时间同步:所有节点的系统时间差不能超过几分钟!不然Hadoop的心跳机制会把DataNode判定为死亡。用
ntpdate或者chrony工具同步所有节点的时间就行
重新格式化NameNode的正确步骤
如果之前格式化过NameNode又改了配置/节点,千万别直接重格式化!正确流程是:
- 在所有节点执行
stop-all.sh停掉所有Hadoop进程 - 删除NameNode的
dfs.namenode.name.dir目录下的所有文件 - 删除每个DataNode的
dfs.datanode.data.dir目录下的所有文件 - 在NameNode节点执行
hdfs namenode -format - 重新启动集群
start-all.sh
内容的提问来源于stack exchange,提问作者AKG
相关产品推荐
相关产品推荐

