Hive存儲概念和Metastore 的作用

一、Hive存儲概念

1、Hive用戶接口:
命令行接口(CLI):以命令行的形式輸入SQL語句進行數據數據操作
Web界面:通過Web方式進行訪問。     
Hive的遠程服務方式:通過JDBC等方式進行訪問。  
2、元數據存儲
 將元數據存儲在關係數據庫中(MySql、Derby),元數據包括表的屬性、表的名稱、表的列、分區及其屬性以及表數據所在的目錄等。

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

4、數據存儲
 Hive沒有專門的數據存儲格式,也沒有爲數據建立索引,Hive中所有數據都存儲在HDFS中。Hive包含以下數據模型:表、外部表、分區和桶

二、Metadata,Metastore 的作用

1.Metadata概念:
元數據包含用Hive創建的database、table等的元信息。元數據存儲在關係型數據庫中。如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的用戶名和密碼纔行。

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
<property>
  <name>hive.metastore.warehouse.dir</name>
  <value>/user/hive_remote/warehouse</value>
</property>

<property>
  <name>hive.metastore.local</name>
  <value>true</value>
</property>

<property>
  <name>javax.jdo.option.ConnectionURL</name>
  <value>jdbc:mysql://localhost/hive_remote?createDatabaseIfNotExist=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>hive</value>
</property>

<property>
  <name>javax.jdo.option.ConnectionPassword</name>
  <value>password</value>
</property>
</configuration>

3、遠程模式(Remote): 遠程安裝mysql 替代derby存儲元數據
Hive服務和metastore在不同的進程內,可能是不同的機器,該模式需要將hive.metastore.local設置爲false,將hive.metastore.uris設置爲metastore服務器URL,

遠程元存儲需要單獨起metastore服務,然後每個客戶端都在配置文件裏配置連接到該metastore服務。將metadata作爲一個單獨的服務進行啓動。各種客戶端通過beeline來連接,連接之前無需知道數據庫的密碼。

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

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>

<property>
  <name>hive.metastore.warehouse.dir</name>
  <value>/user/hive/warehouse</value>
</property>

<property>
  <name>javax.jdo.option.ConnectionURL</name>
  <value>jdbc:mysql://192.168.1.214:3306/hive_remote?createDatabaseIfNotExist=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>hive</value>
</property>

<property>
  <name>javax.jdo.option.ConnectionPassword</name>
  <value>password</value>
</property>

<property>
  <name>hive.metastore.local</name>
  <value>false</value>
</property>

<property>
  <name>hive.metastore.uris</name>
  <value>thrift://192.168.1.188:9083</valu>
</property>

</configuration>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章