已删除分区文件的分区表上的Spark sql查询失败

时间:2017-10-27 09:41:50

标签: hadoop apache-spark hive hdfs apache-spark-sql

以下是我正在尝试的内容,

  1. 根据当前小时在hive中创建分区表。
  2. 使用spark hive上下文并执行msck修复表。
  3. 手动删除其中一个添加的分区的hdfs文件夹。
  4. 再次使用spark hive上下文并执行 一个> msck修复   这不会删除已添加的没有hdfs文件夹的分区。   似乎是关于“msck修复”的已知行为 B个select * from tablexxx where(existing partition);   失败,异常:指向hdfs文件夹的Filenotfound异常   这是手动删除的。
  5. 对此行为的任何见解都会有很大帮助。

1 个答案:

答案 0 :(得分:0)

是的,MSCK REPAIR TABLE只会发现新分区,而不会删除“旧分区”。

使用删除了HDFS文件夹的外部配置单元表,我看到了两个解决方案

  1. 删除表(由于表是外部的,因此不会删除文件),然后使用相同的位置重新创建表,然后运行MSCK REPAIR TABLE。这是我首选的解决方案。
  2. 使用ALTER TABLE <table> DROP PARTITION <partition>
  3. 删除您删除的所有分区

    你在案件中观察到的可能与这些相关:https://issues.apache.org/jira/browse/SPARK-15044https://issues.apache.org/jira/browse/SPARK-19187