无法摆脱着名的DataStreamer异常:org.apache.hadoop.ipc.RemoteException:error

时间:2014-05-04 09:23:54

标签: java apache hadoop remoteexception

我正在运行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时遇到此错误。

我在所有这些之后进行了一次简单的测试

  • 删除了主
  • 上的tmp / dfs / data和tmp / dfs / name文件夹
  • 删除了奴隶
  • 上的tmp / dfs / data
  • 使用hadoop namenode -format
  • 格式化namenode
  • 使用start-dfs启动集群。所有节点
  • 它通常在master上启动,datanode也在slave上启动
  • 现在运行copyfromLocal命令,它给了我 同样的错误如下
  • 但是这次在任何datanode日志master或slave
  • 中都没有命名空间不匹配错误
  

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)

任何线索都会对我有所帮助。

3 个答案:

答案 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)然后尝试保持文件小于总空间。

如果显示相同的问题,请尝试小于上次使用的文件大小,或重新创建磁盘大小较大的计算机。

可能会迟到但可能会帮助其他人遇到同样的问题:) 谢谢。