Datagrip/Hue 使用load data命令加载数据到HDFS上, 报错:invalid path

在尝试使用Datagrip或Hue执行`LOAD DATA`命令将文件从Linux系统加载到HDFS的Hive表时,遇到路径错误。尽管在Linux环境下命令能正常工作,但在数据IDE中执行则提示找不到文件。问题根源在于文件的路径解析和用户权限。解决方案包括确保使用完整URI,并为涉及的目录和文件添加适当权限,尤其是对于 `/root` 目录的执行权限。由于Hive服务实际使用的是非root用户(如hive),因此推荐将文件存放在非 `/root` 目录以避免权限问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

命令:

load data local inpath '/root/my_data/01_cookie.txt' into table test.t_cookie;

在linux系统hive中执行,把/root/my_data/01_cookie.txt文件加载到集群中hdfs的/user/hive/warehouse下test库t_cookie表,命令成功。

但是该语句放到datagrip上或者Hue上执行,显示“路径错误,找不到文件”

①首先排除路径问题

能在Linux系统下执行,则说明路径没有问题。

local关键字表示Hive在本地寻找文件(即Linux系统下)(拷贝文件),本地文件路径也可以指定完整的URI: 

'file:///root/my_data/01_cookie.txt'

若从hdfs上导数据,完整URI为:(移动文件,非拷贝,)

'hdfs://namenode:端口号/root/my_data/01_cookie.txt'

如果没有Local关键字,Hive会根据完整的URI加载数据。

如果没有Local关键字,文件路径没有指定完整的URI,Hive默认从HDFS的目录下寻找文件(参数fs.default.name指定)

补充:如果对HiveServer2服务运行此命令。这里的本地文件系统指的是Hiveserver2服务所在机器的本地Linux文件系统,不是Hive客户端所在的本地文件系统。

②用户权限问题

linux系统上是root用户,在datagrip上也是用root用户连接Hive,按理来说,用户相同,权限也应该一样。但是该命令在datagrip和Hue上执行都显示找不到文件,后面给/root文件夹、/my_data文件夹和01_cookie.txt文件全部加上“777”的权限就可以了。

排查了一番,原来是其他用户组没有权限显示找不到文件是因为:没有给其他用户组对/root文件夹添加可执行权限。于是:

chmod o+x /root
chomd o+x /root/my_data
chmod o+r /root/my_data/01_cookie.txt

上层文件夹添加可执行权限才能进入文件夹中查找文件,文件要添加可读权限才能被读。

但是,不建议给其他用户组增加对/root的权限

那么问题来了,使用root用户通过datagrip连接的Hive,为什么会被分到其他用户组呢?

Hive的管理员用户在Cloudera Manager中叫做hive,而我们使用root用户连接,但实际操作还是hive用户在实现管理,hive用户是没有权限读取/root用户目录下得文件的。(root用户登录Linux系统是root用户有权限,root用户通过datagrip连接Hive实际是hive用户。)

建议做法:即使是root用户登录Linux系统,还是不要把文件放在/root目录下,其他用户组想要读取文件需要修改对/root目录的权限,不安全。最好把文件放到非/root目录下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值