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');

 

posted @ 2020-07-17 11:31  singsong~  阅读(3276)  评论(0编辑  收藏  举报