1.启动hadoop、zookeeper、hbase后jps查看,服务已经都起来了。但是60010界面无法打开。50070正常,50030,nodes显示为0.查看日志:error: org.apache.hadoop.hdfs.server.namenode.SafeModeException:Cannot delete /home/hadoop/tmp/mapred/system. Name node is in safe mode.
System.这个文件不存在,执行./hadoop dfsadmin -safemode leave 后,50030正常
但是这样还是不行啊,应该自动可以退出安全模式的,可以查看一下日志,查看一下VERSION的ID是否一致。我重启后依然这样,查看了一下VERSION,又重新启动hadoop,竟然正常了,不清楚原因啊,奇怪了。
2.hadoop集群修改时间的后果
时间改动较大一般是hbase节点停止,直接启动即可。Hadoop没发现问题。
3.初次配置运行没什么问题MapReduce的例子也能正常运行,但是等若干天后再次运行时遇到了如下的问题:
hadoop@ubuntu:~$ hadoop/bin/start-all.sh
看不出什么问题,但是
hadoop@ubuntu:~$ jps
12181 Jps
11984 JobTracker
12132 TaskTracker
11557 SecondaryNameNode
hadoop@ubuntu:~$ hadoop/bin/stop-all.sh
stopping jobtracker
localhost: no tasktracker to stop
no namenode to stop
localhost: no datanode to stop
localhost: stopping secondarynamenode
问题出在哪里不是很清楚,不过貌似是由于每次start后,关机之前没有运行stop的缘故造成的。下面的方法应该有用:(此处是namespaceID除问题,也可以尝试手动修改namespaceID看是否可行)
1、先运行stop-all.sh
2、格式化namdenode,不过在这之前要先删除原目录,即core-site.xml下配置的<name>hadoop.tmp.dir</name>所指向的目录,删除后切记要重新建立配置的空目录,然后运行hadoop namenode -format
3、运行start-all.sh
原因分析:
通过多次断电重启发现,出现这种情况是因为namenode和datanode的tmp下的VERSION内的namespaceID不同。只要关闭服务的时候namespaceID相同,重启就没有问题。而什么原因会导致namespaceID变动,着还有待积累,现总结如下:
1.hadoop启动之后执行过format。
4.WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
这是因为你用的hadoop版本是没编译的,所谓没编译是说一些功能包(比如./hadoop dfs -ls /)无法使用,这种未编译的包一般是********.tar.gz格式,应该使用****bin.tar.gz,这是已经编译过的,但是有些增强功能未添加,要使用一些增强功能,需要编译前一个版本(ant)
5.hbase经常自己关掉一个region,最后发现hadoop日志有如下错误
2014-02-22 01:52:00,935 ERROR org.apache.hadoop.security.UserGroupInformation: PriviledgedActionException as:hadoop cause:org.apache.hadoop.hdfs.server.namenode.LeaseExpiredException: No lease on /hbase/.logs/testhd3,60020,1392948100268/testhd3%2C60020%2C1392948100268.1393004989411 File does not exist. Holder DFSClient_hb_rs_testhd3,60020,1392948100268 does not have any open files.
2014-02-22 01:52:00,936 INFO org.apache.hadoop.ipc.Server: IPC Server handler 3 on 9000, call addBlock(/hbase/.logs/testhd3,60020,1392948100268/testhd3%2C60020%2C1392948100268.1393004989411, DFSClient_hb_rs_testhd3,60020,1392948100268, null) from 172.72.101.213:59979: error: org.apache.hadoop.hdfs.server.namenode.LeaseExpiredException: No lease on /hbase/.logs/testhd3,60020,1392948100268/testhd3%2C60020%2C1392948100268.1393004989411 File does not exist. Holder DFSClient_hb_rs_testhd3,60020,1392948100268 does not have any open files.
org.apache.hadoop.hdfs.server.namenode.LeaseExpiredException: No lease on /hbase/.logs/testhd3,60020,1392948100268/testhd3%2C60020%2C1392948100268.1393004989411 File does not exist. Holder DFSClient_hb_rs_testhd3,60020,1392948100268 does not have any open files.
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkLease(FSNamesystem.java:1631)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkLease(FSNamesystem.java:1622)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem.java:1538)
at org.apache.hadoop.hdfs.server.namenode.NameNode.addBlock(NameNode.java:696)
at sun.reflect.GeneratedMethodAccessor13.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:563)
at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1388)
at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1384)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:396)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1121)
at org.apache.hadoop.ipc.Server$Handler.run(Server.java:1382)
解决办法,调整xcievers参数
默认是4096,改为8192
vi /home/dwhftp/opt/hadoop/conf/hdfs-site.xml
<property>
<name>dfs.datanode.max.xcievers</name>
<value>8192</value>
</property>
dfs.datanode.max.xcievers 参数说明
一个 Hadoop HDFS Datanode 有一个同时处理文件的上限. 这个参数叫 xcievers (Hadoop的作者把这个单词拼错了). 在你加载之前,先确认下你有没有配置这个文件conf/hdfs-site.xml里面的xceivers参数,至少要有4096:
<property>
<name>dfs.datanode.max.xcievers</name>
<value>4096</value>
</property>