我正在运行hadoop集群,Ubuntu主机作为主从服务器,虚拟机作为另一个从服务器运行(2节点集群)。
似乎在No data nodes are started解决的问题的解决方案对我来说不起作用。我尝试了那里解释的解决方案。
当我手动将受影响的数据节点的名称空间ID等同于名称节点时 并启动集群(链接帖子中的解决方案2)我仍然得到相同的错误(DataStreamer异常)。 接下来,其中一个datanode的日志显示相同的不兼容的namespaceIDs错误,但是日志中显示的数据节点的名称空间id与我的tmp / dfs / data / current / version文件(不会更改和与tmp / dfs / name / current / version)相同
经过几个小时的调试后,我仍然一无所知:(。
PS:
我的主机与奴隶没有连接问题
当我使用start-dfs.sh启动集群时,两个节点上的数据节点都会启动,这只是为了澄清。
我将文件从本地复制到hdfs时遇到此错误。
我在所有这些之后进行了一次简单的测试
14/05/04 04:12:54 WARN hdfs.DFSClient:DataStreamer异常: org.apache.hadoop.ipc.RemoteException:java.io.IOException:File / user / dsingh / mysample只能复制到0个节点,而不是 1点 org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem.java:1920) 在 org.apache.hadoop.hdfs.server.namenode.NameNode.addBlock(NameNode.java:783) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在java.lang.reflect.Method.invoke(Method.java:606)at org.apache.hadoop.ipc.RPC $ Server.call(RPC.java:587)at org.apache.hadoop.ipc.Server $ Handler $ 1.run(Server.java:1432)at at org.apache.hadoop.ipc.Server $ Handler $ 1.run(Server.java:1428)at java.security.AccessController.doPrivileged(Native Method)at javax.security.auth.Subject.doAs(Subject.java:415)at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1190) 在org.apache.hadoop.ipc.Server $ Handler.run(Server.java:1426)
at org.apache.hadoop.ipc.Client.call(Client.java:1113)at at org.apache.hadoop.ipc.RPC $ Invoker.invoke(RPC.java:229)at at com.sun.proxy。$ Proxy1.addBlock(未知来源)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在java.lang.reflect.Method.invoke(Method.java:606)at org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:85) 在 org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:62) 在com.sun.proxy。$ Proxy1.addBlock(未知来源)at org.apache.hadoop.hdfs.DFSClient $ DFSOutputStream.locateFollowingBlock(DFSClient.java:3720) 在 org.apache.hadoop.hdfs.DFSClient $ DFSOutputStream.nextBlockOutputStream(DFSClient.java:3580) 在 org.apache.hadoop.hdfs.DFSClient $ DFSOutputStream.access $ 2600(DFSClient.java:2783) 在 org.apache.hadoop.hdfs.DFSClient $ $ DFSOutputStream DataStreamer.run(DFSClient.java:3023)
14/05/04 04:12:54 WARN hdfs.DFSClient:错误恢复为null bad datanode [0] nodes == null 14/05/04 04:12:54 WARN hdfs.DFSClient:可以 没有得到阻止位置。源文件" / user / dsingh / mysample" - 正在中止... put:java.io.IOException:File / user / dsingh / mysample可以 只复制到0个节点,而不是1 14/05/04 04:12:54 ERROR hdfs.DFSClient:无法关闭文件/ user / dsingh / mysample org.apache.hadoop.ipc.RemoteException:java.io.IOException:File / user / dsingh / mysample只能复制到0个节点,而不是 1点 org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem.java:1920) 在 org.apache.hadoop.hdfs.server.namenode.NameNode.addBlock(NameNode.java:783) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在java.lang.reflect.Method.invoke(Method.java:606)at org.apache.hadoop.ipc.RPC $ Server.call(RPC.java:587)at org.apache.hadoop.ipc.Server $ Handler $ 1.run(Server.java:1432)at at org.apache.hadoop.ipc.Server $ Handler $ 1.run(Server.java:1428)at java.security.AccessController.doPrivileged(Native Method)at javax.security.auth.Subject.doAs(Subject.java:415)at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1190) 在org.apache.hadoop.ipc.Server $ Handler.run(Server.java:1426)
at org.apache.hadoop.ipc.Client.call(Client.java:1113)at at org.apache.hadoop.ipc.RPC $ Invoker.invoke(RPC.java:229)at at com.sun.proxy。$ Proxy1.addBlock(未知来源)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在java.lang.reflect.Method.invoke(Method.java:606)at org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:85) 在 org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:62) 在com.sun.proxy。$ Proxy1.addBlock(未知来源)at org.apache.hadoop.hdfs.DFSClient $ DFSOutputStream.locateFollowingBlock(DFSClient.java:3720) 在 org.apache.hadoop.hdfs.DFSClient $ DFSOutputStream.nextBlockOutputStream(DFSClient.java:3580) 在 org.apache.hadoop.hdfs.DFSClient $ DFSOutputStream.access $ 2600(DFSClient.java:2783) 在 org.apache.hadoop.hdfs.DFSClient $ $ DFSOutputStream DataStreamer.run(DFSClient.java:3023)
任何线索都会对我有所帮助。
答案 0 :(得分:1)
在这个问题上工作了几个小时。我终于放弃了,在我的知识领域仍然没有得到解决。]
但好处是,我没有在同一台机器上使用虚拟盒作为奴隶,而是将另一台ubuntu机器与我的主机连接起来,每件事都像魅力一样工作:) 我想这个问题可能与我在虚拟机中存储的有限虚拟内存分配有关(它小于500Mb)我已经读过某个地方集群中的每个节点都应该有至少10 GB的可用空间来保持HDFS满意
如果可能的话,我会在两台独立的机器上尝试使用hadoop集群,而不是在同一主机上使用虚拟机
答案 1 :(得分:0)
在你做了-copyFromLocal后,似乎Datanode得到了写文件的请求。但是,它无法分配文件所需的块。请检查Datanode日志以确切了解发生了什么。另外,运行" hdfs dfsadmin -report"确保Datanode上有足够的空间。
答案 2 :(得分:-1)
我遇到了同样的问题。这完全是因为缺乏专用于hdfs的空间。 我有10个虚拟机(vmware)节点,其hdfs平均存储量为3.5 GB。我使用的是hadoop 2.6。
您可以通过将“_hadoop_location / etc / hadoop / hdfs-site.xml”(对于hadoop 2.6)配置文件的值设置为“dfs.replication”属性来减少复制次数。您可以减少到较小的数量(如1或2)然后尝试保持文件小于总空间。
如果显示相同的问题,请尝试小于上次使用的文件大小,或重新创建磁盘大小较大的计算机。
可能会迟到但可能会帮助其他人遇到同样的问题:) 谢谢。