当前位置:   article > 正文

hive的load报错Error: EXECUTION FAILED: Task MOVE error HiveException: [Error 20531] Unable to move sour_unable to move source hdfs

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)
  • 1

插入语句:

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

在这里插入图片描述

二、解决方法

Unable to move source hdfs,不能移动,自然就想到了没有权限的问题,果然,一查看发现/tmp/logs这个文件是hdfs的owner,所以hive用户是没有权限移动的。

现在我们需要做的就是,让logs是hive用户拥有。

# 查看文件所属用户、组信息
hadoop fs -ls /tmp/logs
# 赋权,将用户、组设置为hive
hadoop fs -chown -R hive:hive /tmp/logs
  • 1
  • 2
  • 3
  • 4

设置完之后如下图,再次进入beeline客户端执行load命令即可。
在这里插入图片描述

注意: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');
  • 1
  • 2
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/710849
推荐阅读
相关标签
  

闽ICP备14008679号