在运行Hive查询的任何目录中,都会创建metastore_db
文件夹。有没有办法只在指定位置创建一个metastore_db
文件夹,并防止其在其他位置被创建?这是否与hive.metastore.local
有关?
这里感兴趣的属性是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模式。要使用单个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>
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