hive的load報錯Error: EXECUTION FAILED: Task MOVE error HiveException: [Error 20531] Unable to move source hdfs:


hive在進行數據load的時候報錯。

 

Error: EXECUTION FAILED: Task MOVE error HiveException: [Error 20531] Unable to move source hdfs://nameservice1/tmp/logs to destination hdfs://nameservice1/inceptor1/user/hive/warehouse/test_0715.db/hive/test_partiton_date/ds=2020-07-18/logs (state=08S01,code=20531)

 

--插入語句

load data inpath '/tmp/logs'  
into table test_0715.test_partiton_date 
partition(ds='2020-07-19');

 

 

 

 

Unable to move source hdfs,不能移動,自然就想到了沒有權限的問題,果然,一查看發現/tmp/logs這個文件是hdfs的owner,所以hive用戶是沒有權限移動的。

現在我們需要做的就是,讓logs是hive用戶擁有。如下所示,切換訪問hdfs的用戶,把logs上傳到了hive權限的目錄下。

 

#linux切換訪問hdfs用戶為hive
export HADOOP_USER_NAME=hive

 

 

 

注意:1、其實不一定要logs的owner是hive,logs的父目錄的owner是hive也可以。
            2、load完了之后,hdfs的logs文件就會被移動到分區目錄下。如上圖所示,上傳上去的文件被load后就沒有了。
 
可以看出,load命令其實就是mv文件而已,但是為什么還會選擇load呢,原因很簡單,其實在load的時候,不需要你手動創建分區,load命令直接幫你創建了。
--如果使用load,這一步是不需要的,使用hdfs的mv或者local的put到分區目錄,需要新建分區。
alter
table test_partiton_date ADD PARTITION (ds='2020-07-19');

 


免責聲明!

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



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