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

一、问题描述

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用户拥有。

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

设置完之后如下图,再次进入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');

猜你喜欢

转载自blog.csdn.net/weixin_49114503/article/details/134921836
今日推荐