有一些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);
答案 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;
请在此处查看此问题:
我没有使用beeline
,但CTAS的问题是一样的。
我的测试顺序:
insert into testTable1
values (11)
create table anotherTable as select 1
insert into testTable1
values (12)
在修复之前,create table as …
之后任何插入都会失败
修复后,这个问题就消失了。