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;

 

posted @ 2019-08-26 19:45  硅谷工具人  阅读(1660)  评论(0编辑  收藏  举报
成功之道,在于每个人生阶段都要有不同的目标,并且通过努力实现自己的目标,毕竟人生不过百年! 所有奋斗的意义在于为个人目标实现和提升家庭幸福,同时能推进社会进步和国家目标! 正如古人讲的正心诚意格物致知,修身齐家治国平天下。