23

文件夹metastore_db是在我运行 Hive 查询的任何目录中创建的。有没有办法metastore_db在一个定义的位置只有一个并阻止它在所有地方被创建?有什么关系hive.metastore.local吗?

4

2 回答 2

39

这里感兴趣的属性是javax.jdo.option.ConnectionURL。此属性的默认值为jdbc:derby:;databaseName=metastore_db;create=true。此值指定您将使用嵌入式 derby 作为 Hive 元存储,并且元存储的位置是metastore_db。如果 Metastore 不存在,也会创建它。

请注意,元存储 ( metastore_db) 的位置是相对路径。因此,它是在您启动 Hive 的地方创建的。如果您将此属性(在您的 hive-site.xml 中)更新为某个位置的绝对路径,则将从该位置使用元存储。

我必须警告您,嵌入式 derby 元存储一次只能由一个用户访问。Hive 默认使用嵌入式 derby,以提供开箱即用的体验并便于测试。对于任何实际系统,我建议迁移到独立的“真实”数据库,如 MySQL 或 PostgreSQL。此处提供了有关如何执行此操作的说明。

于 2012-11-30T19:40:12.517 回答
5

由于您使用嵌入式德比模式。使用单个 metastore_db 位置。您需要更改以下属性。

<property>
  <name>javax.jdo.option.ConnectionURL</name>  
  <value>jdbc:derby:;databaseName=/<file-location>/metastore_db;create=true</value>
  <description>JDBC connect string for a JDBC metastore</description>
</property>

我希望这能帮到您。更多详情请点击这里

于 2015-03-02T07:18:18.333 回答