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