如何配置 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”来存储您的配置单元数据。
我正在尝试建立本地配置单元实例,并希望将本地文件系统用作我的元存储和数据仓库。是否可以在不使用 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”来存储您的配置单元数据。