Hadoop伪分布式模式 - Datanode和Tasktracker未启动

4
我正在运行一个安装了Hadoop 1.1.2的Red Hat Enterprise Linux Server release 6.4 (Santiago)版本。我已经进行了必要的配置,使得伪分布式模式可用。但是,在尝试运行Hadoop时,数据节点和任务跟踪器无法启动。
我无法将任何文件复制到HDFS。
[hduser@is-joshbloom-hadoop hadoop]$ hadoop dfs -put README.txt /input
Warning: $HADOOP_HOME is deprecated.

13/05/23 16:42:00 WARN hdfs.DFSClient: DataStreamer Exception: org.apache.hadoop.ipc.RemoteException: java.io.IOException: File /input could only be replicated to 0 nodes, instead of 1

尝试运行hadoop-daemon.sh start datanode之后,我收到了以下消息:

starting datanode, logging to /usr/local/hadoop/libexec/../logs/hadoop-hduser-datanode-is-joshbloom-hadoop.out

同样适用于TaskTracker。但是当我尝试使用相同的命令运行NameNode、SecondaryNameNode和JobTracker时,它们似乎正在运行。
namenode running as process 32933. Stop it first. 

我尝试了以下解决方案:
  1. 重新格式化namenode
  2. 重新安装hadoop
  3. 安装不同版本的hadoop(1.0.4)
似乎都没有奏效。我在我的Mac上和Amazon Ubuntu虚拟机上遵循相同的安装步骤,它完美地工作。
如何让hadoop正常工作呢? 谢谢!
*更新* 这是namenode的日志记录。
2013-05-23 16:27:44,087 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting DataNode
STARTUP_MSG:   host = java.net.UnknownHostException: is-joshbloom-hadoop: is-joshbloom-hadoop
STARTUP_MSG:   args = []
STARTUP_MSG:   version = 1.1.2
STARTUP_MSG:   build = https://svn.apache.org/repos/asf/hadoop/common/branches/branch-1.1 -r 1440782; compiled by 'hortonfo' on Thu Jan 31 02:03:24 UTC 2013
************************************************************/
2013-05-23 16:27:44,382 INFO org.apache.hadoop.metrics2.impl.MetricsConfig: loaded properties from hadoop-metrics2.properties
2013-05-23 16:27:44,432 INFO org.apache.hadoop.metrics2.impl.MetricsSourceAdapter: MBean for source MetricsSystem,sub=Stats registered.
2013-05-23 16:27:44,446 ERROR org.apache.hadoop.metrics2.impl.MetricsSystemImpl: Error getting localhost name. Using 'localhost'...
java.net.UnknownHostException: is-joshbloom-hadoop: is-joshbloom-hadoop
        at java.net.InetAddress.getLocalHost(InetAddress.java:1438)
        at     org.apache.hadoop.metrics2.impl.MetricsSystemImpl.getHostname(MetricsSystemImpl.java:463)
        at org.apache.hadoop.metrics2.impl.MetricsSystemImpl.configureSystem(MetricsSystemImpl.java:394)
        at org.apache.hadoop.metrics2.impl.MetricsSystemImpl.configure(MetricsSystemImpl.java:390)
        at org.apache.hadoop.metrics2.impl.MetricsSystemImpl.start(MetricsSystemImpl.java:152)
        at org.apache.hadoop.metrics2.impl.MetricsSystemImpl.init(MetricsSystemImpl.java:133)
        at org.apache.hadoop.metrics2.lib.DefaultMetricsSystem.init(DefaultMetricsSystem.java:40)
        at org.apache.hadoop.metrics2.lib.DefaultMetricsSystem.initialize(DefaultMetricsSystem.java:50)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.instantiateDataNode(DataNode.java:1589)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.createDataNode(DataNode.java:1608)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.secureMain(DataNode.java:1734)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.main(DataNode.java:1751)
Caused by: java.net.UnknownHostException: is-joshbloom-hadoop
        at java.net.Inet4AddressImpl.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)
        ... 11 more
2013-05-23 16:27:44,453 INFO org.apache.hadoop.metrics2.impl.MetricsSystemImpl: Scheduled     snapshot period at 10 second(s).
2013-05-23 16:27:44,453 INFO org.apache.hadoop.metrics2.impl.MetricsSystemImpl: DataNode     metrics system started
2013-05-23 16:27:44,768 INFO org.apache.hadoop.metrics2.impl.MetricsSourceAdapter: MBean for source ugi registered.
2013-05-23 16:27:44,914 INFO org.apache.hadoop.util.NativeCodeLoader: Loaded the native-hadoop library
2013-05-23 16:27:45,212 ERROR org.apache.hadoop.hdfs.server.datanode.DataNode:     java.net.UnknownHostException: is-joshbloom-hadoop: is-joshbloom-hadoop
        at java.net.InetAddress.getLocalHost(InetAddress.java:1438)
        at org.apache.hadoop.security.SecurityUtil.getLocalHostName(SecurityUtil.java:271)
        at org.apache.hadoop.security.SecurityUtil.login(SecurityUtil.java:289)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.<init>(DataNode.java:301)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.makeInstance(DataNode.java:1651)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.instantiateDataNode(DataNode.java:1590)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.createDataNode(DataNode.java:1608)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.secureMain(DataNode.java:1734)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.main(DataNode.java:1751)
Caused by: java.net.UnknownHostException: is-joshbloom-hadoop
        at java.net.Inet4AddressImpl.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)
        ... 8 more

2013-05-23 16:27:45,228 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down DataNode at java.net.UnknownHostException: is-joshbloom-hadoop: is-joshbloom-hadoop
************************************************************/

更新

/etc/hosts文件的内容:

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

你能否发布一下你的/etc/hosts文件内容? - Chris White
@ChrisWhite - 这就是 hosts 的样子。 - Vijay
`127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6` - Vijay
3个回答

8

修改您的/etc/hosts文件,添加一个主机名环回映射:

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
127.0.1.1   is-joshbloom-hadoop
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

您的问题是您的计算机不知道如何将主机名“is-joshbloom-hadoop”解析为特定的IP地址。通常有两个地方/方法进行解析-通过DNS服务器或使用本地hosts文件(hosts文件优先)。
上述对您的hosts文件的修改允许您的计算机将机器名称“is-joshbloom-hadoop”解析为IP地址“127.0.1.1”。操作系统具有内部回环地址范围“127.0.0.0/8”,因此您可以在此处命名任何地址。在我的Ubuntu笔记本电脑上,它使用“127.0.1.1”,我确信它在不同的操作系统之间会改变,但我猜测,如果您将来更改了机器名称,则不使用“127.0.0.1”您就不必在localhost行中搜索它。

请问您能否解释一下主机名环回映射是什么?还有为什么要使用127.0.1.1而不是127.0.0.1? 非常感谢您的努力。谢谢。 - Vijay
谢谢Chris。我刚试了一下,都能正常工作吗? 你能解释一下我们刚才做了什么吗? - Vijay

2

请检查HADOOP_HOME/conf下的core-site.xml文件。其中应该有一个fs.default.name属性,它应该指定了一个主机名。在你的/etc/hosts文件中,如果没有"is-joshbloom-hadoop"主机名,请使用localhost代替。

<property>
  <name>fs.default.name</name>
  <value>hdfs://localhost:54310</value>
</property>
</configuration>

我有一个 core-site.xml 文件,它看起来完全像这样。但是我的 hosts 文件中没有 "is-joshbloom-hadoop"。我应该将我的 core-site.xml 更改为 <value>hdfs://is-joshbloom-hadoop:54310</valuse> 还是保持不变? - Vijay

0

问题似乎是您在conf/slaves文件中没有任何内容。

检查conf/slaves文件。删除其中所有内容并将localhost添加到该文件中。在hdfs-site.xml中的dfs.name.dir和dfs.data.dir属性下,删除名称和数据目录。

格式化您的HDFS文件系统,然后重新启动守护程序。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接