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。其实说到底还是用户与权限问题。
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就对不上了,需要统一二者。
/tmp/hadoop-kevin/dfs/name has been successfully formatted
原文:http://www.cnblogs.com/KevinHelloWorld/p/4370435.html