zoukankan      html  css  js  c++  java
  • 解决Spark读取Hive分区表出现Input path does not exist的问题

    假设这里出错的表为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')把对应的分区也删除掉就可以了。

    如果已经删除了分区目录,也需要执行上以上的命令。

  • 相关阅读:
    mysql5.7 ERROR 1045 (28000): Access denied for user解决方法
    C++ json解决方案
    Gitblit无法查看单个文件解决方案
    git 拉取指定的远程分支(三种方式)
    全栈12
    git commit之后,想撤销commit
    video
    iframe
    git恢复之前版本的两种方法reset、revert
    Eclipse
  • 原文地址:https://www.cnblogs.com/jasondan/p/6186552.html
Copyright © 2011-2022 走看看