在我运行Hive的任何地方都会创建metastore_db

24

在运行Hive查询的任何目录中,都会创建metastore_db文件夹。有没有办法只在指定位置创建一个metastore_db文件夹,并防止其在其他位置被创建?这是否与hive.metastore.local有关?

2个回答

39

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

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

不过,我必须警告您,内嵌的Derby元数据存储每次只能被一个用户访问。Hive默认使用内嵌的Derby以提供即插即用的体验和方便测试。对于任何实际系统,我建议迁移到像MySQL或PostgreSQL这样的独立的“真实”数据库。如何执行此操作的说明在这里


有没有想法如何为生成的derby.log设置默认位置? - Ghashange
1
我将路径更改为绝对路径:jdbc:derby:;databaseName=/root/metastore_db;create=true,但是我收到了错误消息:java.lang.IllegalArgumentException: java.net.URISyntaxException: Relative path in absolute URI: ${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D - xxks-kkk
@zack,你列出的错误可能是由hive-site.xml文件中的其他属性(例如hive.exec.local.scratchdir)引起的。我已经成功使用绝对metastore路径使ConnectionURL工作。唯一未解决的问题是如何防止在我从每个目录触发hive脚本时创建derby.log文件。 - Saurabh Mishra
需要在哪个文件中进行更改? - AbdealiJK
谢谢您,Mark先生! - shawn1912

5

由于您使用嵌入式Derby模式。要使用单个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>

我希望这可以帮助你。如需更多详细信息,请点击此处

似乎链接已经失效。 - Steve Lau

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接