我想我必须对Hadoop集群中的数据节点有一些误解。我有一个由master,slave1,slave2,slave3组成的hadoop虚拟集群。 Master和slave1在一台物理计算机中,而slave2和slave3在一台物理计算机中。当启动群集时,在HDFS WebUI中,我只能看到三个 Activity 的数据节点,slave1,master,slave2。但有时,三个 Activity 数据节点分别是master,slave1,slave3。真奇怪。我SSH到未启动的数据节点,尽管我执行jps却没有找到任何datanode,但是我仍然可以在该节点上的HDFS上复制和删除文件。
因此,我相信我不能正确理解datanode。我在这里有三个问题。 1每个节点是否有一个数据节点? 2为什么不是datanode的节点仍可以在HDFS上读写? 3我们可以决定datanode的数量吗?

这是未启动的datanode的日志:


    at org.apache.hadoop.ipc.Client.call(Client.java:1070)
    at org.apache.hadoop.ipc.RPC$Invoker.invoke(RPC.java:225)
    at $Proxy5.blockReport(Unknown Source)
    at org.apache.hadoop.hdfs.server.datanode.DataNode.offerService(DataNode.java:958)
    at org.apache.hadoop.hdfs.server.datanode.DataNode.run(DataNode.java:1458)
    at java.lang.Thread.run(Thread.java:636)

2012-08-03 17:47:33,873 INFO org.mortbay.log:已停止[email protected]:50075
2012-08-03 17:47:33,980信息org.apache.hadoop.ipc.Server:停止50020上的服务器
2012-08-03 17:47:33,981 INFO org.apache.hadoop.ipc.Server:50020上的IPC服务器处理程序0:退出
2012-08-03 17:47:33,981 INFO org.apache.hadoop.ipc.Server:50020上的IPC服务器处理程序2:退出
2012-08-03 17:47:33,981 INFO org.apache.hadoop.ipc.Server:50020上的IPC服务器处理程序1:退出
2012-08-03 17:47:33,981 INFO org.apache.hadoop.ipc.Server: IPC Server handler 0 on 50020: exiting
2012-08-03 17:47:33,981 INFO org.apache.hadoop.ipc.Server: IPC Server handler 2 on 50020: exiting
2012-08-03 17:47:33,981 INFO org.apache.hadoop.ipc.Server: IPC Server handler 1 on 50020: exiting
2012-08-03 17:47:33,981 INFO org.apache.hadoop.ipc.metrics.RpcInstrumentation: shut down
2012-08-03 17:47:33,982 WARN org.apache.hadoop.hdfs.server.datanode.DataNode: DatanodeRegistration(192.168.111.31:50010, storageID=DS-1062340636-127.0.0.1-50010-1339803955209, infoPort=50075, ipcPort=50020):DataXceiveServer:java.nio.channels.AsynchronousCloseException
    at java.nio.channels.spi.AbstractInterruptibleChannel.end(AbstractInterruptibleChannel.java:202)
    at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:170)
    at sun.nio.ch.ServerSocketAdaptor.accept(ServerSocketAdaptor.java:102)
    at org.apache.hadoop.hdfs.server.datanode.DataXceiverServer.run(DataXceiverServer.java:131)
    at java.lang.Thread.run(Thread.java:636)

2012-08-03 17:47:33,982 INFO org.apache.hadoop.ipc.Server: Stopping IPC Server listener on 50020
2012-08-03 17:47:33,982 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: Exiting DataXceiveServer
2012-08-03 17:47:33,983 INFO org.apache.hadoop.ipc.Server: Stopping IPC Server Responder



在com.sun.jmx.mbeanserver.JmxMBeanServer.unregisterMBean(JmxMBeanServer.java:540)
在org.apache.hadoop.metrics2.util.MBeans.unregister(MBeans.java:71)
在org.apache.hadoop.hdfs.server.datanode.FSDataset.shutdown(FSDataset.java:2067)
在org.apache.hadoop.hdfs.server.datanode.DataNode.shutdown(DataNode.java:799)
在org.apache.hadoop.hdfs.server.datanode.DataNode.run(DataNode.java:1471)
在java.lang.Thread.run(Thread.java:636)

最佳答案

每个单个主机名有多个DataNode会出现问题。您说它是虚拟的,所以它们在不同的虚拟机上吗?如果是这样,这应该不成问题...

我将检查slave2和slave3的DataNode日志,看看为什么没有启动。错误消息将被打印在那里。如果错误表明正在使用的端口上有类似内容。

您不需要在DataNode上即可访问HDFS。 HDFS客户端(例如hadoop fs -put)直接与NameNode和其他DataNode进程进行通信,而不必访问本地进程。

实际上,在大型集群上,拥有一个单独的“查询节点”即可访问HDFS和MapReduce,但不运行任何DataNode或TaskTracker服务,这一点非常普遍。

只要您已安装Hadoop软件包,并且配置文件正确指向NameNode和JobTracker,您就可以“远程”访问群集。

关于hadoop - HADOOP datanode奇怪的事情,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11804341/

10-12 23:47