翻譯: https://www.cloudera.com/documentation/enterprise/latest/topics/cdh_ig_hive_metastore_configure.html
版本: 5.14.2
Hive Metastore服務(wù)將Hive表和分區(qū)的元數(shù)據(jù)存儲在關(guān)系數(shù)據(jù)庫中汛闸,并提供Metastore服務(wù)API供客戶端(包括Hive)訪問元數(shù)據(jù)。此頁面介紹了部署選項,并提供了在建議配置中設(shè)置數(shù)據(jù)庫的說明株搔。
繼續(xù)閱讀:
Metastore部署模式
注意:在此頁面上伏蚊,HiveServer指的是HiveServer1或HiveServer2。
嵌入式模式
Cloudera建議僅將此模式用于實驗目的。
嵌入模式是默認部署模式倒慧。在此模式下站玄,Metastore使用Derby數(shù)據(jù)庫枚驻,數(shù)據(jù)庫和Metastore服務(wù)都嵌入主HiveServer進程中。當您啟動HiveServer進程時株旷,兩者都會啟動再登。此模式需要花費最少的努力進行配置,但一次只能支持一個活動用戶晾剖,并且未經(jīng)生產(chǎn)認證锉矢。
本地模式
在本地模式下,Hive Metastore服務(wù)在主HiveServer進程的同一進程中運行齿尽,但Metastore數(shù)據(jù)庫在單獨的進程中運行沽损,并且可以位于單獨的主機上。Metastore服務(wù)通過JDBC與Metastore數(shù)據(jù)庫進行通信循头。
遠程模式
Cloudera建議您使用此模式缠俺。
在遠程模式下,Hive Metastore服務(wù)在其自己的JVM進程中運行贷岸。HiveServer2壹士,HCatalog,Impala和其他進程使用Thrift API與它進行通信(使用hive.metastore.uris屬性)偿警。Metastore服務(wù)通過JDBC與Metastore數(shù)據(jù)庫進行通信(使用 javax.jdo.option.ConnectionURL 屬性)躏救。數(shù)據(jù)庫,HiveServer進程和Metastore服務(wù)都可以位于同一主機上螟蒸,但在單獨的主機上運行HiveServer進程可提供更好的可用性和可伸縮性盒使。
遠程模式優(yōu)于本地模式的主要優(yōu)點是遠程模式不需要管理員與每個Hive用戶共享Metastore數(shù)據(jù)庫的JDBC登錄信息。 HCatalog需要此模式七嫌。
支持的Metastore數(shù)據(jù)庫
有關(guān)最新信息少办,請參閱CDH和Cloudera Manager支持的數(shù)據(jù)庫。Cloudera強烈建議您使用MySQL诵原,因為它是Hive用戶社區(qū)中最受歡迎的英妓,因此挽放,它比其他選項獲得更多測試。有關(guān)安裝信息蔓纠,請參閱:
除了上述支持的數(shù)據(jù)庫之外辑畦,CDH還支持使用MariaDB。有關(guān)安裝和配置MariaDB for CDH的信息腿倚,請參閱MariaDB數(shù)據(jù)庫纯出。
Metastore內(nèi)存和硬件要求
Cloudera建議將HiveServer2分成多個實例,并在您開始為HiveServer2分配超過12 GB的空間時對其進行負載平衡敷燎。目標是調(diào)整大小以減少Java垃圾回收對服務(wù)進行的活動處理的影響暂筝。
使用Bytes Hive配置屬性中的HiveServer2的Java堆大小來設(shè)置此值。
使用Bytes Hive配置屬性中的Hive Metastore Server的Java堆大小設(shè)置此值硬贯。
重要提示:這些數(shù)字只是一般性指導焕襟,可能會受到諸如列數(shù),分區(qū)澄成,復雜聯(lián)接和客戶端活動等因素的影響胧洒。根據(jù)您的預期部署,通過測試進行優(yōu)化以達到您的環(huán)境的最佳值墨状。
有關(guān)為Hive元存儲配置堆以及HiveServer2和Hive客戶端的信息卫漫,請參閱Hive組件的堆大小和垃圾收集。
配置Metastore數(shù)據(jù)庫
本節(jié)介紹如何配置Hive以使用遠程數(shù)據(jù)庫肾砂,以及MySQL列赎, PostgreSQL和Oracle的示例。
Hive Metastore的配置屬性記錄在Apache wiki上的Hive Metastore Administration文檔中镐确。
注意:有關(guān)安全群集中可能需要的其他配置的信息包吝,請參閱Hive身份驗證。
為Hive Metastore配置遠程MySQL數(shù)據(jù)庫
Cloudera建議您在駐留在主機上的一臺或多臺遠程服務(wù)器上配置Metastore的數(shù)據(jù)庫源葫,或與HiveServer1或HiveServer2進程分開的主機上配置數(shù)據(jù)庫诗越。MySQL是最常用的數(shù)據(jù)庫。使用以下步驟配置遠程Metastore息堂。如果您打算使用云服務(wù)數(shù)據(jù)庫(例如Amazon Relational Database Service(RDS))嚷狞,請參閱如何將共享Amazon RDS設(shè)置為CDH的Hive Metastore,以獲取有關(guān)如何將共享Amazon RDS設(shè)置為您的Hive的信息metastore荣堰。
-
如果您尚未安裝并啟動MySQL床未,請安裝并啟動它
在RHEL系統(tǒng)上安裝MySQL:
$ sudo yum install mysql-server
在使用該命令安裝MySQL之后,您可能需要確認您確實想要完成安裝振坚。安裝完成后薇搁,啟動 MySQL的 守護進程。
**在RHEL系統(tǒng)上**
$ sudo service mysqld start
-
配置MySQL服務(wù)和連接器
在您可以使用遠程MySQL數(shù)據(jù)庫運行Hive Metastore之前渡八,您必須為遠程MySQL數(shù)據(jù)庫配置連接器啃洋,設(shè)置初始數(shù)據(jù)庫模式传货,并為Hive用戶配置MySQL用戶帳戶。
要在RHEL 6系統(tǒng)上安裝MySQL連接器裂允,請執(zhí)行以下操作:
在Hive Metastore服務(wù)器主機上安裝 mysql-connector-java 到/usr/lib/hive/lib/ 目錄损离。
$ sudo yum install mysql-connector-java
$ ln -s /usr/share/java/mysql-connector-java.jar /usr/lib/hive/lib/mysql-connector-java.jar
注意:在發(fā)布時哥艇,版本為5.1.31 绝编,但是在閱讀本文時,版本可能已更改貌踏。如果您正在使用MySQL版本5.6十饥,則必須使用版本5.1.26或更高版本的驅(qū)動程序。
-
創(chuàng)建數(shù)據(jù)庫和用戶
本節(jié)中的說明假定您正在使用遠程模式祖乳,并且MySQL數(shù)據(jù)庫安裝在不同于主機上逗堵。在這個例子中mysql主機名為 metastorehost 。
注意:如果Metastore服務(wù)將在安裝數(shù)據(jù)庫的主機上運行眷昆,在 CREATE USER例子中使用localhost 替換 'metastorehost'蜒秤。同樣,在/etc/hive/conf/hive-site.xml文件中亚斋,設(shè)置javax.jdo.option.ConnectionURL的值為jdbc:mysql://localhost/metastore 作媚。有關(guān)添加MySQL用戶的更多信息,請參閱http://dev.mysql.com/doc/refman/5.5/en/adding-users.html帅刊。
創(chuàng)建初始數(shù)據(jù)庫模式纸泡。Cloudera建議使用Hive模式工具(schemaTool) 來執(zhí)行此操作。
如果由于某種原因你決定不使用模式工具赖瞒,你可以使用 hive-schema-n.n.n.mysql.sql 文件; 該文件位于/usr/lib/hive/scripts/metastore/upgrade/mysql/目錄女揭。(n.n.n是當前的Hive版本,例如1.1.0)如果您決定使用栏饮,請按以下步驟操作 hive-schema-n.n.n.mysql.sql
使用 hive-schema-n.n.n.mysql.sql的示例
注意:僅當您不使用Hive模式工具時才執(zhí)行此操作吧兔。
$ mysql -u root -p
Enter password:
mysql> CREATE DATABASE metastore;
mysql> USE metastore;
mysql> SOURCE /usr/lib/hive/scripts/metastore/upgrade/mysql/hive-schema-n.n.n.mysql.sql;
您還需要一個Hive用于訪問Metastore的MySQL用戶帳戶。防止此用戶帳戶在Metastore數(shù)據(jù)庫模式中創(chuàng)建或更改表格非常重要袍嬉。
重要提示:為防止用戶在使用較低或較高版本的Hive時無意中破壞了Metastore模式境蔼,請設(shè)置 hive.metastore.schema.verification 為true。
**例**
mysql> CREATE USER 'hive'@'metastorehost' IDENTIFIED BY 'mypassword';
...
mysql> REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'hive'@'metastorehost';
mysql> GRANT ALL PRIVILEGES ON metastore.* TO 'hive'@'metastorehost';
mysql> FLUSH PRIVILEGES;
mysql> quit;
-
配置Metastore服務(wù)與MySQL數(shù)據(jù)庫進行通信
此步驟顯示您需要在 hive-site.xml (/usr/lib/hive/conf/hive-site.xml)中設(shè)置的屬性冬竟。雖然你可以在所有主機(客戶端欧穴,Metastore,HiveServer)上使用相同的hive-site.xml 泵殴, hive.metastore.uris是唯一必須配置的屬性; 其他只用于metastore主機涮帘。
給定一個MySQL數(shù)據(jù)庫 為myhost 和用戶帳戶hive 與密碼 mypassword,請按如下所示設(shè)置配置(覆蓋任何現(xiàn)有值)笑诅。
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://myhost/metastore</value>
<description>the URL of the MySQL database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>mypassword</value>
</property>
<property>
<name>datanucleus.autoCreateSchema</name>
<value>false</value>
</property>
<property>
<name>datanucleus.fixedDatastore</name>
<value>true</value>
</property>
<property>
<name>datanucleus.autoStartMechanism</name>
<value>SchemaTable</value>
</property>
<property>
<name>hive.metastore.uris</name>
<value>thrift://<n.n.n.n>:9083</value>
<description>IP address (or fully-qualified domain name) and port of the metastore host</description>
</property>
<property>
<name>hive.metastore.schema.verification</name>
<value>true</value>
</property>
注: hive.metastore.local 不再被支持(截至Hive 0.10); 設(shè)置hive.metastore.uris 足以表明您正在使用遠程Metastore调缨。
為Hive Metastore配置遠程PostgreSQL數(shù)據(jù)庫
略
為Hive Metastore配置遠程Oracle數(shù)據(jù)庫
在您可以使用遠程Oracle數(shù)據(jù)庫運行Hive Metastore之前疮鲫,您必須配置連接器到遠程Oracle數(shù)據(jù)庫,設(shè)置初始數(shù)據(jù)庫模式并為Hive用戶配置Oracle用戶帳戶弦叶。
略