首页 > 其他 > 详细

由调试hbase引发的hadoop调试历程

时间:2015-03-27 00:53:20      阅读:446      评论:0      收藏:0      [点我收藏+]
  • 刚开始装好hbase后进入shell,输入list,hbase shell报错,关闭掉占用默认端口的一个Java进程,解决。
  • 再次使用hbase shell,又报错,但报错信息不一样:

    ERROR: Can‘t get master address from ZooKeeper; znode data == null  

        查看zookeeper的logs,发现有连接超时后endOfStream异常,我觉得压根Client就没和server连上,于是看了zookeeper的架构。有人说是节点过时了,也就是说现在的节点是很早以前没有关闭的节点,所以连接不上。于是想重启hadoop。结果发现stop-all.sh后几个进程并没有关闭,提示no namenode to close。恍然觉得原来每次关hadoop都没有关成功,这进程该是很久以前的了。kill进程也没有成功,现在在努力解决这个问题。

  • 接下来的步骤不是很记得了,但有几点需要注意的

        一是kevin用户需要被赋予权限(chmod或者chown,一个是赋予权限,一个是将文件的所有者给指定用户),以后要注意用kevin去操作,不要随便就切换到root。linux下的用户权限是一个大问题,要好好研究,很多出错都是权限上的问题导致permission denied或者path/file not found;

    二是有时有些进程kill不掉,以进程1128为例,可以从#kill -pid 1128转换成kill 9 1128,这个kill的威力更大。另外需要知道,进程分为系统进程和用户进程,若在一个用户下kill不掉,切到另一个用户吧(比如root),可能是该用户启动了这个进程,需要它去kill。其实说到底还是用户与权限问题。

  • 正常kill掉几个进程之后,重新开hadoop,除了datanode其他的进程都开了。查看datanode的log,发现以下问题:

   ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.io.IOException: Incompatible namespaceIDs in /tmp/hadoop-kevin/dfs/data: namenode namespaceID = 1234548942; datanode namespaceID = 1169818695
    网上有人说这时候应该将namenode的namespaceID修改为datanode的namespaceID。实际证明这样做是错的,无效,应该datanode的namespaceID服从namenode。毕竟namenode是老大。
    出现这样问题的原因是用多了hadoop namenode -format,这样是有害处的,清空次数多了namenode的namespaceID就会修改了,与下面的namenode的namespaceID就对不上了,需要统一二者。

  • 之前在debug的时候网上有资料说最好修改一下hdfs.dir的默认的地址,这样每次format的时候重要信息就不会丢失。于是照做,具体做法是在core-site.xml中增加一个相关的节点。但实际证明,不要随便改dfs tmp的位置,实践证明仅仅在配置中修改指定文件夹会出错,其中并不会包含所应该配置的文件,以至于根本启动不了namenode,因为找不到路径。具体该怎么修改暂时还没研究。删除该配置信息,format一下,也就恢复了默认tmp的位置。显示如下:

    /tmp/hadoop-kevin/dfs/name has been successfully formatted



由调试hbase引发的hadoop调试历程

原文:http://www.cnblogs.com/KevinHelloWorld/p/4370435.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!