希望你们都有一个美好的假期。我正在亚马逊EC2上安装Hadoop集群。当使用命令hadoop fs -copyFromLocal d.txt /user/ubuntu/data将数据文件从本地磁盘复制到hdfs时,我得到的是数据复制错误。来自日志的错误如下
15/01/06 07:40:36警告hdfs.DFSClient:错误恢复为空坏数据节点== null 15/01/06 07:40:36警告hdfs.DFSClient:无法获得阻塞位置。源文件/user/ubuntu/data/d.txt“->中止. copyFromLocal: java.io.IOException: file /user/ubuntu/data/d.txt只能复制到0节点,而不是1 15/01/06 07:40:36错误hdfs.DFSClient:未能关闭文件/user/ubuntu/data/d.txt
现在,我一直在检查StackOverFlow和其他论坛中有关这个问题的内容,我发现大多数论坛都在谈论DataNode、TaskTracker,而不是将其作为可能的原因&相关的解决方案。但这些东西在我的设计中运行得很好。JPS命令http://i.imgur.com/vS6kRPP.png的屏幕截图
从HadooWiki来看,其他可能的原因是DataNode无法与服务器对话,通过网络或Hadoop配置问题,或者某些配置问题阻碍了有效的双向通信。
我按照教程http://tinyurl.com/l2wv6y9配置了hadoop-env.sh、core-site.xml、hdfs-site.xml和mapred-site.xml。有人能告诉我我哪里出错了吗?如果有人帮我解决这个问题,我将非常感激。
谢谢,
发布于 2015-01-07 22:31:45
问题出在安全组织里。当我创建EC2实例时,我创建了一个新的安全组,在这个组中,我没有配置允许端口为连接打开的规则。
在创建具有默认选项的组时,必须在端口22处为SSH添加规则。为了获得TCP和ICMP的访问权限,我们需要添加2条额外的安全规则。在入站规则中添加“All”、“All ICMP”和“SSH(22)”,这应该可以正常工作。
如果我们使用的是现有的安全组,我们应该检查入站和出站规则。
发布于 2015-01-06 09:21:56
此异常可能由于以下几个原因而发生。在这里,数据不会被写入datanode。可能的原因可能是。
1)配置的安全规则不允许适当的通信。
2)数据节点存储已满。
3)如果datanode具有不同于集群的名称空间id。
4)如果datanode参与块扫描和报告。
5)块大小的负值配置(HDFS-site.xml中的dfs.block.size)。
如果所有的配置和安全规则都是正确的。然后,您可以执行以下任务。
1)停止datanode进程。
2)删除datanode目录中的内容。
3)再次启动datanode。
上面的步骤是为了使集群id在datanode中正确。
注意:调试问题的最好方法是检查datanode和namenode的日志。这将给出这个错误的确切原因。
发布于 2015-01-06 23:56:57
确保您可以到达数据节点(telnet端口),以便从等式中丢弃通信问题。
https://stackoverflow.com/questions/27790609
复制相似问题