gpt4 book ai didi

hadoop - Hive INSERT OVERWRITE LOCAL DIRECTORY 不起作用

转载 作者:可可西里 更新时间:2023-11-01 14:58:02 26 4
gpt4 key购买 nike

我正在使用 Cloudera 5.3.3 Hive。

我正在尝试执行以下查询,

shell>pwd
/home
shell> mkdir test; chmod 777 test;
shell> ls -al
drwxrwxrwx 3 jai jai 4096 Oct 5 06:45 test

hive query>INSERT OVERWRITE LOCAL DIRECTORY '/home/test/test1' SELECT * FROM some_table;

当我从 hive 客户端执行时,它工作正常,并在 /home/test 文件夹中创建输出文件,但如果我从 执行相同的操作,它不会创建文件直线

从运行 Hive 服务器 2 的计算机通过beeline 连接到 Hive 服务器 2

我正在以 jai 用户的身份从直线连接配置单元。文件夹/home/test

相同的查询,如果我指向 /tmp 文件夹(其中 test 文件夹具有 777 权限),则工作正常。它将 mapreduce 输出复制到 test1 文件夹中,该文件夹具有以下权限并创建为 hive 用户。

shell>pwd
/tmp
shell> ls -al
drwxrwxrwx 5 jai jai 4096 Oct 5 06:40 test

beeline as jai user> INSERT OVERWRITE LOCAL DIRECTORY '/tmp/test/test1' SELECT * FROM some_table;

shell> cd test;
shell> ls -al
drwxr-xr-x 3 hive hive 4096 Oct 5 06:37 test1

最佳答案

我认为观察到的行为可能与问题 HIVE-11666 有关.

Hive CLI writes to local host when INSERT OVERWRITE LOCAL DIRECTORY. But Beeline writes to HS2 local directory. For a user migrating from CLI to Beeline, it might be a big chance (sic).

解决方法可能是将其导出到 HDFS

INSERT OVERWRITE DIRECTORY 'hdfs://<cluster>/tmp/test/test1' SELECT * FROM some_table;

注意:不要忘记使用完全限定路径(以 hdfs// 开头),否则它将无法工作(参见 here)

那就简单搞定吧

hdfs dfs -get hdfs://<cluster>/tmp/test/test1/<file name>

关于hadoop - Hive INSERT OVERWRITE LOCAL DIRECTORY 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32943083/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com