hive-”return code 1 from org.apache.hadoop.hive.ql.exec.MoveTask”問題


1.問題背景

需要將生成的數據放到hive中。

原本思路通過python的impala包插入,發現速度很慢:10條數據需要200多秒。

 

改用先將數據寫到hdfs中,然后通過load命令,將hdfs中的文件load到hive中。

load時出現”return code 1 from org.apache.hadoop.hive.ql.exec.MoveTask”錯誤。

 

2.問題出現過程

過程:

  • hive中新建表
  • 將數據(沒有列名)上傳到hdfs
  • load命令將數據loadhive

hive中新建表

 

建表語句:

 

create table my_student(id int, name string) 
row format delimited fields Terminated by ',' lines terminated by '\n'stored AS textfile

  

 

數據上傳

 

# 數據上傳:
from hdfs.client import Client
client = Client(hadoop_http_path, root="/", timeout=10000, session=False)
client.write(hdfs_path, data, overwrite=True, append=False, encoding='utf-8')

 

 

執行hive的load命令

LOAD DATA INPATH hdfs_path INTO TABLE table_name

 或者在python中執行。

 

3.問題

執行load命令(在DBeaver或者python中),會出現以下錯誤:

 

 

4.問題和解決方法

查看日志:

查看http://hadoop_master_ip:50070/logs下的hadoop-hdfs-namenode-xxxx.log日志
curl http://hadoop_master_ip:50070/logs/hadoop-hdfs-namenode-xxx.log >> a.txt
cat a.txt | grep 時間

 

 

 

是由於"destination exists" 原因導致MoveTask錯誤。

 

解決方法:

在load命令中加入overwrite,覆蓋之前的內容。

load命令的正確寫法:

LOAD DATA INPATH hdfs_path OVERWRITE INTO TABLE table_name

  

經測試,可以解決這個日志報的錯誤。

 

5.后續

出現這個錯誤,網上有說是move權限原因:可以通過關閉hive的文件權限繼承 hive.warehouse.subdir.inherit.perms=false 來規避該問題。

MoveTask錯誤可能有多種原因,一切還是看日志報的什么錯。

 


免責聲明!

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



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