hive基本概念原理與底層架構
Hive是一個數據倉庫基礎工具在Hadoop中用來處理結構化資料。它架構在Hadoop之上,總歸為大資料,並使得查詢和分析方便。提供簡單的sql查詢功能,可以將sql語句轉換為MapReduce任務進行執行。
術語“大資料”是大型資料集,其中包括體積龐大,高速,以及各種由與日俱增的資料的集合。使用傳統的資料管理系統,它是難以加工大型資料。因此,Apache軟體基金會推出了一款名為Hadoop的解決大資料管理和處理難題的框架。
Hadoop
Hadoop是一個開源框架,在分散式環境中儲存和處理大型資料。它包含兩個模組,一個是MapReduce,另外一個是Hadoop分散式檔案系統(HDFS)。
-
MapReduce:它是一種並行程式設計模型在大型叢集普通硬體可用於處理大型結構化,半結構化和非結構化資料。
-
HDFS:Hadoop分散式檔案系統是Hadoop的框架的一部分,用於儲存和處理資料集。它提供了一個容錯檔案系統在普通硬體上執行。
Hadoop生態系統包含了用於協助Hadoop的不同的子專案(工具)模組,如Sqoop, Pig 和 Hive。
-
Sqoop: 它是用來在HDFS和RDBMS之間來回匯入和匯出資料。
-
Pig: 它是用於開發MapReduce操作的指令碼程式語言的平臺。
-
Hive: 它是用來開發SQL型別指令碼用於做MapReduce操作的平臺。
注:有多種方法來執行MapReduce作業:
- 傳統的方法是使用Java MapReduce程式結構化,半結構化和非結構化資料。
- 針對MapReduce的指令碼的方式,使用Pig來處理結構化和半結構化資料。
- Hive查詢語言(HiveQL或HQL)採用Hive為MapReduce的處理結構化資料。
Hive是什麼?
Hive是一個數據倉庫基礎工具在Hadoop中用來處理結構化資料。它架構在Hadoop之上,總歸為大資料,並使得查詢和分析方便。
最初,Hive是由Facebook開發,後來由Apache軟體基金會開發,並作為進一步將它作為名義下Apache Hive為一個開源專案。它用在好多不同的公司。例如,亞馬遜使用它在 Amazon Elastic MapReduce。
Hive 不是
- 一個關係資料庫
- 一個設計用於聯機事務處理(OLTP)
- 實時查詢和行級更新的語言
Hiver特點
- 它儲存架構在一個數據庫中並處理資料到HDFS。
- 它是專為OLAP設計。
- 它提供SQL型別語言查詢叫HiveQL或HQL。
- 它是熟知,快速,可擴充套件和可擴充套件的。
Hive架構
下面的元件圖描繪了Hive的結構:
該元件圖包含不同的單元。下表描述每個單元:
單元名稱 | 操作 |
---|---|
使用者介面/介面 | Hive是一個數據倉庫基礎工具軟體,可以建立使用者和HDFS之間互動。使用者介面,Hive支援是Hive的Web UI,Hive命令列,HiveHD洞察(在Windows伺服器)。 |
元儲存 | Hive選擇各自的資料庫伺服器,用以儲存表,資料庫,列模式或元資料表,它們的資料型別和HDFS對映。 |
HiveQL處理引擎 | HiveQL類似於SQL的查詢上Metastore模式資訊。這是傳統的方式進行MapReduce程式的替代品之一。相反,使用Java編寫的MapReduce程式,可以編寫為MapReduce工作,並處理它的查詢。 |
執行引擎 | HiveQL處理引擎和MapReduce的結合部分是由Hive執行引擎。執行引擎處理查詢併產生結果和MapReduce的結果一樣。它採用MapReduce方法。 |
HDFS 或 HBASE | Hadoop的分散式檔案系統或者HBASE資料儲存技術是用於將資料儲存到檔案系統。 |
Hive架構的更一般的架構
該元件圖包含不同的單元。下表描述每個單元:
單元名稱 | 操作 |
---|---|
使用者介面 | 使用者介面主要有三個:CLI,JDBC/ODBC和 WebUI CLI,即Shell命令列 JDBC/ODBC 是 Hive 的Java,與使用傳統資料庫JDBC的方式類似 WebGUI是通過瀏覽器訪問 Hive |
metastore | Hive 將元資料儲存在資料庫中(metastore),目前只支援 mysql、derby。Hive 中的元資料包括表的名字,表的列和分割槽及其屬性,表的屬性(是否為外部表等),表的資料所在目錄等 |
Driver | 直譯器、編譯器、優化器完成 HQL 查詢語句從詞法分析、語法分析、編譯、優化以及查詢計劃(plan)的生成。生成的查詢計劃儲存在 HDFS 中,並在隨後有 MapReduce 呼叫執行 |
Hive工作原理
下圖描述了Hive 和Hadoop之間的工作流程。
下表定義Hive和Hadoop框架的互動方式:
Step No. | 操作 |
---|---|
1 | Execute Query Hive介面,如命令列或Web UI傳送查詢驅動程式(任何資料庫驅動程式,如JDBC,ODBC等)來執行。 |
2 | Get Plan 在驅動程式幫助下查詢編譯器,分析查詢檢查語法和查詢計劃或查詢的要求。 |
3 | Get Metadata 編譯器傳送元資料請求到Metastore(任何資料庫)。 |
4 | Send Metadata Metastore傳送元資料,以編譯器的響應。 |
5 | Send Plan 編譯器檢查要求,並重新發送計劃給驅動程式。到此為止,查詢解析和編譯完成。 |
6 | Execute Plan 驅動程式傳送的執行計劃到執行引擎。 |
7 | Execute Job 在內部,執行作業的過程是一個MapReduce工作。執行引擎傳送作業給JobTracker,在名稱節點並把它分配作業到TaskTracker,這是在資料節點。在這裡,查詢執行MapReduce工作。 |
7.1 | Metadata Ops 與此同時,在執行時,執行引擎可以通過Metastore執行元資料操作。 |
8 | Fetch Result 執行引擎接收來自資料節點的結果。 |
9 | Send Results 執行引擎傳送這些結果值給驅動程式。 |
10 | Send Results 驅動程式將結果傳送給Hive介面。 |