希望你们度过一个美好的假期。我正在尝试在 Amazon EC2 上设置 Hadoop 集群。使用命令将数据文件从本地磁盘复制到hdfs时hadoop fs -copyFromLocal d.txt /user/ubuntu/data
,我收到数据复制错误。日志中的错误如下
15/01/06 07:40:36 警告 HDFS。DFSClient: 错误恢复空错误数据节点[0] 节点 == 空
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 命令的屏幕截图https://i.stack.imgur.com/y6dAN.png
从HadooWiki来看,其他可能的原因是DataNode无法与服务器通信,通过网络或Hadoop配置问题或某些配置问题阻止有效的双向通信。
我已经按照教程 http://tinyurl.com/l2wv6y9 配置了 hadoop-env.sh,core-site.xml,hdfs-site.xml和mapred-site.xml。谁能告诉我哪里出错了?如果有人帮助我解决问题,我将不胜感激。
谢谢
嗯,问题出在安全组上。创建 EC2 实例后,我创建了一个新的安全组,其中尚未配置允许打开端口进行连接的规则。
在创建具有默认选项的组时,我们必须在端口 22 处为 SSH 添加规则。为了获得TCP和ICMP访问,我们需要添加2个额外的安全规则。在入站规则下添加"所有TCP","所有ICMP"和"SSH (22)",这应该可以正常工作。
如果我们使用的是现有安全组,则应检查入站和出站规则。
确保您可以到达数据节点(telnet 端口),以便可以从等式中丢弃通信问题。
此异常可能由于多种原因而发生。在这里,数据不会写入数据节点。可能的原因可能是。
1) 配置的安全规则不允许正确的通信。
2)数据节点存储已满。
3) 如果数据节点的命名空间 ID 与集群的命名空间 ID 不同。
4) 如果数据节点参与块扫描和报告。
5) 配置的块大小的负值(hdfs-site.xml 中的 dfs.block.size)。
如果所有配置和安全规则都正确。然后,您可以执行以下任务。
1) 停止数据节点进程。
2) 删除数据节点目录中的内容。
3) 再次启动数据节点。
上述步骤用于使集群 ID 在数据节点中正确。
注意:调试问题的最佳方法是检查数据节点和名称节点的日志。这将为您提供此错误的确切原因。