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



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

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

因此,我更深入地研究了错误消息。 它抱怨未能从

.../.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);

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

问题出在失败的insert命令之前的"CTAS"create table as ...操作,这是由于文件系统的不当关闭。 明显的迹象是,将出现一条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 站点.xml

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

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

当直线关闭文件系统实例 时。它关闭了节俭服务器的 文件系统实例也是。第二次直线尝试获取实例,它将 始终报告"导致:java.io.IOException:文件系统关闭">

请在此处检查此问题:

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 …之后失败 修复后,此问题消失了。

最新更新