解決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')把對應的分區也刪除掉就可以了。

如果已經刪除了分區目錄,也需要執行上以上的命令。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM