hadoop BlockMissingException

hadoop BlockMissingException,hadoop,hive,Hadoop,Hive,我得到以下错误: Diagnostics: org.apache.hadoop.hdfs.BlockMissingException: Could not obtain block: BP-467931813-10.3.20.155-1514489559979:blk_1073741991_1167 file=/user/oozie/share/lib/lib_20171228193421/oozie/hadoop-auth-2.7.2-amzn-2.jar Failing this attem

我得到以下错误:

Diagnostics: org.apache.hadoop.hdfs.BlockMissingException: Could not obtain block: BP-467931813-10.3.20.155-1514489559979:blk_1073741991_1167 file=/user/oozie/share/lib/lib_20171228193421/oozie/hadoop-auth-2.7.2-amzn-2.jar
Failing this attempt. Failing the application.
尽管我已经为/user/oozie/share/lib/directory设置了复制因子3。此路径下的所有JAR在3 datanode上都可用,但缺少几个JAR。
任何人都能提出为什么会发生这种情况以及如何防止这种情况。

我在尝试从hdfs读取文件时遇到了相同的异常。此链接中“客户端在连接到DataNodes时使用主机名”一节下的解决方案适用于我:

我将此XML块添加到“hdfs site.XML”并重新启动了datanode和namenode服务器:

<property>
    <name>dfs.client.use.datanode.hostname</name>
    <value>true</value>
    <description>Whether clients should use datanode hostnames when
      connecting to datanodes.
    </description>
</property>

dfs.client.use.datanode.hostname
真的
客户端是否应在以下情况下使用datanode主机名:
连接到数据节点。

请检查hdfs目录中文件的所有者,我遇到这个问题是因为所有者是“root”,当我将其更改为“your_user”时,问题得到了解决。

您是否尝试运行一些
hadoop fsck
命令?是,我尝试了hadoop fsck/user/oozie/share/lib/lib_20171228193421/-files-blocks-racks命令,响应是:/user/oozie/share/lib/lib_20171228193421/oozie/hadoop-auth-2.7.2-amzn-2.jar:损坏的块池BP-467931813-10.3.20.155-1514489559979块blk_1073741991缺少总大小为70594 B 0的1块。BP-467931813-10.3.20.155-1514489559979:blk_1073741991_1167 len=70594缺失!发生这种情况是因为您的一个数据节点坏了。例如,可能磁盘出现故障。看到这个了吗?我同意块复制的所有3个数据节点一定都坏了。但是现在有没有办法把那个街区弄回来。如何防止这种情况。在我的例子中,我们需要多次调整集群的大小,以便频繁地添加和删除新的DNs。那么我怎样才能避免这个例外呢。