删除hive的分区元数据,spark总是读取到已经删掉的分区
org.apache.hadoop.mapred.InvalidInputException: Input path does not exist: hdfs://testcluster/user/hive/warehouse/....
问题分析
在hive中执行show partitions test
,查看test表对应的所有分区。
看了下之前添加过的所有分区,发现有个分区对应的hdfs目录不存在了(被人为删除了,一般是清理历史数据)。但是这个分区并没有执行alter table test drop partition p=xxx
这样删除掉,因为即便是不删除hive也能正常读取。
但是到Spark这就不行了,Spark加载hive分区表数据会根据show partitions中的分区去加载,发现目录缺失就会出错了。
解决方式 1 ,shell 命令删除报错分区
删除分区目录时,同时执行alter table test drop partition (p='xxx')
把对应的分区也删除掉就可以了。
如果已经删除了分区目录,也需要执行上以上的命令。
解决方式 2,hue 页面操作删除报错分区