hadoop常见问题 no datanode to stop

这篇文章比较好,记录一下。方便以后查找。

☆☆☆☆☆☆但是不管怎么样,重点还是要多看日志和报错信息!☆☆☆☆☆☆

现象:当停止Hadoop的时候发现no datanode to stop的信息。

原因1:
每次namenode format会重新创建一个namenodeId,而tmp/dfs/data下包含了上次format下的id,namenode format清空了namenode下的数据,但是没有清空datanode下的数据,导致启动时失败,所要做的就是每次fotmat前,清空tmp一下的所有目录。

针对原因一,这里有两种解决方案:

方案一:
1.删除“/usr/hadoop/tmp”里面的内容

bash rm -rf /usr/hadoop/tmp/*

2.删除“/tmp”下以“hadoop”开头的文件

bash rm -rf /tmp/hadoop*

3.重新格式化hadoop bash hadoop namenode -format

4.启动hadoop

bash start-all.sh

这种方案的缺点是原来集群上的重要数据全没有了。因此推荐第二种方案:

方案二:
1.修改每个Slave的namespaceID,使其与Master的namespaceID一致。

或者
2.修改Master的namespaceID使其与Slave的namespaceID一致。

Master的“namespaceID”位于“/usr/hadoop/tmp/dfs/name/current/VERSION”文件里面,Slave的“namespaceID”位于“/usr/hadoop/tmp/dfs/data/current/VERSION”文件里面。

原因2:
问题的原因是hadoop在stop的时候依据的是datanode上的mapred和dfs进程号。而默认的进程号保存在/tmp下,linux 默认会每隔一段时间(一般是一个月或者7天左右)去删除这个目录下的文件。因此删掉hadoop-hadoop-jobtracker.pid和hadoop-hadoop-namenode.pid两个文件后,namenode自然就找不到datanode上的这两个进程了。

在配置文件hadoop_env.sh中配置export HADOOP_PID_DIR可以解决这个问题。

方法:
在配置文件中,HADOOP_PID_DIR的默认路径是“/var/hadoop/pids”,我们手动在“/var”目录下创建一个“hadoop”文件夹,若已存在就不用创建,记得用chown将权限分配给hadoop用户。然后在出错的Slave上杀死Datanode和Tasktracker的进程(kill
-9 进程号),再重新start-all.sh,stop-all.sh时发现没有“no datanode to stop”出现,说明问题已经解决。

参考:http://blog.sina.com.cn/s/blog_6d932f2a0101fsxn.html

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值