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

y0u0uwnf  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(654)

有一些关于 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);
hvvq6cgz

hvvq6cgz1#

谢谢你的帮助。我找到了解决办法。我在这里提供我自己的答案。
问题出在“CTA”上 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(在底层,它们使用相同的示例)。
当直线关闭文件系统示例时。它也会关闭thriftserver的文件系统示例。第二条直线尝试获取示例时,它总是报告“caused by:java.io.ioexception:filesystem closed”
请在此处检查此问题:
https://issues.apache.org/jira/browse/spark-21725
我没有使用 beeline 但cta的问题是一样的。
我的测试顺序:

insert into testTable1
values (11)

create table anotherTable as select 1

insert into testTable1
values (12)

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

相关问题