【问题标题】:Hive failed to create /user/hive/warehouseHive 未能创建 /user/hive/warehouse
【发布时间】:2013-09-28 15:57:50
【问题描述】:

我刚开始使用 Apache Hive,我正在使用本地 Ubuntu 机器 12.04、Hive 0.10.0 和 Hadoop 1.1.2。

按照 Apache 网站上的官方“Getting Started”指南,我现在卡在 Hadoop 命令中,使用指南中的命令创建 hive 元存储:

$ $HADOOP_HOME/bin/hadoop fs -mkdir       /user/hive/warehouse

错误是mkdir: failed to create /user/hive/warehouse

Hive 在特定模式下是否需要 hadoop?我知道除了更新 JAVA_HOME 之外,我不需要对我的 Hadoop 安装做太多事情,因此它处于独立模式。我确信 Hadoop 本身正在运行,因为我运行的是 hadoop 安装附带的 PI 示例。

另外,另一个创建/tmp 的命令显示/tmp 目录已经存在,所以它没有重新创建,/bin/hadoop fs -ls 列出了当前目录。

那么,我该如何解决呢?

【问题讨论】:

    标签: hadoop hive


    【解决方案1】:

    文档的几乎所有示例都有此命令错误。就像 unix 一样,除非您已经创建了父目录,否则您也需要“-p”标志来创建父目录。此命令将起作用。

    $HADOOP_HOME/bin/hadoop fs -mkdir -p    /user/hive/warehouse
    

    【讨论】:

      【解决方案2】:

      在本地系统上运行 hive 时,只需添加到 ~/.hiverc:

      SET hive.metastore.warehouse.dir=${env:HOME}/Documents/hive-warehouse;
      

      您可以指定任何文件夹用作仓库。显然,任何其他 hive configuration 方法都可以(例如 hive-site.xml 或 hive -hiveconf)。

      这可能是 Ambarish Hazarnis 在说“或在您的主目录中创建仓库”时牢记的。

      【讨论】:

      • 我的必须在 MacOS 上的 /usr/local/Cellar/hive/2.3.1/libexec/conf 内创建(使用 HomeBrew 作为包管理器)
      【解决方案3】:

      这似乎是一个权限问题。您有权访问根文件夹 / 吗? 尝试以下选项-

      1. Run command as superuser
      
      OR
      
      2.Create the warehouse in your home directory. 
      

      如果这有帮助,请告诉我们。祝你好运!

      【讨论】:

      • 是的,事实证明这是一个简单的权限问题,因此“sudo bin/hadoop fs -mkdir /user/hive/warehouse”成功了。谢谢!
      【解决方案4】:

      在 spark 配置中设置 hadoop 属性时,前缀为spark.hadoop

      因此设置

      conf.set("spark.hadoop.hive.metastore.warehouse.dir","/new/location")
      

      这适用于旧版本的 Spark。 spark 2.0.0 中的属性发生了变化

      【讨论】:

        【解决方案5】:

        为遇到同样问题的 Cloudera CDH 用户添加参考答案。

        如果您使用 Cloudera CDH 分发版,请确保您已按照以下步骤操作:

        • 通过单击桌面图标启动 Cloudera Manager(Express / Enterprise)。
        • 在浏览器中打开 Cloudera Manager 页面
        • 启动所有服务

        Cloudera 默认创建 /user/hive/warehouse 文件夹。只是 YARN 和 HDFS 可能无法启动并运行以访问此路径。

        【讨论】:

          【解决方案6】:

          虽然这是一个简单的权限问题,但我在上面的评论中使用 sudo 解决了这个问题,但有几点需要注意:

          1. 在主目录中创建它应该也可以,但是您可能需要更新 metastore 路径的 hive 设置,我认为默认为 /user/hive/warehouse

          2. 我在使用 Hive shell 时遇到了另一个 CREATE TABLE 语句错误,错误是这样的:

          hive> CREATE TABLE poke (foo INT, bar STRING); 失败:元数据错误:MetaException(消息:得到异常:java.io.FileNotFoundException 文件文件:/user/hive/warehouse/pokes 不存在。) FAILED:执行错误,从 org.apache.hadoop.hive.ql.exec.DDLTask 返回代码 1

          这是另一个权限问题,您必须创建一个名为“hive”的组,然后将当前用户添加到该组并将 /user/hive/warehouse 的所有权更改为该组。之后,它的工作原理。详情可参考以下链接:

          http://mail-archives.apache.org/mod_mbox/hive-user/201104.mbox/%3CBANLkTinq4XWjEawu6zGeyZPfDurQf+j8Bw@mail.gmail.com%3E

          【讨论】:

            【解决方案7】:

            如果您正在运行 linux 检查(在 hadoop core-site.xml 中)数据目录和权限,看起来您已经保留了默认值 /data/tmp 并且我在大多数情况下将获得 root 权限.. 更改 xml 配置文件,删除 /data/tmp 并运行 fs 格式(修改核心 xml 配置后的 OC)

            【讨论】:

              【解决方案8】:

              我建议使用更高版本的 hive,即 1.1.0 版本,0.10.0 有很多 bug。

              【讨论】:

                【解决方案9】:
                • 运行此命令并尝试创建一个目录,它将授予用户在 hdfs /user 目录中的完全权限。 hadoop fs -chmod -R 755 /user

                【讨论】:

                  【解决方案10】:

                  我使用 MacOS 和 homebrew 作为包管理器。我必须将 hive-site.xml 中的属性设置为

                  <property>
                      <name>hive.metastore.warehouse.dir</name>
                      <value>/usr/local/Cellar/hive/2.3.1/libexec/conf/warehouse</value>
                  </property>
                  

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 2019-09-16
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2015-04-01
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多