先解釋下,因爲歷史緣由致使hive中的看到分區比hdfs中的文件夾不匹配,存在hive中分區數有,實際hdfs中無此文件夾。apache
spark中經過sparkSQL讀取hive中的該表時,將會出現異常。oop
解決方案:spa
1. 檢查該表是不是外部表,若是不是,將屬性修改成外部表屬性。code
這裏修改成外部表,目的是在刪除分區時,不會將已有的數據刪除。必要時,先作好備份處理。blog
alter table tablename set tblproperties('EXTERNAL'='TRUE');
2. 刪除異常分區hadoop
這裏嘗試過經過drop table方式來刪除表,可是發現會報錯。it
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException(message:Invalid partition key & values; keys [year, month, day, hour, ], values [2018, ])
因此這裏使用了刪除分區。spark
alter table tablename drop partition(pk_year=2018);
3.使用分區修復命令從新建立分區io
msck repair table tablename;