簡體   English   中英

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

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

我正在嘗試設置本地配置單元實例,並希望將本地文件系統用作我的元存儲和數據倉庫。 是否有可能在不使用 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 元存儲(即 derby),那么為什么我仍然需要使用 JDBC 連接字符串(根據錯誤消息?)。 甚至可以在沒有 derby 的情況下運行本地 hive 實例嗎?

Hive Metastore 進程不能僅使用文件系統。 它需要一個關系數據庫。 “Hive 倉庫”不同,內部存儲托管 Hive 表,可以是任何 Hadoop 兼容的文件系統(例如本地磁盤)

Derby 要么存儲在內存中,要么永久存儲在磁盤上,但使用 Mysql 或 Postgres 可以獲得更好的性能

注意:Hive 仍然需要 Hadoop 庫,所以“沒有 Hadoop”是不可能的,即使你沒有使用 YARN 或 HDFS

此外,屬性fs.default.name已被棄用並由fs.defaultFS替換,並且必須在 core-site.xml 中,它不是有效的 hive-site 屬性

我沒有使用 JDBC 元存儲(即 derby),

是的,你是,通過 Hive 默認屬性

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

  <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”來存儲您的配置單元數據。

Metastore 是 Apache Hive 元數據的中央存儲庫。 它存儲 Hive 表的元數據(如它們的架構和位置)和關系數據庫中的分區。

所以你需要一個 RDBMS。

Hive 支持的數據庫:Derby MySQL MS SQL Server Oracle Postgres

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM