希望你们假期愉快。我正在尝试在amazonec2上设置hadoop集群。使用命令将数据文件从本地磁盘复制到hdfs时 hadoop fs -copyFromLocal d.txt /user/ubuntu/data
,我收到数据复制错误。日志中的错误如下
2006年1月15日07:40:36 warn hdfs.dfsclient:null错误数据节点[0]节点的错误恢复==null
2006年1月15日07:40:36警告hdfs.dfsclient:无法获取块位置。源文件/user/ubuntu/data/d.txt“->正在中止。。。copyfromlocal:java.io.ioexception:file/user/ubuntu/data/d.txt只能复制到0个节点,而不是1个节点
2006年1月15日07:40:36错误hdfs.dfsclient:无法关闭文件/user/ubuntu/data/d.txt
现在,我已经检查了stackoverflow和其他关于这个问题的论坛,我发现大多数论坛都在讨论datanode、tasktracker没有作为可能的原因运行以及相关的解决方案。但这些东西在我的设置中运行良好。jps命令的屏幕截图http://i.imgur.com/vs6krpp.png
从hadoowiki来看,其他可能的原因是datanode无法与服务器对话,通过网络或hadoop出现配置问题或某些配置问题阻碍了有效的双向通信。
我已经按照教程配置了hadoop-env.sh、core-site.xml、hdfs-site.xml和mapred-site.xmlhttp://tinyurl.com/l2wv6y9 . 谁能告诉我哪里出错了吗?如果有人帮助我解决这个问题,我将不胜感激。
谢谢,
3条答案
按热度按时间cig3rfwq1#
确保您可以访问数据节点(telnet端口),以便可以从等式中排除通信问题。
bwntbbo32#
问题出在安全小组。当我创建了ec2示例时,我创建了一个新的安全组,在该组中我没有配置允许打开端口进行连接的规则。
在使用默认选项创建组时,必须在端口22处为ssh添加规则。为了有tcp和icmp访问,我们需要添加两个额外的安全规则。在入站规则下添加'all tcp'、'all icmp'和'ssh(22)',这应该可以正常工作。
如果我们使用的是现有的安全组,我们应该检查入站和出站规则。
fhg3lkii3#
出现这种异常可能有几个原因。在这里,数据不会写入datanode。可能的原因是。
1) 配置的安全规则不允许正确通信。
2) 数据节点存储已满。
3) 如果datanode的命名空间id与集群的命名空间id不同。
4) 如果datanode正在进行块扫描和报告。
5) 配置的块大小的负值(hdfs site.xml中的dfs.block.size)。
所有配置和安全规则是否正确。然后您可以执行以下任务。
1) 停止datanode进程。
2) 删除datanode目录中的内容。
3) 再次启动datanode。
上面的步骤是为了使集群id在datanode中正确。
注意:调试问题的最佳方法是检查datanode和namenode的日志。这将给你这个错误的确切原因。