更新时间:2024-11-29 GMT+08:00
执行load data inpath命令报错
问题现象
执行load data inpath报如下错误:
- 错误1:
HiveAccessControlException Permission denied. Principal [name=user1, type=USER] does not have following privileges on Object [type=DFS_URI, name=hdfs://hacluster/tmp/input/mapdata] for operation LOAD : [OBJECT OWNERSHIP]
- 错误2:
HiveAccessControlException Permission denied. Principal [name=user1, type=USER] does not have following privileges on Object [type=DFS_URI, name=hdfs://hacluster/tmp/input/mapdata] for operation LOAD : [INSERT, DELETE]
- 错误3:
SemanticException [Error 10028]: Line 1:17 Path is not legal ''file:///tmp/input/mapdata'': Move from: file:/tmp/input/mapdata to: hdfs://hacluster/user/hive/warehouse/tmp1 is not valid. Please check that values for params "default.fs.name" and "hive.metastore.warehouse.dir" do not conflict.
原因分析
当前登录的用户不具备操作此目录的权限或者文件目录格式不正确。
解决方案
Hive对load data inpath命令有如下权限要求,请对照下述要求是否满足:
- 文件的owner需要为执行命令的用户。
- 当前用户需要对该文件有读、写权限。
- 当前用户需要对该文件的目录有执行权限。
- 由于load操作会将该文件移动到表对应的目录中,所以要求当前用户需要对表的对应目录有写权限。
- 要求文件的格式与表指定的存储格式相同。如创建表时指定stored as rcfile,但是文件格式为txt,则不符合要求。
- 文件必须是HDFS上的文件,不可以用file://的形式指定本地文件系统上的文件。
- 文件名不能以下横线(_)或点(.)开头,以这些开头的文件会被忽略。
如下所示,如果用户test_hive load数据,正确的权限如下:
[root@192-168-1-18 duan]# hdfs dfs -ls /tmp/input2 16/03/21 14:45:07 INFO hdfs.PeerCache: SocketCache disabled. Found 1 items -rw-r--r-- 3 test_hive hive 6 2016-03-21 14:44 /tmp/input2/input.txt
父主题: 使用Hive