天天看點

資料倉庫工具 hive的入門(八)中繼資料管理與存儲前言HQL操作之–DQL指令

**Hive指令實戰操作之中繼資料管理與存儲

提示:本文章内容取自來源: 拉勾教育大資料高薪訓練營

文章目錄

  • 前言
  • HQL操作之--DQL指令
    • 第 1 節 Metastore
      • 1.1 metastore三種配置方式
    • 第 2 節 HiveServer2
    • 第 3 節 HCatalog
    • 第 4 節 資料存儲格式

前言

提示:本文章對于初學者準備,希望對大家有所幫助。如果有什麼建議和疑問,請留言給我,我會不斷完成完善。

HQL操作之–DQL指令

第 1 節 Metastore

Metadata即中繼資料。中繼資料包含用Hive建立的database、table、表的字段等元資訊。中繼資料存儲在關系型資料庫中。如hive内置的Derby、第三方如MySQL等。

Metastore即中繼資料服務,是Hive用來管理庫表中繼資料的一個服務。有了它上層的服務不用再跟裸的檔案資料打交道,而是可以基于結構化的庫表資訊建構計算架構。

通過metastore服務将Hive的中繼資料暴露出去,而不是需要通過對Hive中繼資料庫mysql的通路才能拿到Hive的中繼資料資訊;metastore服務實際上就是一種thrift服

務,通過它使用者可以擷取到Hive中繼資料,并且通過thrift擷取中繼資料的方式,屏蔽了資料庫通路需要驅動,url,使用者名,密碼等細節。

1.1 metastore三種配置方式

1、内嵌模式

内嵌模式使用的是内嵌的Derby資料庫來存儲中繼資料,也不需要額外起Metastore服務。資料庫和Metastore服務都嵌入在主Hive Server程序中。這個是預設的,配置簡單,但是一次隻能一個用戶端連接配接,适用于用來實驗,不适用于生産環境。

優點:配置簡單,解壓hive安裝包 bin/hive 啟動即可使用;

缺點:不同路徑啟動hive,每一個hive擁有一套自己的中繼資料,無法共享。

2、本地模式

本地模式采用外部資料庫來存儲中繼資料,目前支援的資料庫有:MySQL、Postgres、Oracle、MS SQL Server。教學中實際采用的是MySQL。本地模式不需要單獨起metastore服務,用的是跟Hive在同一個程序裡的metastore服務。也就是說當啟動一個hive 服務時,其内部會啟動一個metastore服務。Hive根據 hive.metastore.uris 參數值來判斷,如果為空,則為本地模式。

缺點:每啟動一次hive服務,都内置啟動了一個metastore;在hive-site.xml中暴露的資料庫的連接配接資訊;

優點:配置較簡單,本地模式下hive的配置中指定mysql的相關資訊即可。

3. 遠端模式

遠端模式下,需要單獨起metastore服務,然後每個用戶端都在配置檔案裡配置連接配接到該metastore服務。遠端模式的metastore服務和hive運作在不同的程序裡。在生産環境中,建議用遠端模式來配置Hive Metastore。

在這種模式下,其他依賴hive的軟體都可以通過Metastore通路Hive。此時需要配hive.metastore.uris 參數來指定 metastore 服務運作的機器ip和端口,并且需要單獨手動啟動metastore服務。metastore服務可以配置多個節點上,避免單節點故障導緻整個叢集的hive client不可用。同時hive client配置多metastore位址,會自動選擇可用節點。

metastore内嵌模式配置

1、下載下傳軟體解壓縮
2、設定環境變量,并使之生效
3、初始化資料庫。
schematool -dbType derby -initSchema
4、進入hive指令行
5、再打開一個hive指令行,發現無法進入
           

metastore遠端模式配置

配置規劃:

資料倉庫工具 hive的入門(八)中繼資料管理與存儲前言HQL操作之–DQL指令

配置步驟:

  1. 将 linux123 的 hive 安裝檔案拷貝到 linux121、linux122
  2. 在linux121、linux123上分别啟動 metastore 服務
# 啟動 metastore 服務
nohup hive --service metastore &
# 查詢9083端口(metastore服務占用的端口)
lsof -i:9083
# 安裝lsof
yum install lsof
           
  1. 修改 linux122 上hive-site.xml。删除配置檔案中:MySQL的配置、連接配接資料庫的使用者名、密碼等資訊;增加連接配接metastore的配置:
1<!-- hive metastore 服務位址 -->
<property>
	<name>hive.metastore.uris</name>
	<value>thrift://linux121:9083,thrift://linux123:9083</value>
</property>
           
  1. 啟動hive。此時client端無需執行個體化hive的metastore,啟動速度會加快。
分别在linux121、linux121上執行以下指令,檢視連接配接情況
lsof -i:9083
           
  1. 高可用測試。關閉已連接配接的metastore服務,發現hive連到另一個節點的服務上,仍然能夠正常使用。

第 2 節 HiveServer2

HiveServer2是一個服務端接口,使遠端用戶端可以執行對Hive的查詢并傳回結果。目前基于Thrift RPC的實作是HiveServer的改進版本,并支援多用戶端并發和身份驗證,啟動hiveServer2服務後,就可以使用jdbc、odbc、thrift 的方式連接配接。

Thrift是一種接口描述語言和二進制通訊協定,它被用來定義和建立跨語言的服務。它被當作一個遠端過程調用(RPC)架構來使用,是由Facebook為“大規模跨語言服務開發”而開發的。

HiveServer2(HS2)是一種允許用戶端對Hive執行查詢的服務。HiveServer2是HiveServer1的後續 版本。HS2支援多用戶端并發和身份驗證,旨在為JDBC、ODBC等開放API用戶端提供更好的支援。

HS2包括基于Thrift的Hive服務(TCP或HTTP)和用于Web UI 的Jetty Web伺服器。

1select * from emp
where sal > 2000;
           

HiveServer2作用:

為Hive提供了一種允許用戶端遠端通路的服務基于thrift協定,支援跨平台,跨程式設計語言對Hive通路允許遠端通路Hive

HiveServer2配置

配置規劃

資料倉庫工具 hive的入門(八)中繼資料管理與存儲前言HQL操作之–DQL指令

配置步驟:

1、修改叢集上的 core-site.xml,增加以下内容:

<!-- HiveServer2 連不上10000;hadoop為安裝使用者 -->
<!-- root使用者可以代理所有主機上的所有使用者 -->
    <property>  
        <name>hadoop.proxyuser.root.hosts</name>  
        <value>*</value>
    </property>
    <property>  
        <name>hadoop.proxyuser.root.groups</name>  
        <value>*</value>
    </property>
    <property>
        <name>hadoop.proxyuser.hadoop.hosts</name>
        <value>*</value>
    </property>
    <property>
        <name>hadoop.proxyuser.hadoop.groups</name>
        <value>*</value>
    </property>
           

2、修改 叢集上的 hdfs-site.xml,增加以下内容:

<!-- HiveServer2 連不上10000;啟用 webhdfs 服務 -->
    <property> 
        <name>dfs.webhdfs.enabled</name> 
        <value>true</value> 
    </property>
           

3、啟動linux123上的 HiveServer2 服務

# 啟動 hiveserver2 服務
nohup hiveserver2 &

# 檢查 hiveserver2 端口
lsof -i:10000

# 從2.0開始,HiveServer2提供了WebUI
# 還可以使用浏覽器檢查hiveserver2的啟動情況。http://linux123:10002/
           

4、啟動 linux122 節點上的 beeline

Beeline是從 Hive 0.11版本引入的,是 Hive 新的指令行用戶端工具。

Hive用戶端工具後續将使用Beeline 替代 Hive 指令行工具 ,并且後續版本也會廢棄掉 Hive 用戶端工具。

!connect jdbc:hive2://linux123:10000
use mydb;
show tables;
select * from emp;
create table tabtest1 (c1 int, c2 string);
!connect jdbc:mysql://linux123:3306
!help
!quit
           

第 3 節 HCatalog

HCatalog 提供了一個統一的中繼資料服務,允許不同的工具如 Pig、MapReduce 等通過 HCatalog 直接通路存儲在 HDFS 上的底層檔案。HCatalog是用來通路Metastore的Hive子項目,它的存在給了整個Hadoop生态環境一個統一的定義。

HCatalog 使用了 Hive 的中繼資料存儲,這樣就使得像 MapReduce 這樣的第三方應用可以直接從 Hive 的資料倉庫中讀寫資料。同時,HCatalog 還支援使用者在

MapReduce 程式中隻讀取需要的表分區和字段,而不需要讀取整個表,即提供一種邏輯上的視圖來讀取資料,而不僅僅是從實體檔案的次元。

HCatalog 提供了一個稱為 hcat 的指令行工具。這個工具和 Hive 的指令行工具類似,兩者最大的不同就是 hcat 隻接受不會産生 MapReduce 任務的指令。

# 進入 hcat 所在目錄。$HIVE_HOME/hcatalog/bin
cd $HIVE_HOME/hcatalog/bin

# 執行指令,建立表
./hcat -e "create table default.test1(id string, name string,
age int)"

# 長指令可寫入檔案,使用 -f 選項執行
./hcat -f createtable.txt

# 檢視中繼資料
./hcat -e "use mydb; show tables"

# 檢視表結構
./hcat -e "desc mydb.emp"

# 删除表
./hcat -e "drop table default.test1"
           

第 4 節 資料存儲格式

Hive支援的存儲數的格式主要有:TEXTFILE(預設格式) 、SEQUENCEFILE、RCFILE、ORCFILE、PARQUET。

  • textfile為預設格式,建表時沒有指定檔案格式,則使用TEXTFILE,導入資料時會直接把資料檔案拷貝到hdfs上不進行處理;
  • sequencefile,rcfile,orcfile格式的表不能直接從本地檔案導入資料,資料要先導入到textfile格式的表中,然後再從表中用insert導入sequencefile、rcfile、orcfile表中。

行存儲與列存儲

行式存儲下一張表的資料都是放在一起的,但列式存儲下資料被分開儲存了。

行式存儲:

優點:資料被儲存在一起,insert和update更加容易

缺點:選擇(selection)時即使隻涉及某幾列,所有資料也都會被讀取

列式存儲:

優點:查詢時隻有涉及到的列會被讀取,效率高

缺點:選中的列要重新組裝,insert/update比較麻煩

TEXTFILE、SEQUENCEFILE 的存儲格式是基于行存儲的;

ORC和PARQUET 是基于列式存儲的。