首頁 > 軟體

一文了解Hive是什麼

2022-05-19 13:00:28

一、Hive介紹

hive: 由 Facebook 開源用於解決海量結構化紀錄檔的資料統計工具。

Hive 是基於 Hadoop 的一個資料倉儲工具,可以將結構化的資料檔案對映為一張表,並提供類 SQL 查詢功能。

Hive的優缺點

優點:

  • 類似於SQL語句,簡單學習易上手
  • 避免了去寫 MapReduce,減少開發人員的學習成本
  • Hive 的執行延遲比較高,因此 Hive 常用於資料分析,對實時性要求不高的場合
  • Hive 優勢在於處理巨量資料,對於處理小資料沒有優勢,因為 Hive 的執行延遲比較高
  • Hive 支援使用者自定義函數,使用者可以根據自己的需求來實現自己的函數

缺點:

  • Hive 的 HQL 表達能力有限
  • Hive 的效率比較低
  • Hive本質是一個MR

Hive架構

Hive使用者介面

  • Hive CLI(Hive Command Line) Hive的命令列
  • HWI(Hive Web Interface) HiveWeb介面
  • Hive提供了Thrift服務,也就是Hiveserver。

Hive後設資料的三種儲存模式

  • 單使用者模式 : Hive安裝時,預設使用的是Derby資料庫儲存後設資料,這樣不能並行呼叫Hive。
  • 多使用者模式 : MySQL伺服器儲存後設資料
  • 遠端伺服器模式 : 啟動MetaStoreServer

Hive資料儲存

Hive資料可區分為表資料後設資料,表資料我們都知道是表中的資料,而後設資料是用來儲存表的名字表分割區以及屬性

Hive是基於Hadoop分散式檔案儲存的,它的資料儲存在HDFS中。現在我們介紹Hive中常見的資料匯入方式

  • 本地檔案系統中匯入資料到Hive
  • 從HDFS上匯入資料到Hive表
  • 從其他表中查詢出相應的資料並匯入Hive表中
  • 在建立表的時候通過從其他表中查詢出相應的記錄並插入到所建立的表中
#1.演示從本地裝載資料到hive
#1.1建立表
create table student(id string, name string) 
row format delimited fields terminated by 't';
#1.2載入原生的檔案到hive
 load data local inpath 
'/root/student.txt' into table default.student; #default.test 資料庫.表名 也可直接表名
#2.演示載入HDFS檔案到hive中
#2.1 將檔案上傳到HDFS根目錄
dfs -put /root/student.txt /;
#2.2載入HDFS上的資料
load data inpath '/student.txt' into table test.student;
#3.載入資料覆蓋表中原有的資料
#3.1上傳檔案到HDFS中
dfs -put /root/student.txt /;  #將檔案裝載到表下 檔案就相當於Windows中的剪下操作
#3.2載入資料覆蓋表中原有資料
load data inpath '/student.txt' overwrite into table test.student;
#4.查詢表
select * from student;
#通過查詢語句向表中插入資料(insert)
#1.1建立表
create table student_par(id int,name String)
row format delimited fields terminated by 't';
#1.2通過insert插入資料
insert into table student_par values(1,'zhangsan'),(2,'lisi');

架構原理

使用者介面

CLI(command-line interface)、JDBC/ODBC(jdbc 存取 hive)、WEBUI(瀏覽器存取 hive)

後設資料

後設資料包括:表名、表所屬的資料庫(預設是 default)、表的擁有者、列/分割區欄位、表的型別(是否是外部表)、表的資料所在目錄等

Hadoop

使用 HDFS 進行儲存,使用 MapReduce 進行計算。

驅動器:Driver

(1)解析器(SQL Parser):將 SQL 字串轉換成抽象語法樹 AST,這一步一般都用第三方工具庫完成,比如 antlr;對 AST 進行語法分析,比如表是否存在、欄位是否存在、SQL語意是否有誤。
(2)編譯器(Physical Plan):將 AST 編譯生成邏輯執行計劃。
(3)優化器(Query Optimizer):對邏輯執行計劃進行優化。
(4)執行器(Execution):把邏輯執行計劃轉換成可以執行的物理計劃。對於 Hive 來說,就是 MR/Spark。

Hive檔案格式

  • TextFile

這是預設的檔案格式。資料不會壓縮處理,磁碟開銷大,資料解析開銷也大。
SequenceFile
這是HadooAPI提供的一種二進位制檔案支援,以二進位制的形式序列化到檔案中。

  • RCFile

這種格式是行列儲存結構的儲存方式。

  • ORC

Optimized Row Columnar ORC檔案格式是一種Hadoop生態圈中的列式儲存格式。

ORC的優勢:

  • 列示儲存,有多種檔案壓縮方式
  • 檔案是可分割的。
  • 提供了多種索引
  • 可以支援複雜的資料結構 比如Map

ORC檔案格式是以二進位制方式儲存的,所以是不可直接讀取的。

Hive本質

將HQL轉換成MapReduce程式。

  • Hive處理的資料儲存在HDFS上
  • Hive分析資料底層的實現是MapReduce
  • 執行程式執行在Yarn上

Hive工作原理

簡單來說Hive就是一個查詢引擎。當Hive接受到一條SQL語句會執行如下操作:

  • 詞法分析和語法分析。使用antlr將SQL語句解析成抽象語法樹
  • 語意分析。從MetaStore中獲取後設資料資訊,解釋SQL語句中的表名、列名、資料型別
  • 邏輯計劃生成。生成邏輯計劃得到運算元樹
  • 邏輯計劃優化。對運算元樹進行優化
  • 物理計劃生成。將邏輯計劃生成出的MapReduce任務組成的DAG的物理計劃
  • 物理計劃執行。將DAG傳送到Hadoop叢集進行執行
  • 將查詢結果返回。

Hive展現的MapReduce任務設計到元件有:

  • 元儲存 : 該元件儲存了Hive中表的資訊,其中包括了表、表的分割區、模式、列及其型別、表對映關係等
  • 驅動 : 控制HiveQL生命週期的元件
  • 查詢編輯器
  • 執行引擎
  • Hive伺服器
  • 使用者端元件 提供命令列介面Hive CLI、Web UI、JDBC驅動等

Hive資料型別

Hive支援兩種資料型別,一種原子資料型別、還有一種叫複雜資料型別。

 基本資料型別 
型別描述範例
TINYINT1位元組有符合整數1
SMALLINT2位元組有符號整數1
INT4位元組有符號整數1
BIGINT8位元組有符號整數1
FLOAT4位元組單精度浮點數1.0
DOUBLE8位元組雙精度浮點數1.0
BOOLEANtrue/falsetrue
STRING字串“hive”,‘hive’

Hive型別中的String資料型別類似於MySQL中的VARCHAR。該型別是一個可變的字串。

Hive支援資料型別轉換,Hive是用Java編寫的,所以資料型別轉換規則遵循Java :

隱式轉換 --> 小轉大

強制轉換 --> 大傳小

型別描述範例
ARRAY有序的欄位。字元型別必須相同ARRAY(1,2)
MAP無序的鍵值對。建的型別必須是原子的,值可以是任何型別。Map(‘a’,1,‘b’,2)
STRUCT一組命名的欄位。欄位型別可以不同STRUCT(‘a’,1,1,0)

到此這篇關於一文了解Hive是什麼的文章就介紹到這了,更多相關Hive是什麼內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com