我正在使用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 。
我将beive作为 jai 用户从beeline连接起来。 文件夹/ 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
答案 0 :(得分:0)
我认为观察到的行为可能与问题HIVE-11666有关。
当INSERT OVERWRITE LOCAL DIRECTORY时,Hive CLI写入本地主机。但Beeline写入HS2本地目录。对于从CLI迁移到Beeline的用户来说,这可能是一个很大的机会(原文如此)。
解决方法可能是将其导出到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>