【问题标题】:Hive INSERT OVERWRITE LOCAL DIRECTORY not workingHive INSERT OVERWRITE LOCAL DIRECTORY 不起作用
【发布时间】:2015-10-05 07:13:46
【问题描述】:

我正在使用 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 用户的身份从直线连接 hive。 文件夹 /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

【问题讨论】:

  • 会不会是安全设置?例如,您可以在 Sentry 中授予/拒绝对 HiveServer2 的特权,旧版 Hive 客户端不会尊重这些特权。
  • @HellmarBecker 并且 HiveServer2 日志中没有错误条目。
  • 我面临着类似的问题。你能解决这个问题吗?

标签: hadoop hive hdfs cloudera


【解决方案1】:

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

Hive CLI 在 INSERT OVERWRITE LOCAL DIRECTORY 时写入本地主机。但直线写入 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>

【讨论】:

    猜你喜欢
    • 2015-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 2020-04-02
    相关资源
    最近更新 更多