1. 程式人生 > >Hive簡介及元資料儲存(Metastore的三種配置方式)

Hive簡介及元資料儲存(Metastore的三種配置方式)

一 Hive介紹

  1. Hive是基於Hadoop的一個數據倉庫,Hive能夠將SQL語句轉化為MapReduce任務進行執行。
      Hive架構圖分為以下四部分:
      在這裡插入圖片描述

1、Hive有三個使用者介面:

a. 命令列介面(CLI):以命令列的形式輸入SQL語句進行資料資料操作
b. Web介面:通過Web方式進行訪問。     
c. Hive的遠端服務方式:通過JDBC等方式進行訪問。              

2、元資料儲存

將元資料儲存在關係資料庫中(MySql、Derby),元資料包括表的屬性、表的名稱、表的列、分割槽及其屬性以及表資料所在的目錄等。

3、直譯器、編譯器、優化器

分別完成SQL查詢語句從詞法分析、語法分析、編譯、優化以及查詢計劃的生成。生成的查詢計劃儲存在HDFS中,並在隨後由MapReduce呼叫執行。

4、資料儲存

Hive沒有專門的資料儲存格式,也沒有為資料建立索引,Hive中所有資料都儲存在HDFS中。

Hive包含以下資料模型:表、外部表、分割槽和桶

二 Metadata,Metastore的作用

(1)Metadata即元資料: 元資料包含用Hive建立的database、tabel等的元資訊。元資料儲存在關係型資料庫中。如Derby、MySQL等。

(2)Metastore的作用是: 客戶端連線metastore服務,metastore再去連線MySQL資料庫來存取元資料。有了metastore服務,就可以有多個客戶端同時連線,而且這些客戶端不需要知道MySQL資料庫的使用者名稱和密碼,只需要連線metastore 服務即可。

三 Hive的元資料儲存(Metastore的三種配置方式)

由於元資料不斷地修改、更新,所以Hive元資料不適合儲存在HDFS中,一般存在RDBMS中。

1、內嵌模式(Embedded)

hive服務和metastore服務執行在同一個程序中,derby服務也執行在該程序中.

內嵌模式使用的是內嵌的Derby資料庫來儲存元資料,也不需要額外起Metastore服務。

這個是預設的,配置簡單,但是一次只能一個客戶端連線,適用於用來實驗,不適用於生產環境。

2、本地模式(Local)

本地安裝mysql 替代derby儲存元資料

這種安裝方式和嵌入式的區別在於,不再使用內嵌的Derby作為元資料的儲存介質,而是使用其他資料庫比如MySQL來儲存元資料。

hive服務和metastore服務執行在同一個程序中,mysql是單獨的程序,可以同一臺機器,也可以在遠端機器上。

這種方式是一個多使用者的模式,執行多個使用者client連線到一個數據庫中。這種方式一般作為公司內部同時使用Hive。

每一個使用者必須要有對MySQL的訪問權利,即每一個客戶端使用者需要知道MySQL的使用者名稱和密碼才行。

 <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://127.0.0.1:3306/hive? createDatabaseIfNotExit=true</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.jdbc.Driver</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>root</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>root</value>
    </property>
    <property>
      <name>hive.metastore.uris</name>
      <value></value>
      <description>指向的是執行metastore服務的主機,這是hive客戶端配置,metastore服務不需要配置</description>
   </property>
    <property>
      <name>hive.metastore.warehouse.dir</name>
      <value>/user/hive/warehouse</value>
      <description>hive表的預設儲存路徑,為HDFS的路徑location of default database for the warehouse</description>
    </property>

3、遠端模式(Remote)

遠端安裝mysql 替代derby儲存元資料

Hive服務和metastore在不同的程序內,可能是不同的機器,該模式需要將hive.metastore.local設定為false,將hive.metastore.uris設定為metastore伺服器URL,

如果有多個metastore伺服器,將URL之間用逗號分隔,metastore伺服器URL的格式為thrift://127.0.0.1:9083。

遠端元儲存需要單獨起metastore服務,然後每個客戶端都在配置檔案裡配置連線到該metastore服務。

將metadata作為一個單獨的服務進行啟動。各種客戶端通過beeline來連線,連線之前無需知道資料庫的密碼。

僅連線遠端的mysql並不能稱之為“遠端模式”,是否遠端指的是metastore和hive服務是否在同一程序內.

hive metastore 服務端啟動命令:

 hive --service metastore -p <port_num>

如果不加埠預設啟動:hive --service metastore,則預設監聽埠是:9083 。

注意客戶端中的埠配置需要和啟動監聽的埠一致。服務端啟動正常後,客戶端就可以執行hive操作了。

客戶端連線metastore服務配置如下:

<property>
    <name>hive.metastore.uris</name>
    <value>thrift://127.0.0.1:9083,thrift://127.0.0.1:9084</value>
    <description>指向的是執行metastore服務的主機</description>
  </property>

在伺服器端啟動一個MetaStoreServer,客戶端利用Thrift協議通過MetaStoreServer訪問元資料庫。如下圖:

在這裡插入圖片描述