更新时间:2024-11-29 GMT+08:00
执行load data local inpath命令报错
问题现象
执行load data local inpath报如下错误:
- 错误1:
HiveAccessControlException Permission denied. Principal [name=user1, type=USER] does not have following privileges on Object [type=LOCAL_URI, name=file:/tmp/input/mapdata] for operation LOAD : [SELECT, INSERT, DELETE]
- 错误2:
HiveAccessControlException Permission denied. Principal [name=user1, type=USER] does not have following privileges on Object [type=LOCAL_URI, name=file:/tmp/input/mapdata] for operation LOAD : [OBJECT OWNERSHIP]
- 错误3:
SemanticException Line 1:23 Invalid path ''/tmp/input/mapdata'': No files matching path file:/tmp/input/mapdata
原因分析
当前登录的用户不具备操作此目录的权限或者在HiveServer所在节点上没有此目录。
解决方案
通常不建议使用本地文件加载数据到hive表。 建议先将本地文件放入HDFS,然后从集群中加载数据。
Hive对load data local inpath命令有如下权限要求,请对照下述要求是否满足:
- 由于所有的命令都是发送到主HiveServer上去执行的,所以要求此文件在HiveServer节点上。
- HiveServer进程是以操作系统上的omm用户启动的,所以要求omm用户对此文件有读权限,对此文件的目录有读、执行权限。
- 文件的owner需要为执行命令的用户。
- 当前用户需要对该文件有读、写权限。
- 要求文件的格式与表指定的存储格式相同。如创建表时指定stored as rcfile,但是文件格式为txt,则不符合要求。
- 文件名不能以下横线(_)或点(.)开头,以这些开头的文件会被忽略。
父主题: 使用Hive