解决Spark读取Hive分区表出现Input path does not exist的问题 2016-12-15 13:43:06 假设这里出错的表为test表。 ## 现象 Hive读取正常,不会报错,Spark读取就会出现: ``` org.apache.hadoop.mapred.InvalidInputException: Input path does not exist: hdfs://testcluster/user/hive/warehouse/.... ``` 在hive中执行`desc formatted test;`然后找到hdfs存储路径。然后`hdfs dfs -ls <your table path>`会发现,报错的路径确实不存在。 这也能说明为什么Spark读取会报错,确实找不到那个路径了。 ## 问题分析 在hive中执行`show partitions test`,查看test表对应的所有分区。 看了下之前添加过的所有分区,发现有个分区对应的hdfs目录不存在了(被人为删除了,一般是清理历史数据)。但是这个分区并没有执行`alter table test drop partition p=xxx`这样删除掉,因为即便是不删除hive也能正常读取。 但是到Spark这就不行了,Spark加载hive分区表数据会根据show partitions中的分区去加载,发现目录缺失就会出错了。 ## 解决方案 删除分区目录时,同时执行`alter table test drop partition (p='xxx')`把对应的分区也删除掉就可以了。 如果已经删除了分区目录,也需要执行上以上的命令。 非特殊说明,均为原创,原创文章,未经允许谢绝转载。 原始链接:解决Spark读取Hive分区表出现Input path does not exist的问题 赏 Prev 自己动手为Spark 2.x添加ALTER TABLE ADD COLUMNS语法支持 Next git diff a b与git diff b a的区别