是否可以从 HDFS 手动删除 Hive 表的分区目录而不删除分区

问题描述 投票:0回答:2

假设我有一个分区的配置单元表

>show partitions db.my_table;
+----------------------------------+
|             partition            |
+----------------------------------+
|        in_date=20-09-2020        |
|        in_date=21-09-2020        |
|        in_date=22-09-2020        |
+----------------------------------+

如果我手动从 HDFS 删除分区目录

$hadoop fs -rm -r 'path/to/table/in_date=20-09-2020';

但不要从 hive 表中删除分区

它会导致任何真正的问题吗(除了表元数据中存在孤立的分区名称)?

我已验证的内容

hive 表查询工作正常(对于外部表和内部表)

>select * from db.my_table;   --works fine
>show partitions db.my_table  --shows orphaned partitions,not a real problem

编辑:聚合函数查询(如 COUNT()、MAX() 等)失败并出现错误
        输入路径不存在:path/to/table/in_date=20-09-2020

有谁知道这是否会导致其他问题/破坏其他应用程序?

hadoop hive
2个回答
1
投票

在 Tez 上,它会导致 FileNotFound 异常,因为分区元数据存在且文件夹不存在。也删除分区:

ALTER TABLE DROP PARTITION(in_date='20-09-2020')


0
投票

TLDR:它会破坏应用程序,因为元数据将指示分区存在,但这是错误的。

长答案: 是的。如果你讨厌自己,就去做吧。基本上,HDFS 上任何引用元存储的应用程序都会找到该分区,然后尝试对其进行任何活动。当它尝试这样做时,HDFS 将崩溃,因为它找不到该目录。所以,即使你成功了,你也会失败(不,你不会在这里成为“Baazigar”)。

© www.soinside.com 2019 - 2024. All rights reserved.