Hadoop 数据复制错误
Hadoop Data Replication error
希望你们都度过了一个愉快的假期。我正在尝试在 Amazon EC2 上设置 Hadoop 集群。使用命令 hadoop fs -copyFromLocal d.txt /user/ubuntu/data
将数据文件从本地磁盘复制到 hdfs 时,出现数据复制错误。日志中的错误如下
15/01/06 07:40:36 WARN hdfs.DFSClient: Error Recovery for null bad datanode[0] nodes == null
15/01/06 07:40:36 WARN hdfs.DFSClient: Could not get block locations. Source file /user/ubuntu/data/d.txt" - > Aborting... copyFromLocal: java.io.IOException: File /user/ubuntu/data/d.txt could only be replicated to 0 nodes, instead of 1
15/01/06 07:40:36 ERROR hdfs.DFSClient: Failed to close file /user/ubuntu/data/d.txt
现在,我一直在查看关于这个问题的 Whosebug 和其他论坛,我发现他们中的大多数人都在谈论 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。谁能告诉我哪里出错了?如果有人帮助我解决问题,我将不胜感激。
谢谢,
发生此异常的原因有多种。这里数据没有被写入数据节点。可能的原因有。
1) 配置的安全规则不允许正常通信。
2) 数据节点存储已满。
3) 如果数据节点的名称空间 ID 与集群的名称空间 ID 不同。
4) 如果数据节点参与块扫描和报告。
5) 配置块大小的负值 (dfs.block.size in hdfs-site.xml).
如果所有配置和安全规则都正确。然后你可以做下面的任务。
1) 停止datanode进程。
2) 删除datanode目录下的内容
3) 再次启动datanode
以上步骤是为了使集群id在datanode中正确。
注意:调试问题的最佳方法是检查数据节点和名称节点的日志。这将为您提供此错误的确切原因。
确保您可以访问数据节点(telnet 端口),以便可以从等式中排除通信问题。
嗯,问题出在安全组中。当我创建 EC2 实例时,我创建了一个新的安全组,我没有在其中配置允许端口打开以进行连接的规则。
在使用默认选项创建组时,我们必须在端口 22 添加 SSH 规则。为了获得 TCP 和 ICMP 访问权限,我们需要添加 2 个额外的安全规则。在入站规则下添加“All TCP”、“All ICMP”和“SSH (22)”,这应该可以正常工作。
如果我们使用现有的安全组,我们应该检查入站和出站规则。
希望你们都度过了一个愉快的假期。我正在尝试在 Amazon EC2 上设置 Hadoop 集群。使用命令 hadoop fs -copyFromLocal d.txt /user/ubuntu/data
将数据文件从本地磁盘复制到 hdfs 时,出现数据复制错误。日志中的错误如下
15/01/06 07:40:36 WARN hdfs.DFSClient: Error Recovery for null bad datanode[0] nodes == null
15/01/06 07:40:36 WARN hdfs.DFSClient: Could not get block locations. Source file /user/ubuntu/data/d.txt" - > Aborting... copyFromLocal: java.io.IOException: File /user/ubuntu/data/d.txt could only be replicated to 0 nodes, instead of 1
15/01/06 07:40:36 ERROR hdfs.DFSClient: Failed to close file /user/ubuntu/data/d.txt
现在,我一直在查看关于这个问题的 Whosebug 和其他论坛,我发现他们中的大多数人都在谈论 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。谁能告诉我哪里出错了?如果有人帮助我解决问题,我将不胜感激。
谢谢,
发生此异常的原因有多种。这里数据没有被写入数据节点。可能的原因有。
1) 配置的安全规则不允许正常通信。
2) 数据节点存储已满。
3) 如果数据节点的名称空间 ID 与集群的名称空间 ID 不同。
4) 如果数据节点参与块扫描和报告。
5) 配置块大小的负值 (dfs.block.size in hdfs-site.xml).
如果所有配置和安全规则都正确。然后你可以做下面的任务。
1) 停止datanode进程。
2) 删除datanode目录下的内容
3) 再次启动datanode
以上步骤是为了使集群id在datanode中正确。
注意:调试问题的最佳方法是检查数据节点和名称节点的日志。这将为您提供此错误的确切原因。
确保您可以访问数据节点(telnet 端口),以便可以从等式中排除通信问题。
嗯,问题出在安全组中。当我创建 EC2 实例时,我创建了一个新的安全组,我没有在其中配置允许端口打开以进行连接的规则。
在使用默认选项创建组时,我们必须在端口 22 添加 SSH 规则。为了获得 TCP 和 ICMP 访问权限,我们需要添加 2 个额外的安全规则。在入站规则下添加“All TCP”、“All ICMP”和“SSH (22)”,这应该可以正常工作。
如果我们使用现有的安全组,我们应该检查入站和出站规则。