1. 程式人生 > >Hive的Metastore三種配置方式分析

Hive的Metastore三種配置方式分析

  Hive是基於Hadoop的一個數據倉庫工具,可以將結構化的資料檔案對映為一張資料庫表,並提供類SQL查詢功能。而metastore是Hive元資料的集中存放地。metastore元資料儲存主要體現在兩個方面:服務和後臺資料的儲存。

      關於Metastore的三種配置:內嵌配置,本地配置,遠端配置。

1. 預設情況下,metastore服務和Hive的服務執行在同一個JVM中,包含了一個內嵌的以本地磁碟作為儲存的Derby(Hive自帶的資料庫)資料庫例項。同時,這種配置也被稱為內嵌配置。但是這種方式的不好之處就在於每次只有一個內嵌的Derby資料庫可以訪問某個磁碟上的資料檔案,也就是說一次只能為每個metastore開啟一個hive會話。如果嘗試連線多個,會報錯。這樣效率很低。

       2.如果要支援多會話,或者多使用者的話,需要使用一個獨立的資料庫(比如mysql,比較常用),這種配置方式稱為本地metastore配置。雖然這種方式Hvie服務和Metastore服務仍然在一個JVM程序中,但連線的卻是另外一個程序中執行的資料庫,在同一臺機器上或者遠端機器上。任何JDBC相容的資料庫都可以通過javax.jdo.option.*配置屬性來供metastore使用。

       3.還有一種配置時遠端metastore配置,這種配置情況下,一個或多個metastore伺服器和Hive服務執行在不同的程序中。這樣一來,資料庫層可以 完全置於防火牆後,客戶端則不需要資料庫憑證(密碼賬號),從而提供了更好的可管理性和安全。可以通過hive.metastore.uris設定 為metastore伺服器你URI(如果有多個伺服器,可以用'逗號'分割),把hive服務設為使用遠端metastore.metastore伺服器的URI的格式為:thrift://host:port.

      以遠端配置的方式演示如下:

<property>
  <name>javax.jdo.option.ConnectionURL</name>
  <value>jdbc:mysql://192.168.6.77/hive_meta?createDatabaseIfNotExist=true</value>
  <description>JDBC connect string for a JDBC metastore</description>
</property>
 
<property>
  <name>javax.jdo.option.ConnectionDriverName</name>
  <value>com.mysql.jdbc.Driver</value>
  <description>Driver class name for a JDBC metastore</description>
</property>
 
<property>
  <name>javax.jdo.option.ConnectionUserName</name>
  <value>hive</value>
  <description>username to use against metastore database</description>
</property>
 
<property>
  <name>javax.jdo.option.ConnectionPassword</name>
  <value>micmiu</value>
  <description>password to use against metastore database</description>
</property>
<!----hive.metastore.warehouse.dir和logs的檔案目錄可以自定義配置。----->
注意:需要把mysql的驅動包copy到hive的安裝目錄下的*/lib 中
            如果是第一次需要執行初始化命令:schematool -dbType mysql -initSchema   
 使用:hive metastore 服務端啟動命令:
          hive --service metastore -p <port_num>
        如果不加埠預設啟動:hive --service metastore,則預設監聽埠是:9083 ,注意客戶端中的埠配置需要和啟動監聽的埠一致。服務端啟動正常後,客戶端就可以執行hive操作了。