Hadoop 中配置的问题namenode无法启动
在启动了ssh之后,再启动Hadoop,然后使用bin/hadoop fs -ls命令,总是出现类似于下面这种的错误。
10/03/15 19:43:10 INFO ipc.Client: Retrying connect to server: localhost/127.0.0.1:9000. Already tried 0 time(s).
……10/03/15 19:43:19 INFO ipc.Client: Retrying connect to server: localhost/127.0.0.1:9000. Already tried 9 time(s).
Bad connection to FS. command aborted.
在此时,如果stop-all.sh的话,会发现no namenode to stop这样的语句。
然后看了一下namenode 的 log。发现错误如下:
2011-10-21 10:55:17,655 INFO org.apache.hadoop.metrics.MetricsUtil: Unable to obtain hostName
java.net.UnknownHostException: chjjun: chjjun: 未知的名称或服务
at java.net.InetAddress.getLocalHost(InetAddress.java:1438)
at org.apache.hadoop.metrics.MetricsUtil.getHostName(MetricsUtil.java:95)
at org.apache.hadoop.metrics.MetricsUtil.createRecord(MetricsUtil.java:84)
at org.apache.hadoop.metrics.jvm.JvmMetrics.<init>(JvmMetrics.java:87)
at org.apache.hadoop.metrics.jvm.JvmMetrics.init(JvmMetrics.java:78)
at org.apache.hadoop.metrics.jvm.JvmMetrics.init(JvmMetrics.java:65)
at org.apache.hadoop.hdfs.server.namenode.metrics.NameNodeMetrics.<init>(NameNodeMetrics.java:103)
at org.apache.hadoop.hdfs.server.namenode.NameNode.initMetrics(NameNode.java:199)
at org.apache.hadoop.hdfs.server.namenode.NameNode.initialize(NameNode.java:302)
at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:433)
at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:421)
at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1359)
at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1368)
Caused by: java.net.UnknownHostException: chjjun: 未知的名称或服务
at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method)
at java.net.InetAddress$1.lookupAllHostAddr(InetAddress.java:866)
at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1258)
at java.net.InetAddress.getLocalHost(InetAddress.java:1434)
也就是说未知的host名称,然后上网查了一下,查找到了文章:http://lxy2330.iteye.com/blog/1112806
然后我查看下自己的/etc/hosts中的内容如下:
::1 localhost6.localhost6domain localhost6
再看下/etc/sysconfig/network中的内容
发现HOSTNAME=chjjun
那篇文章上说是因为这个HOSTNAME在hosts中没有对应的ip所以解析不了。因此就将这个chjjun换成localhost。
之后#/etc/rc.d/init.d/network restart 重新启动网络服务。
然后再使用hadoop namenode -format
但是还是出现上面的错误。
最后,没有办法,重新启动电脑,再重新启动ssh。在启动hadoop。
使用bin/hadoop fs -ls
仍然报错。
但是这次的错误和上一次的错误不同了,并且使用的log文件的名字也有了变化,之前的log写在:
hadoop-chjjun-namenode-chjjun.log
而现在的log文件名称变为:
hadoop-chjjun-namenode-localhost.log
并且错误的内容也有了变化:
java.io.EOFException
at java.io.RandomAccessFile.readInt(RandomAccessFile.java:776)
at org.apache.hadoop.hdfs.server.namenode.FSImage.isConversionNeeded(FSImage.java:836)
at org.apache.hadoop.hdfs.server.common.Storage.checkConversionNeeded(Storage.java:697)
at org.apache.hadoop.hdfs.server.common.Storage.access$000(Storage.java:62)
at org.apache.hadoop.hdfs.server.common.Storage$StorageDirectory.analyzeStorage(Storage.java:476)
at org.apache.hadoop.hdfs.server.namenode.FSImage.recoverTransitionRead(FSImage.java:402)
at org.apache.hadoop.hdfs.server.namenode.FSDirectory.loadFSImage(FSDirectory.java:110)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.initialize(FSNamesystem.java:291)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.<init>(FSNamesystem.java:270)
at org.apache.hadoop.hdfs.server.namenode.NameNode.loadNamesystem(NameNode.java:271)
at org.apache.hadoop.hdfs.server.namenode.NameNode.initialize(NameNode.java:303)
at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:433)
at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:421)
at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1359)
at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1368)
2011-10-21 13:46:48,767 ERROR org.apache.hadoop.hdfs.server.namenode.NameNode: java.io.EOFException
at java.io.RandomAccessFile.readInt(RandomAccessFile.java:776)
at org.apache.hadoop.hdfs.server.namenode.FSImage.isConversionNeeded(FSImage.java:836)
at org.apache.hadoop.hdfs.server.common.Storage.checkConversionNeeded(Storage.java:697)
at org.apache.hadoop.hdfs.server.common.Storage.access$000(Storage.java:62)
at org.apache.hadoop.hdfs.server.common.Storage$StorageDirectory.analyzeStorage(Storage.java:476)
at org.apache.hadoop.hdfs.server.namenode.FSImage.recoverTransitionRead(FSImage.java:402)
at org.apache.hadoop.hdfs.server.namenode.FSDirectory.loadFSImage(FSDirectory.java:110)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.initialize(FSNamesystem.java:291)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.<init>(FSNamesystem.java:270)
at org.apache.hadoop.hdfs.server.namenode.NameNode.loadNamesystem(NameNode.java:271)
at org.apache.hadoop.hdfs.server.namenode.NameNode.initialize(NameNode.java:303)
at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:433)
at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:421)
at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1359)
at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1368)
似乎有了点儿希望。
之后再使用bin/hadoop fs -format命令。
该命令执行完了之后,hadoop居然可以运行了。