下面是我按顺序尝试的,
- 根据当前小时在 Hive 中创建分区表。
- 使用Spark Hive上下文并执行MSCK修复表。
- 手动删除其中一个添加分区的 HDFS 文件夹。
- 再次使用 Spark Hive 上下文并执行A> MSCK 修复 这不会删除已添加的没有HDFS文件夹的分区。 似乎是关于"MSCK修复"的已知行为b> 从表XXX中选择*,其中(现有分区); 失败并出现异常:文件未找到指向 hdfs 文件夹的异常 这是手动删除的。
有关此行为的任何见解都将有很大帮助。
是的,MSCK REPAIR TABLE
只会发现新分区,而不会删除"旧"分区。
使用删除HDFS文件夹的外部配置单元表,我看到两个解决方案
- 删除表
- (不会删除文件,因为该表是外部表),然后使用相同的位置重新创建表,然后运行
MSCK REPAIR TABLE
。这是我首选的解决方案。
删除 - 使用
ALTER TABLE <table> DROP PARTITION <partition>
删除的所有分区
您在案例中观察到的内容可能与以下情况有关:https://issues.apache.org/jira/browse/SPARK-15044 和https://issues.apache.org/jira/browse/SPARK-19187