您的位置:首页 > 运维架构

hadoop配置常见问题

2014-02-17 17:30 447 查看
收集记录一些Hadoop配置部署过程中遇到的问题。

1.

Q:safe mode issue
2013-12-10 17:20:46,399 INFO org.apache.hadoop.ipc.Server: IPC Server handler 0 on 54310, call delete(/app/hadoop/tmp/mapred/system, true) from 127.0.0.1:59760: error: org.apache.hadoop.hdfs.server.namenode.SafeModeException: Cannot delete /app/hadoop/tmp/mapred/system. Name node is in safe mode.
The ratio of reported blocks 1.0000 has reached the threshold 0.9990. Safe mode will be turned off automatically in 17 seconds.
org.apache.hadoop.hdfs.server.namenode.SafeModeException: Cannot delete /app/hadoop/tmp/mapred/system. Name node is in safe mode.
The ratio of reported blocks 1.0000 has reached the threshold 0.9990. Safe mode will be turned off automatically in 17 seconds.
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.deleteInternal(FSNamesystem.java:1994)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.delete(FSNamesystem.java:1974)
at org.apache.hadoop.hdfs.server.namenode.NameNode.delete(NameNode.java:792)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
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)
2013-12-10 17:20:53,868 INFO org.apache.hadoop.hdfs.StateChange: STATE* Safe mode ON.


S:
bin/hadoop dfsadmin -safemode leave


这种方法解决了运行中的hadoop的safe mode问题,但是下次重启hadoop,还会出现这个问题。

其实这个问题,我猜测可能是由于目录/app/hadoop/tmp/mapred/system被破坏造成。

永久解决,可以删除掉/app/hadoop/tmp/,重新创建,重新format,重启hadoop——如果条件允许的话。

2.

Q:
2013-12-09 19:37:19,796 ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.io.IOException: Incompatible namespaceIDs in /app/hadoop/tmp/dfs/data: namenode namespaceID = 346059444; datanode namespaceID = 313579633
at org.apache.hadoop.hdfs.server.datanode.DataStorage.doTransition(DataStorage.java:232)
at org.apache.hadoop.hdfs.server.datanode.DataStorage.recoverTransitionRead(DataStorage.java:147)
at org.apache.hadoop.hdfs.server.datanode.DataNode.startDataNode(DataNode.java:385)
at org.apache.hadoop.hdfs.server.datanode.DataNode.<init>(DataNode.java:299)
at org.apache.hadoop.hdfs.server.datanode.DataNode.makeInstance(DataNode.java:1582)
at org.apache.hadoop.hdfs.server.datanode.DataNode.instantiateDataNode(DataNode.java:1521)
at org.apache.hadoop.hdfs.server.datanode.DataNode.createDataNode(DataNode.java:1539)
at org.apache.hadoop.hdfs.server.datanode.DataNode.secureMain(DataNode.java:1665)
at org.apache.hadoop.hdfs.server.datanode.DataNode.main(DataNode.java:1682)

2013-12-09 19:37:19,819 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: SHUTDOWN_MSG:


S:这个可能是由于某些操作造成了name节点和data节点的namespaceID不一致。

解决方法可以参照(这个方法没有实际实践过,暂时先记录下):
I've had this happen a few times. If restarting the data node doesn't help, then do the following:

Restart Hadoop
Go to /app/hadoop/tmp/dfs/name/current
Open VERSION (i.e. by vim VERSION)
Record namespaceID
Go to /app/hadoop/tmp/dfs/data/current
Open VERSION (i.e. by vim VERSION)
Replace the namespaceID with the namespaceID you recorded in step 4.
This should fix the problem.


from: http://stackoverflow.com/questions/18300940/why-does-data-node-shut-down-when-i-run-hadoop

我实际使用的方法非常暴力,直接将name节点和data节点的目录(/app/hadoop/)删掉,

然后,重新创建这个目录,重新formatf(bin/hadoop namenode -format),重新启动hadoop。

这种方法不适合生产环境,学习阶段是足够了。

3.

Q:ipv6 issue

http://wiki.apache.org/hadoop/HadoopIPv6

据说,hadoop不支持ipv6,所以禁用掉ipv6
hduser@hdnamenode:/usr/local/hadoop$ netstat -plten | grep java
(并非所有进程都能被检测到,所有非本用户的进程信息将不会显示,如果想看到所有信息,则必须切换到 root 用户)
tcp6       0      0 127.0.0.1:54310         :::*                    LISTEN      1001       21535       7799/java
tcp6       0      0 127.0.0.1:54311         :::*                    LISTEN      1001       22111       8387/java
tcp6       0      0 :::50090                :::*                    LISTEN      1001       22211       8291/java
tcp6       0      0 :::50060                :::*                    LISTEN      1001       22864       8633/java
tcp6       0      0 :::50030                :::*                    LISTEN      1001       22295       8387/java
tcp6       0      0 :::37518                :::*                    LISTEN      1001       21549       8291/java
tcp6       0      0 :::41359                :::*                    LISTEN      1001       20832       7799/java
tcp6       0      0 127.0.0.1:51827         :::*                    LISTEN      1001       22582       8633/java
tcp6       0      0 :::50070                :::*                    LISTEN      1001       22121       7799/java
tcp6       0      0 :::51161                :::*                    LISTEN      1001       21726       8387/java
tcp6       0      0 :::38905                :::*                    LISTEN      1001       21172       8045/java
tcp6       0      0 :::50010                :::*                    LISTEN      1001       22207       8045/java
tcp6       0      0 :::50075                :::*                    LISTEN      1001       22593       8045/java
tcp6       0      0 :::50020                :::*                    LISTEN      1001       22598       8045/java


如果是ipv6,则使用netstat查看端口会显示为“tcp6”,如果是ipv4,则显示为“tcp”

在ubuntu 12.04上禁用ipv6,可以使用以下方法:
关闭ipv6就可以了,关闭方法:对于ubuntu 9.10及以上版本 ,可用以下方法:

1. gksu gedit /etc/default/grub

将
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
变为
GRUB_CMDLINE_LINUX_DEFAULT="ipv6.disable=1 quiet splash"
2.  sudo update-grub


修改之后,要reboot server。

在查看一下
hduser@hdnamenode:/usr/local/hadoop$ netstat -plten | grep java
(并非所有进程都能被检测到,所有非本用户的进程信息将不会显示,如果想看到所有信息,则必须切换到 root 用户)
tcp       0      0 127.0.0.1:54310         :::*                    LISTEN      1001       21535       7799/java
tcp       0      0 127.0.0.1:54311         :::*                    LISTEN      1001       22111       8387/java
tcp       0      0 :::50090                :::*                    LISTEN      1001       22211       8291/java
tcp       0      0 :::50060                :::*                    LISTEN      1001       22864       8633/java
tcp       0      0 :::50030                :::*                    LISTEN      1001       22295       8387/java
tcp       0      0 :::37518                :::*                    LISTEN      1001       21549       8291/java
tcp       0      0 :::41359                :::*                    LISTEN      1001       20832       7799/java
tcp       0      0 127.0.0.1:51827         :::*                    LISTEN      1001       22582       8633/java
tcp       0      0 :::50070                :::*                    LISTEN      1001       22121       7799/java
tcp       0      0 :::51161                :::*                    LISTEN      1001       21726       8387/java
tcp       0      0 :::38905                :::*                    LISTEN      1001       21172       8045/java
tcp       0      0 :::50010                :::*                    LISTEN      1001       22207       8045/java
tcp       0      0 :::50075                :::*                    LISTEN      1001       22593       8045/java
tcp       0      0 :::50020                :::*                    LISTEN      1001       22598       8045/java


4.
2013-12-10 17:22:51,999 INFO org.apache.hadoop.ipc.Server: IPC Server listener on 54310: starting
2013-12-10 17:22:52,003 INFO org.apache.hadoop.ipc.Server: IPC Server handler 0 on 54310: starting
2013-12-10 17:22:52,004 INFO org.apache.hadoop.ipc.Server: IPC Server handler 1 on 54310: starting
2013-12-10 17:22:52,005 INFO org.apache.hadoop.ipc.Server: IPC Server handler 2 on 54310: starting
2013-12-10 17:22:52,005 INFO org.apache.hadoop.ipc.Server: IPC Server handler 3 on 54310: starting
2013-12-10 17:22:52,006 INFO org.apache.hadoop.ipc.Server: IPC Server handler 4 on 54310: starting
2013-12-10 17:22:52,006 INFO org.apache.hadoop.ipc.Server: IPC Server handler 5 on 54310: starting
2013-12-10 17:22:52,007 INFO org.apache.hadoop.ipc.Server: IPC Server handler 6 on 54310: starting
2013-12-10 17:22:52,007 INFO org.apache.hadoop.ipc.Server: IPC Server handler 7 on 54310: starting
2013-12-10 17:22:52,007 INFO org.apache.hadoop.ipc.Server: IPC Server handler 8 on 54310: starting
2013-12-10 17:22:52,016 INFO org.apache.hadoop.ipc.Server: IPC Server handler 9 on 54310: starting
2013-12-10 17:22:56,038 ERROR org.apache.hadoop.security.UserGroupInformation: PriviledgedActionException as:hduser cause:java.io.IOException: File /app/hadoop/tmp/mapred/system/jobtracker.info could only be replicated to 0 nodes, instead of 1
2013-12-10 17:22:56,040 INFO org.apache.hadoop.ipc.Server: IPC Server handler 6 on 54310, call addBlock(/app/hadoop/tmp/mapred/system/jobtracker.info, DFSClient_-1488093128, null) from 127.0.0.1:59783: error: java.io.IOException: File /app/hadoop/tmp/mapred/system/jobtracker.info could only be replicated to 0 nodes, instead of 1
java.io.IOException: File /app/hadoop/tmp/mapred/system/jobtracker.info could only be replicated to 0 nodes, instead of 1
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem.java:1558)
at org.apache.hadoop.hdfs.server.namenode.NameNode.addBlock(NameNode.java:696)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
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)


S:这个问题可以有多种原因造成,但是归根到是由于data节点连不上name节点造成的。

我们还可以检查下data节点的log来验证下:
2013-12-10 17:31:57,434 INFO org.apache.hadoop.ipc.Client: Retrying connect to server: hdnamenode/10.0.2.7:54310. Already tried 0 time(s).
2013-12-10 17:31:58,435 INFO org.apache.hadoop.ipc.Client: Retrying connect to server: hdnamenode/10.0.2.7:54310. Already tried 1 time(s).
2013-12-10 17:31:59,437 INFO org.apache.hadoop.ipc.Client: Retrying connect to server: hdnamenode/10.0.2.7:54310. Already tried 2 time(s).
2013-12-10 17:32:00,439 INFO org.apache.hadoop.ipc.Client: Retrying connect to server: hdnamenode/10.0.2.7:54310. Already tried 3 time(s).
2013-12-10 17:32:01,440 INFO org.apache.hadoop.ipc.Client: Retrying connect to server: hdnamenode/10.0.2.7:54310. Already tried 4 time(s).
2013-12-10 17:32:02,442 INFO org.apache.hadoop.ipc.Client: Retrying connect to server: hdnamenode/10.0.2.7:54310. Already tried 5 time(s).
2013-12-10 17:32:03,444 INFO org.apache.hadoop.ipc.Client: Retrying connect to server: hdnamenode/10.0.2.7:54310. Already tried 6 time(s).
2013-12-10 17:32:04,446 INFO org.apache.hadoop.ipc.Client: Retrying connect to server: hdnamenode/10.0.2.7:54310. Already tried 7 time(s).
2013-12-10 17:32:05,448 INFO org.apache.hadoop.ipc.Client: Retrying connect to server: hdnamenode/10.0.2.7:54310. Already tried 8 time(s).
2013-12-10 17:32:06,450 INFO org.apache.hadoop.ipc.Client: Retrying connect to server: hdnamenode/10.0.2.7:54310. Already tried 9 time(s).
2013-12-10 17:32:06,451 INFO org.apache.hadoop.ipc.RPC: Server at hdnamenode/10.0.2.7:54310 not available yet, Zzzzz...


一直在retry

下面说说我的一次解决问题的经历。

其实是很无语的。

当时一开始配置的是单机版的hadoop,然后在此基础上配置的多节点hadoop,core-site.xml中

<property>
<name>fs.default.name</name>
<value>hdfs://localhost:54310</value>
<description>The name of the default file system.  A URI whose
scheme and authority determine the FileSystem implementation.  The
uri's scheme determines the config property (fs.SCHEME.impl) naming
the FileSystem implementation class.  The uri's authority is used to
determine the host, port, etc. for a filesystem.</description>
</property>


是这样配置的,这在单机版上没有问题。

当配置多节点时,没太在意,只改了data节点的core-site.xml,没改name节点的core-site.xml。

就是这个不在意造成了data节点连接不上name节点。

当时想,name节点,就我自己访问我自己,没关系的。

其实,不然,如果name节点的core-site.xml配成localhost会造成54310端口只能被本机访问,而不能被data节点访问。

hduser@hdnamenode:/usr/local/hadoop$ netstat -plten | grep java
(并非所有进程都能被检测到,所有非本用户的进程信息将不会显示,如果想看到所有信息,则必须切换到 root 用户)
tcp        0      0 127.0.0.1:54310         0.0.0.0:*               LISTEN      1001       12417       2347/java
tcp        0      0 127.0.0.1:54311         0.0.0.0:*               LISTEN      1001       12405       2930/java
tcp        0      0 0.0.0.0:50090           0.0.0.0:*               LISTEN      1001       12705       2839/java
tcp        0      0 127.0.0.1:47373         0.0.0.0:*               LISTEN      1001       12426       3178/java
tcp        0      0 0.0.0.0:53485           0.0.0.0:*               LISTEN      1001       11865       2930/java
tcp        0      0 0.0.0.0:50030           0.0.0.0:*               LISTEN      1001       12519       2930/java
tcp        0      0 0.0.0.0:42673           0.0.0.0:*               LISTEN      1001       11761       2347/java
tcp        0      0 0.0.0.0:50070           0.0.0.0:*               LISTEN      1001       12525       2347/java
tcp        0      0 0.0.0.0:48024           0.0.0.0:*               LISTEN      1001       11762       2591/java
tcp        0      0 0.0.0.0:50010           0.0.0.0:*               LISTEN      1001       12701       2591/java
tcp        0      0 0.0.0.0:50075           0.0.0.0:*               LISTEN      1001       12709       2591/java
tcp        0      0 0.0.0.0:54972           0.0.0.0:*               LISTEN      1001       11763       2839/java


注意54310和54311端口。

这个我们可以使用telnet验证:

hduser@hdnamenode:/usr/local/hadoop$ telnet 10.0.2.7 54310
Trying 10.0.2.7...
telnet: Unable to connect to remote host: Connection refused
hduser@hdnamenode:/usr/local/hadoop$ telnet 127.0.0.1 54310
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
exit
Connection closed by foreign host.
hduser@hdnamenode:/usr/local/hadoop$ telnet 10.0.2.7 22
Trying 10.0.2.7...
Connected to 10.0.2.7.
Escape character is '^]'.
SSH-2.0-OpenSSH_5.9p1 Debian-5ubuntu1.1
e
Protocol mismatch.
Connection closed by foreign host.


当我们将name节点的core-site.xml改成实际的ip时,将是这样:

hduser@hdnamenode:/usr/local/hadoop/conf$ netstat -plten | grep java
(并非所有进程都能被检测到,所有非本用户的进程信息将不会显示,如果想看到所有信息,则必须切换到 root 用户)
tcp        0      0 127.0.0.1:34054         0.0.0.0:*               LISTEN      1001       17197       5142/java
tcp        0      0 10.0.2.7:54310          0.0.0.0:*               LISTEN      1001       16262       4291/java
tcp        0      0 10.0.2.7:54311          0.0.0.0:*               LISTEN      1001       16856       4892/java
tcp        0      0 0.0.0.0:50090           0.0.0.0:*               LISTEN      1001       17007       4791/java
tcp        0      0 0.0.0.0:39084           0.0.0.0:*               LISTEN      1001       15558       4291/java
tcp        0      0 0.0.0.0:50030           0.0.0.0:*               LISTEN      1001       17091       4892/java
tcp        0      0 0.0.0.0:44687           0.0.0.0:*               LISTEN      1001       16415       4791/java
tcp        0      0 0.0.0.0:32785           0.0.0.0:*               LISTEN      1001       16523       4892/java
tcp        0      0 0.0.0.0:50070           0.0.0.0:*               LISTEN      1001       16916       4291/java
tcp        0      0 0.0.0.0:50010           0.0.0.0:*               LISTEN      1001       16997       4541/java
tcp        0      0 0.0.0.0:50075           0.0.0.0:*               LISTEN      1001       17208       4541/java
tcp        0      0 0.0.0.0:40002           0.0.0.0:*               LISTEN      1001       15899       4541/java
tcp        0      0 0.0.0.0:50020           0.0.0.0:*               LISTEN      1001       17213       4541/java
hduser@hdnamenode:/usr/local/hadoop/conf$ telnet 10.0.2.7 54310
Trying 10.0.2.7...
Connected to 10.0.2.7.
Escape character is '^]'.
exit
Connection closed by foreign host.


另外,有些时候,name节点启动的会慢于data节点,也会造成这个问题。这只要耐心等一会即可

总结下遇到这样的问题,如何考虑

1)检查name节点是否正常,查看端口是否被监听——注意ip是否正确

2)检查data节点能否telnet name节点相应的端口

3)检查conf/下的配置是否正确

4)检查ntfs空间是否足够??以及读写权限是否正确。

5)向google寻求帮助

下面的链接列举了一些情况:

/article/2639463.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: