与Apache Hive 1.1.0和.hiverc
相关的问题我已经安装了apache hive 1.1.0。 默认情况下hive hdfs home:/ user / hive / warehouse, hdfs temp:/ tmp
我在unix机器上有用户hdpadmin,hiveuser 现在我有我的应用程序特定的HDFS路径
Probelm:数据库是在默认仓库目录而不是应用程序特定目录中创建的:/ 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>
答案 0 :(得分:0)
如Apache Hive Wiki page所述:
<强> hive.exec.scratchdir 强>
Hive作业的划痕空间。 Hive使用此目录存储查询的不同map / reduce阶段的计划,以及存储这些阶段的中间输出。
<强> hive.metastore.warehouse.dir 强>
仓库的默认数据库的位置。
上述说明本质上意味着更改临时目录位置不会帮助您处理数据库位置,因为这只是Hive用于存储MapReduce作业进度/计划以及任何其他中间数据的临时位置。
因此,您可以使用location参数或更改配置单元仓库目录,而不是更改暂存目录。在您的情况下,请使用此:
CREATE DATABASE temp LOCATION '/app/myApp/HIVE/WAREHOUSE';
OR
set hive.metastore.warehouse.dir='/app/myApp/HIVE/WAREHOUSE';
CREATE DATABASE temp;
当您要创建数据库的位置不同时,可以使用前者,而当创建的所有数据库指向同一位置时,应使用后者。
P.S。您还可以使临时目录指向与数据库相同的位置;但是使用相同的临时和数据库位置是没有意义的,除非你有一个特定的用例需要这种方式,因为Hive会根据执行查询的用户创建很多目录。
答案 1 :(得分:0)
在配置单元中创建数据库时,其信息以及默认位置存储在Hive Metastore DB中(tbl:DBS和field:DB_LOCATION_URI)。因此,在配置单元配置中更改配置单元仓库路径属性不会产生任何影响。解决此问题的两种方法(假设您已经更新了配置单元配置并重新启动了元存储)-