Hive / Hadoop间歇性故障:无法将源移动到目标

时间:2018-02-02 23:31:24

标签: hadoop hive apache-spark-sql

有一些SO文章关于Hive/Hadoop"无法移动来源"错误。他们中的许多人指出了许可问题。

但是,在我的网站中,我看到了同样的错误,但我确信它与权限问题无关。这是因为问题是间歇性的 - 它有一天工作但在另一天失败了。

因此,我更深入地了解了错误消息。它抱怨未能离开

.../.hive-stating_hive.../-ext-10000/part-00000-${long-hash}

目标路径

的源路径
.../part-00000-${long-hash}

文件夹。这个观察会和某人敲响钟声吗?

这个错误是由一个超级简单的测试查询触发的:只需在测试表中插入一行(见下文)

错误消息

org.apache.hadoop.hive.ql.metadata.HiveException: 
Unable to move source 
hdfs://namenodeHA/apps/hive/warehouse/some_db.db/testTable1/.hive-staging_hive_2018-02-02_23-02-13_065_2316479064583526151-5/-ext-10000/part-00000-832944cf-7db4-403b-b02e-55b6e61b1af1-c000 
to destination 
hdfs://namenodeHA/apps/hive/warehouse/some_db.db/testTable1/part-00000-832944cf-7db4-403b-b02e-55b6e61b1af1-c000;

触发此错误的查询(但只是间歇性地)

insert into testTable1
values (2);

1 个答案:

答案 0 :(得分:1)

感谢所有帮助。我找到了解决方案。我在这里提供自己的答案。

问题出在" CTAS"由于文件系统关闭不当而导致create table as ...命令失败之前的insert操作。告诫标志是将显示IOException: Filesystem closed消息以及失败的HiveException: Unable to move source ... to destination操作。 (我发现Spark Thrift服务器的日志消息不是我的应用程序日志)

Caused by: java.io.IOException: Filesystem closed
  at org.apache.hadoop.hdfs.DFSClient.checkOpen(DFSClient.java:808)
  at org.apache.hadoop.hdfs.DFSClient.getEZForPath(DFSClient.java:3288)
  at org.apache.hadoop.hdfs.DistributedFileSystem.getEZForPath(DistributedFileSystem.java:2093)
  at org.apache.hadoop.hdfs.client.HdfsAdmin.getEncryptionZoneForPath(HdfsAdmin.java:289)
  at org.apache.hadoop.hive.shims.Hadoop23Shims$HdfsEncryptionShim.isPathEncrypted(Hadoop23Shims.java:1221)
  at org.apache.hadoop.hive.ql.metadata.Hive.moveFile(Hive.java:2607)

解决方案实际上来自另一篇SO文章:https://stackoverflow.com/a/47067350/1168041

但是在这里我提供了一篇摘录,以防文章消失:

  

将属性添加到hdfs-site.xml

<property>
    <name>fs.hdfs.impl.disable.cache</name>
    <value>true</value>
</property> 
     

原因:spark和hdfs使用相同的api(在底部他们使用相同的实例)。

     

直线关闭文件系统实例时。它关闭了节俭服务器   文件系统实例也是。第二条直线尝试获取实例,它会   总是报告&#34;引起:java.io.IOException:文件系统关闭&#34;

     

请在此处查看此问题:

     

https://issues.apache.org/jira/browse/SPARK-21725

我没有使用beeline,但CTAS的问题是一样的。

我的测试顺序:

insert into testTable1
values (11)

create table anotherTable as select 1

insert into testTable1
values (12)

在修复之前,create table as …之后任何插入都会失败  修复后,这个问题就消失了。