【发布时间】:2017-12-09 10:07:43
【问题描述】:
我们的摄取过程存在问题,导致分区被添加到 Hive 中的表中,但 HDFS 中的路径实际上并不存在。我们已经解决了这个问题,但我们仍然有这些坏分区。当使用 Tez 查询这些表时,我们得到 FileNotFound 异常,指向 HDFS 中不存在的位置。如果我们使用 MR 而不是 Tez,查询可以工作(这让我很困惑),但它太慢了。
有没有办法列出所有有这个问题的分区? MSCK REPAIR 似乎处理了相反的问题,即数据存在于 HDFS 中但 Hive 中没有分区。
编辑:更多信息。 这是文件未找到异常的输出:
java.io.FileNotFoundException: File hdfs://<server>/db/tables/2016/03/14/mytable does not exist.
如果我运行show partitions <db.mytable>,我将获得所有分区,包括dt=2016-03-14 的一个。
show table extended like '<db.mytable>' partition(dt='2016-03-14' 返回相同的位置:
location:hdfs://server/db/tables/2016/03/14/mytable.
【问题讨论】:
-
另一个分区的位置如何?
-
其他分区看起来几乎一样:
location:hdfs://server/db/tables/2017/06/07/mytable。唯一的区别是它确实存在。 -
请检查路径之一(metastore / hdfs)是否包含白色字符