Hadoop2.x(Hadoop配置常见Log错误指导)

Hadoop2.x(Hadoop配置常见Log错误指导)


1.   WARN org.apache.hadoop.hdfs.server.common.Util: Path /usr/mywind/name should be specified as a URI in configuration files. Please update hdfs configuration.
问题定位:hdfs-site.xml
问题原因:
1)   不合规范的URI格式
解决办法:
1)   把dfs.namenode.name.dir、dfs.datanode.data.dir的原路径格式如/usr/mywind/name改成file:/usr/mywind/name,即使用完全路径。


2.   INFO org.apache.hadoop.ipc.Server: IPC Server handler 2 on 9000, call org.apache.hadoop.hdfs.protocol.ClientProtocol.addBlock from 192.168.8.184:39050 Call#6 Retry#0 java.io.IOException: File /hbase/.tmp/hbase.version could only be replicated to 0 nodes instead of minReplication (=1).  There are 0 datanode(s) running and no node(s) are excluded in this operation.
问题定位:datanode
问题原因:
1)   datanode没有启动
解决办法:
1)   去Slave节点查看Log,排除错误,确保datanode正确启动起来(可通过jps命令查看启动状态)。


3.   WARN org.apache.hadoop.hdfs.server.common.Storage: Storage directory /mywind/name does not exist 2014-11-24 08:19:02,555 WARN org.apache.hadoop.hdfs.server.namenode.FSNamesystem: Encountered exception loading fsimage org.apache.hadoop.hdfs.server.common.InconsistentFSStateException: Directory /mywind/name is in an inconsistent state: storage directory does not exist or is not accessible.
问题定位:hdfs-site.xml
问题原因:
1)   错误的URI格式
解决办法:
1)   把dfs.namenode.name.dir、dfs.datanode.data.dir的原路径格式如file://usr/mywind/name改成file:/usr/mywind/name,即使用完全路径。

Slave节点Log篇
4.   WARN org.apache.hadoop.hdfs.server.common.Util: Path /usr/mywind/data should be specified as a URI in configuration files. Please update hdfs configuration.
问题定位:hdfs-site.xml
问题原因:
1)   不合规范的URI格式
解决办法:
2)   把dfs.namenode.name.dir、dfs.datanode.data.dir的原路径格式如/usr/mywind/name改成file:/usr/mywind/name,即使用完全路径。

5.   WARN org.apache.hadoop.hdfs.server.datanode.DataNode: Problem connecting to server: slave1.mywind.com.cn/192.168.8.183:9000
问题定位:core-site.xml
问题原因:
1)   不正确的HDFS地址
2)   Master节点或者Slave节点防火墙没有关闭
解决办法:
1)   把core-site.xml中的fs.defaultFS的value的IP或域名改成主节点的IP地址或域名。
2)   使用telnet master 9000命令测试一下主节点的端口是否可以连接,如果不可以连接,则可能是主节点或者从节点的防火墙启用了,需要把它关闭。

6.   FATAL org.apache.hadoop.hdfs.server.datanode.DataNode: Initialization failed for Block pool <registering> (Datanode Uuid unassigned) service to master/192.168.8.184:9000. Exiting. java.io.IOException: Incompatible clusterIDs in /usr/mywind/data: namenode clusterID = CID-e6addb58-7fe2-47ea-9592-0033053a90f9; datanode clusterID = CID-d5961300-954e-4860-96b5-95b2b9634b77
问题定位:所有namenode目录、所有datanode目录、从节点临时目录
问题原因:
1)   主节点的namenode clusterID与从节点的datanode clusterID不一致
2)   多次格式化了namenode跟datanode之后的结果,格式化之后从节点生成了新的ID,造成不一致
解决办法:
1)   在格式化之前,先把所有的服务停掉(stop-dfs.sh、stop-yarn.sh或者stop-all.sh),确保都停掉了之后,分别到所有节点的namenode目录、datanode目录、临时目录,把以上目录里面的所有内容都删除掉。然后再重新启动就可以了。

7. 连接超时
1.检查防火墙
2.检查本地host配置
参考

8. hadoop “util.NativeCodeLoader: Unable to load native-hadoop library for your platform”
hadoop安装完以后,经常会提示一下警告:
WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform...
using builtin-java classes where applicable
搜了好多文章,都说是跟系统位数有关系,我使用的是Centos 6.5 64位操作系统。
前两天在做Docker镜像的时候发现了一个步骤可以解决这个问题,亲试了一下,果然不再提示了。
首先下载hadoop-native-64-2.4.0.tar:
http://dl.bintray.com/sequenceiq/sequenceiq-bin/hadoop-native-64-2.4.0.tar
如果你是hadoop2.6的可以下载下面这个:
http://dl.bintray.com/sequenceiq/sequenceiq-bin/hadoop-native-64-2.6.0.tar
http://dl.bintray.com/sequenceiq/sequenceiq-bin/hadoop-native-64-2.7.0.tar
下载完以后,解压到hadoop的native目录下,覆盖原有文件即可。操作如下:
tar -x hadoop-native-64-2.4.0.tar -C  hadoop/lib/native/
出现上述问题主要是环境变量没设置好,在~/.bash_profile或者/etc/profile中加入以下语句就没问题了。
#vi /etc/profile或者vi ~/.bash_profile
    export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
    export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
然后用source重新编译使之生效即可!
  #source /etc/profile或者source ~/.bash_profile

9. hadoop 权限错误 Permission denied: user=root, access=WRITE, inode="/":hdfs:super
关于不能执行Hadoop命令 并报权限问题执行错误1、Permission denied: user=root, access=WRITE, inode="/":hdfs:supergroup:drwxr-xr-x
mkdir: Permission denied: user=root, access=WRITE, inode="/":hdfs:supergroup:drwxr-xr-x
put: Permission denied: user=root, access=WRITE, inode="/":hdfs:supergroup:drwxr-xr-x
这些类似的权限问题都属于同类问题,他是我说我们的执行Hadoop命令的用户没有,执行权限。
刚开始我想解决问题的思路是,将当前用户授权。(这种想法是不正确的,不要为了简化输入命令,就试图修改这些东西)
现在的想法:用的他指定的用户去执行
[root@cdh1 data]#sudo -u hdfs  hadoop fs -mkdir /newFile
或者[root@cdh1 data]#sudo -u hdfs  dfhs dfs  -mkdir /newFile
更简单的是,先进入这个用户,su hdfs 
然后在这上面执行相应的命令就ok 
我顺便说一下,为什么会出现这样的问题。
如果你是用tar 包解压缩的方式,手动配置的,肯定不会出现这些问题。
我第一次是用,cloudera manager 安装,选择的是enterprise 60天的那个。安装完成也没有问题。
 
第二次是用现在这种方式安装的。选择的是第一个,免费版。
其实这个也不算是安装上的问题。因为你用yarn安装的时候,他默认会用这个用户安装,这个就相当于,Linux的超级用户,他是Hadoop的超级用户组的用户。
 
[root@cdh1 data]# hadoop fs -mkdir /newFile
mkdir: Permission denied: user=root, access=WRITE, inode="/":hdfs:supergroup:drwxr-xr-x
[root@cdh1 data]#
 
[root@cdh1 data]# hadoop fs -put w.dat  /
put: Permission denied: user=root, access=WRITE, inode="/":hdfs:supergroup:drwxr-xr-x

 
也可以在haoop 配置文件中hdfs-site.xml 中设置权限为false

 10.引入第三方jar  class not found 问题

What I suppose you are trying to do is include third party libraries in your distributed program. There are many options you can do.

Option 1) Easiest option that I find is to put all the jars in $HADOOP_HOME/lib (eg /usr/local/hadoop-0.22.0/lib) directory on all nodes and restart your jobtracker and tasktracker.

Option 2) Use libjars option command for this is hadoop jar -libjars comma_seperated_jars

Option 3) Include the jars in lib directory of the jar. You will have to do that while creating your jar.

Option 4) Install all the jars in your computer and include their location in class path.

Option 5) You can try by putting those jars in distributed cache

程序处理:job.setJar("C:/Users/admin/.m2/repository/com/mogoroom/mogoroom-service-api/4.0.0-SNAPSHOT/mogoroom-service-api-4.0.0-SNAPSHOT.jar");