【问题标题】:Hive Warehouse path uses - default path rather my own hdfs pathHive Warehouse 路径使用 - 默认路径而不是我自己的 hdfs 路径
【发布时间】:2020-01-16 16:40:51
【问题描述】:

与 Apache Hive 1.1.0 和 .hiverc 相关的问题

我已经安装了 apache hive 1.1.0。 默认情况下 hive hdfs home : /user/hive/warehouse, hdfs 温度:/tmp

我在 unix 机器上有用户 hdpadmin, hiveuser 现在我有了特定于应用程序的 HDFS 路径

问题:正在默认仓库目录而不是应用程序特定目录中创建数据库:/app/myApp/HIVE/WAREHOUSE

解决办法是什么?

[root@cdh1 ~]# su - hiveuser
[hiveuser@cdh1 ~]$ vim .hiverc [created a hiverc file]
SET hive.metastore.warehouse.dir=/app/myApp/HIVE/WAREHOUSE;
SET hive.exec.scratchdir=/app/myApp/HIVE/TMP;
save and close
[hiveuser@cdh1 ~]$ hive

[hiveuser@cdh1 ~]$ hive

Logging initialized using configuration in jar:file:/opt/cloudera/parcels/CDH-5.4.5-1.cdh5.4.5.p0.7/jars/hive-common-1.1.0-cdh5.4.5.jar!/hive-log4j.properties
WARNING: Hive CLI is deprecated and migration to Beeline is recommended.
hive> set hive.metastore.warehouse.dir;
hive.metastore.warehouse.dir=/app/myApp/HIVE/WAREHOUSE
hive> set hive.exec.scratchdir;
hive.exec.scratchdir=/app/myApp/HIVE/TMP
hive> create database temp;
OK
Time taken: 0.561 seconds
hive> dfs -ls /app/myApp/HIVE/WAREHOUSE;  ['temp' database not shown]
hive> desc database temp; [probelm: Creating in the default warehouse path rather my path : /app/myApp/HIVE/WAREHOUSE] 
OK
temp hdfs://nameservice1/user/hive/warehouse/temp.db hiveuser   USER    
Time taken: 0.217 seconds, Fetched: 1 row(s)
hive>

【问题讨论】:

    标签: hadoop hive


    【解决方案1】:

    如 Apache Hive Wiki page 中所述:

    hive.exec.scratchdir

    Hive 作业的暂存空间。 Hive 使用此目录来存储查询的不同 map/reduce 阶段的计划,以及存储这些阶段的中间输出。

    hive.metastore.warehouse.dir

    仓库默认数据库的位置。

    上述解释本质上意味着更改临时目录位置不会帮助您处理数据库位置,因为这只是 Hive 用于存储 MapReduce 作业进度/计划和任何其他中间数据的临时位置。

    因此,您可以使用 location 参数或更改 hive 仓库目录,而不是更改临时目录。在你的情况下,请使用这个:

    CREATE DATABASE temp LOCATION '/app/myApp/HIVE/WAREHOUSE';
    

    set hive.metastore.warehouse.dir='/app/myApp/HIVE/WAREHOUSE';
    CREATE DATABASE temp;
    

    当创建数据库的位置不同时可以使用前者,而当所有正在创建的数据库都指向同一个位置时应该使用后者。

    附:您还可以让您的暂存目录指向与您的数据库相同的位置;但是将同一位置用于暂存和数据库是没有意义的,除非您有特定的用例需要这种方式,因为 Hive 会根据执行查询的用户创建大量目录。

    【讨论】:

    • 感谢您的回复。我能够在 /app/myApp/HIVE/WAREHOUSE 中创建临时数据库,即使我想要 hive exec scratch directory also in /app/myApp/HIVE/TMP .hiverc 有 SET hive.exec.scratchdir=/app/myApp/HIVE/TMP;,但我没有看到日志不是那里
    • 但是在我们的工作位置,我们在创建数据库时不会给出类似的位置路径。但是使用 .hiverc 路径它会自动创建 SET hive.metastore.warehouse.dir=/app/myApp/HIVE/WAREHOUSE; SET hive.exec.scratchdir=/app/myApp/HIVE/TMP;,我们喜欢这样吗
    • 你使用beeline还是hive cli?
    • @NarayanaBasetty 我已经编辑了我的答案。如果这满足您的要求,请告诉我。
    • 您好先生,我在.hiverc/home/hiveuser/.hiverc文件中保持不变,但数据库在默认路径中创建。当我们登录到 $ hive 时,这个 .hiverc 文件加载并设置仓库路径,你用.hiverc文件试过了吗??请用我的方法测试
    【解决方案2】:

    在 hive 中创建数据库时,其信息与默认位置一起存储在 Hive Metastore DB 中(tbl:DBS 和 field:DB_LOCATION_URI)。因此,在 hive 配置中更改 Hive 仓库路径属性不会产生任何影响。解决此问题的两种方法(假设您已经更新了 hive 配置并重新启动了 metastore)-

    • 重新创建数据库或使用新数据库。
    • 更新上述表格以获得所需的 Hive 数据库。

    【讨论】:

      猜你喜欢
      • 2019-06-11
      • 2013-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-02
      • 2011-05-02
      • 2016-11-14
      • 1970-01-01
      相关资源
      最近更新 更多