先解释下,由于历史原因导致hive中的看到分区比hdfs中的文件夹不匹配,存在hive中分区数有,实际hdfs中无此文件夹。
spark中通过sparkSQL读取hive中的该表时,将会出现异常。
解决方案:
1. 检查该表是否是外部表,如果不是,将属性修改为外部表属性。
这里修改为外部表,目的是在删除分区时,不会将已有的数据删除。必要时,先做好备份处理。
alter table tablename set tblproperties('EXTERNAL'='TRUE');
2. 删除异常分区
这里尝试过通过drop table方式来删除表,但是发现会报错。
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, ])
所以这里使用了删除分区。
alter table tablename drop partition(pk_year=2018);
3.使用分区修复命令重新创建分区
msck repair table tablename;