如何配置 Hive Metastore 以使用本地文件系统而不是 Derby?

How to configure Hive metastore to use local filesytem instead of Derby?

我正在尝试建立本地配置单元实例,并希望将本地文件系统用作我的元存储和数据仓库。是否可以在不使用 derby 的情况下实现?

How to use Hive without hadoop 之后,我设置了我的配置单元-site.xml,如下所示:

<configuration>
      <property>
         <name>hive.metastore.local</name>
         <value>true</value>
      </property>   
      <property>
         <name>hive.metastore.metadb.dir</name>
         <value>file:///var/metastore/metadb/</value>
      </property>
      <property>
         <name>hive.metastore.schema.verification</name> 
         <value>false</value> 
      </property> 
     <property> 
        <name>hive.metastore.warehouse.dir</name> 
        <value>file:///var/metastore/metadb/</value>
        <description></description> 
     </property>
     <property> 
        <name>fs.default.name</name> 
        <value>file:///tmp</value> 
     </property> 
</configuration>

我希望我应该能够 运行 hive 在我的终端上没有任何问题,但是我遇到了以下错误:

Exception in thread "main" java.lang.RuntimeException: org.apache.hadoop.hive.ql.metadata.HiveException: org.apache.hadoop.hive.ql.metadata.HiveException: MetaException(message:Hive metastore database is not initialized. Please use schematool (e.g. ./schematool -initSchema -dbType ...) to create the schema. If needed, don't forget to include the option to auto-create the underlying database in your JDBC connection string (e.g. ?createDatabaseIfNotExist=true for mysql))

我没有使用 JDBC 元存储(即 derby),所以为什么我仍然需要使用 JDBC 连接字符串(根据错误消息?)。甚至可以 运行 没有 derby 的本地配置单元实例吗?

Hive Metastore 进程不能只使用一个文件系统。它需要一个关系数据库。 "Hive warehouse" 不同,它存储内部的、托管的 Hive 表,并且可以是任何 Hadoop 兼容的文件系统(例如本地磁盘)

Derby 要么存储在内存中,要么永久存储在磁盘上,但使用 Mysql 或 Postgres 将获得更好的性能

注意:Hive 仍然需要 Hadoop 库,因此 "without Hadoop" 不可能,即使您没有使用 YARN 或 HDFS

此外,属性 fs.default.name 已被弃用并被 fs.defaultFS 取代,并且必须在 core-site.xml 中,它不是有效的 hive-site 属性

I am not using a JDBC metastore (i.e. derby),

是的,你是,通过 Hive 默认属性

javax.jdo.option.ConnectionURL=jdbc:derby:;databaseName=metastore_db;create=true

Metastore 是 Apache Hive 元数据的中央存储库。它在 关系数据库 .

中存储 Hive 表的元数据(如它们的模式和位置​​)和分区

因此您需要一个 RDBMS。

Hive 支持的数据库: 德比 MySQL MS SQL 服务器 甲骨文 Postgres

  <property>
     <name>hive.metastore.local</name>
     <value>true</value>
  </property>   
  <property>
     <name>hive.metastore.metadb.dir</name>
     <value>file:///var/metastore/metadb/</value>
  </property>
 <property> 
    <name>fs.default.name</name> 
    <value>file:///tmp</value> 
 </property> 

设置已弃用。

您可以使用本地文件目录来存储hive数据,但是它是通过hadoop实现的,也就是说您仍然需要安装hadoop才能使用本地文件系统来存储hive数据。这是 MacOS 上的示例:

 <property> 
    <name>hive.metastore.warehouse.dir</name> 
    <value>file:///Users/<Your Username>/hive/data</value>
    <description></description> 
 </property>

它将使用目录“/Users//hive/data”来存储您的配置单元数据。