hive分区与实际分区文件不匹配导致spark读文件出错的问题解决

先解释下,由于历史原因导致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;

猜你喜欢

转载自www.cnblogs.com/30go/p/11414489.html