【问题标题】:Hadoop Data Replication errorHadoop 数据复制错误
【发布时间】:2015-01-06 01:11:24
【问题描述】:

希望你们都度过了一个愉快的假期。我正在尝试在 Amazon EC2 上设置 Hadoop 集群。使用命令hadoop fs -copyFromLocal d.txt /user/ubuntu/data 将数据文件从本地磁盘复制到 hdfs 时,出现数据复制错误。日志中的错误如下

15/01/06 07:40:36 WARN hdfs.DFSClient: 错误恢复 null bad datanode[0] 节点 == null

15/01/06 07:40:36 警告 hdfs.DFSClient:无法获取块位置。源文件 /user/ubuntu/data/d.txt" - > Aborting... copyFromLocal: java.io.IOException: 文件 /user/ubuntu/data/d.txt 只能复制到 0 个节点,而不是 1

15/01/06 07:40:36 错误 hdfs.DFSClient: 无法关闭文件 /user/ubuntu/data/d.txt

现在,我一直在查看 StackOverFlow 和其他论坛关于这个问题,我发现他们中的大多数人都在谈论 DataNodeTaskTracker 没有运行作为可能的原因和相关解决方案.但是这些东西在我的设置中运行良好。 JPS命令截图 http://i.imgur.com/vS6kRPP.png

来自 HadoopWiki,其他可能的原因是 DataNode 无法与服务器通信,通过网络或 Hadoop 配置问题或某些配置问题阻止了有效的双向通信。

我按照教程http://tinyurl.com/l2wv6y9 配置了hadoop-env.sh、core-site.xml、hdfs-site.xml 和mapred-site.xml。谁能告诉我哪里出错了?如果有人帮助我解决问题,我将不胜感激。

谢谢,

【问题讨论】:

    标签: hadoop amazon-web-services amazon-ec2 mapreduce


    【解决方案1】:

    嗯,问题出在安全组中。当我创建 EC2 实例时,我创建了一个新的安全组,我没有在其中配置允许端口打开以进行连接的规则。

    在使用默认选项创建组时,我们必须在端口 22 上添加 SSH 规则。为了获得 TCP 和 ICMP 访问权限,我们需要添加 2 个额外的安全规则。在入站规则下添加“All TCP”、“All ICMP”和“SSH (22)”,这应该可以正常工作。

    如果我们使用现有的安全组,我们应该检查入站和出站规则。

    【讨论】:

      【解决方案2】:

      确保您可以访问数据节点(telnet 端口),以便可以从等式中丢弃通信问题。

      【讨论】:

      • 感谢您的回复。首先,我是一个真正的新手。我不确定 telnet 端口意味着什么。其次,我可以毫无问题地从一个节点进行 SSH。
      【解决方案3】:

      由于多种原因,可能会发生此异常。这里数据没有被写入数据节点。可能的原因可能是。

      1) 配置的安全规则不允许正确通信。

      2) 数据节点存储已满。

      3) 如果数据节点的命名空间 id 与集群的不同。

      4) 如果数据节点参与块扫描和报告。

      5) 配置的块大小为负值(hdfs-site.xml 中的 dfs.block.size)。

      如果所有配置和安全规则都正确。然后您可以执行以下任务。

      1) 停止datanode进程。

      2) 删除datanode目录内的内容。

      3) 再次启动数据节点。

      以上步骤是为了让集群 id 在数据节点中正确。

      注意:调试问题的最佳方法是检查 datanode 和 namenode 的日志。这将为您提供此错误的确切原因。

      【讨论】:

      • 感谢您的回复。不幸的是,在再次执行 stop-format-start 之后,我仍然看到错误。
      • 1) 很有可能。我可以通过 ssh 访问其他任何实例。仅当我尝试将数据复制到 HDFS 时才会出现此问题。 2) 我相信我在所有节点中都有足够的存储空间。 3, 4, 5 ) 我如何检查命名空间 ID 或数据节点,或者它是否参与了块扫描和报告?
      • 如何在此处粘贴系统日志?我试过了,但评论太长了。
      • ssh 实际上并不是 hadoop 守护进程通信所必需的。集群 id 和 all 可以从数据节点存储目录中找到。在存储目录中,您可以看到一个名为 VERSIONS 的文件,查看此文件了解详细信息。在您的情况下,这可能不是原因,因为数据节点仍在运行。
      • 感谢 Amal 抽出时间回复。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-08
      • 1970-01-01
      • 1970-01-01
      • 2016-12-25
      • 1970-01-01
      相关资源
      最近更新 更多