我正在尝试建立本地配置单元实例,并希望将本地文件系统用作我的metastore和数据仓库。不使用derby就能实现吗?
在How to use Hive without hadoop之后,我如图所示设置了hive-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 metastore(即derby),所以为什么我仍然需要使用JDBC连接字符串(根据错误消息?)。甚至可以在没有德比的情况下运行本地配置单元实例吗?
答案 0 :(得分:2)
Hive Metastore进程不能仅使用文件系统。它需要一个关系数据库。 “ Hive仓库”不同,存储内部托管Hive表的位置可以是任何与Hadoop兼容的文件(例如本地磁盘)
Derby既可以存储在内存中,也可以永久存储在磁盘上,但是使用Mysql或Postgres可以提高性能
注意:Hive仍然需要Hadoop库,因此即使没有使用YARN或HDFS,也无法实现“没有Hadoop”
此外,属性fs.default.name
已被弃用并由fs.defaultFS
取代,并且必须位于core-site.xml中,它不是有效的蜂巢站点属性
我没有使用JDBC元存储(即derby),
是的,通过Hive默认属性
javax.jdo.option.ConnectionURL=jdbc:derby:;databaseName=metastore_db;create=true
答案 1 :(得分:2)
master
不推荐使用设置。
您可以使用本地文件目录存储配置单元数据,但是它通过hadoop实现,这意味着您仍然需要安装hadoop才能使用本地文件系统存储配置单元数据。这是MacOS上的示例:
filter-branch
它将使用目录'/ Users // hive / data'存储您的蜂巢数据。
答案 2 :(得分:0)
Metastore是Apache Hive元数据的中央存储库。它将Hive表的元数据(如其架构和位置)和分区存储在关系数据库中。
因此您需要RDBMS。
Hive支持的数据库: 德比 的MySQL MS SQL服务器 甲骨文 Postgres