Hive引擎底層初探

1、什麼是Hive

Hive是一個基於Hadoop的數據倉庫工具,用於處理和分析大規模結構化數據。Hive提供了類似SQL的查詢語言(HiveQL),使得熟悉SQL的用戶能夠查詢數據。Hive將SQL查詢轉換爲MapReduce任務,以在Hadoop集羣上執行數據處理和分析。

2、Hive起源

回答這個問題之前,先介紹下Hadoop。Hadoop是專門爲離線和大數據分析而設計的分佈式基礎架構。Hadoop的計算模型是MapReduce,將計算任務分割成多個處理單元,並將其分散到一羣家用或服務級別的硬件機器上,從而降低成本。但是直接用MapReduce處理大數據會面臨難題:

MapReduce開發需要具備較高的底層細節知識,開發難度大,學習成本高
使用MapReduce框架開發,項目週期長,成本高

在此背景下Hive應運而生。Hive是基於Hadoop的一個數據倉庫工具,本質是將SQL轉換成MapReduce任務進行運算。將結構化的數據文件映射爲一張數據庫表,並提供簡單的sql查詢功能,極大降低用戶使用難度。

3、Hive架構

3.1 基本組成部分

Hive的架構是一個複雜的系統,通過用戶接口、元數據存儲、驅動器和Hadoop集羣等多個組件的協同工作,實現了對大規模數據的高效存儲和查詢處理。其架構圖如下圖所示。





 

用戶接口模塊

這是用戶與Hive進行交互的主要方式。Hive提供了多種用戶接口,包括CLI(命令行接口)、Client(客戶端)、WUI(Web用戶界面)以及JDBC/ODBC(允許Java或其他編程語言通過JDBC或ODBC訪問Hive)。通過這些接口,用戶可以執行HQL(Hive查詢語言)語句,進行數據的查詢、分析和管理。

BDP平臺將頁面的SQL轉換成SHELL腳本,調用CLI來啓動Hive引擎。





 





 

元數據模塊

Hive是將數據文件映射成一張表,元數據模塊主要負責描述和管理數據存儲、表結構、分區信息等,通常存儲在關係型數據庫中,如MySQL或Derby。





 



驅動器(Driver)

驅動器是Hive的核心組件,主要作用是將HiveQL語句轉換成一系列的MapReduce(MR)作業。驅動器中包含了解析器、編譯器、優化器和執行器等多個子組件。解析器將用戶的HQL查詢語句轉換爲抽象語法樹(AST),編譯器將AST編譯成邏輯執行計劃,優化器對邏輯計劃進行優化,最後執行器將優化後的計劃轉換成可以運行的物理計劃並執行。







 

Hadoop集羣

Hive是建立在Hadoop上的數據倉庫基礎構架,因此Hadoop集羣是Hive架構的重要組成部分。Hive使用Hadoop的分佈式文件系統(HDFS)進行數據存儲,利用Hadoop的MapReduce框架進行大規模數據的計算和處理。



3.2 Hadoop

Hadoop是開源的分佈式存儲和計算系統,旨在處理大規模數據集。它最初由Apache軟件基金會開發,現已成爲處理大數據的行業標準之一。Hadoop主要包括以下核心組件:HDFS、MapReduce。

3.2.1 分佈式文件系統(HDFS)

HDFS是Hadoop的分佈式文件系統,用於存儲大規模數據集。它將數據分佈存儲在集羣中的多臺服務器上,通過數據冗餘存儲來提供容錯性和高可靠性。

高可靠性

HDFS它將文件數據劃分爲多個數據塊,並在集羣中的多個節點上進行復制存儲。每個數據塊默認會有多個(通常是三個)副本存儲在不同的節點上。這種冗餘存儲機制確保了即使某個節點或副本發生故障,數據仍然可以從其他副本中恢復,從而保證了數據的高可靠性。

HDFS架構

HDFS採用了主從架構,包括一個NameNode和多個DataNode。NameNode負責管理文件系統的命名空間和元數據信息,而DataNode負責存儲實際的數據塊。

讀取文件的過程:
1. 客戶端向NameNode請求獲取文件,並對請求進行檢查。
2. 如果請求檢查通過,NameNode將查詢元數據,向客戶端返回文件所在的各個Block的DN地址。
3. 客戶端拿到DN列表之後,按照Block,根據負載規則請求一臺服務器,建立通道讀取數據。
4. DN接收到請求後,向客戶端傳輸Block內容。
5. 獲取到的內容,存入本地緩存,然後寫入到輸出目標中。





 

3.2.2 分佈式計算框架(MapReduce)

MapReduce是Hadoop的分佈式計算框架,用於在大規模數據集上執行並行計算任務。它將計算任務分解爲多個獨立的子任務,然後在集羣中的多臺計算節點上並行執行這些子任務。MapReduce包括Map階段和Reduce階段 ,2個階段。

Map階段將原始數據分解爲更小的數據單元,這些單元可以被並行處理,且彼此之間沒有太多依賴。
Reduce階段則對Map階段生成的中間結果進行彙總,以得到最終的處理結果。





 

4、Hive工作流程

Hive是一個建立在Hadoop之上的數據倉庫系統,它提供了類似於SQL的查詢語言(HiveQL),使用戶可以在大規模數據集上執行查詢和分析操作。下面是Hive的工作流程:

1. 解析HiveSQL
當用戶提交一個HiveSQL查詢時,Hive的解析器首先會解析這個查詢,將其轉換成一個抽象語法樹(AST)。
解析器會檢查SQL語法的正確性,並將SQL語句的各個部分(如SELECT、FROM、WHERE等)轉換爲相應的內部表示。
2. 語義分析
語義分析階段會檢查查詢的語義正確性,確保所有引用的表、列和函數都存在且有效。
在這個階段,Hive還會獲取表的元數據,如列的數據類型、表的分區信息等,爲後續的計劃生成做準備。
3. 生成邏輯執行計劃
接下來,Hive會根據解析和語義分析的結果,生成一個邏輯執行計劃。這個計劃描述了查詢的執行步驟,但不涉及具體的物理操作。
邏輯計劃通常包括一系列的操作,如掃描表、過濾數據、聚合數據等。
4. 邏輯計劃優化
在生成邏輯計劃後,Hive會對其進行優化,以提高查詢的執行效率。
優化可能包括重寫查詢、消除冗餘操作、選擇更有效的連接策略等。
5. 生成物理執行計劃
優化後的邏輯計劃會被轉換爲物理執行計劃。物理計劃描述瞭如何在Hadoop集羣上實際執行查詢。
在這個階段,Hive會決定將哪些操作映射到MapReduce任務上,以及如何在集羣中分配這些任務。
6. 執行MapReduce任務
根據物理執行計劃,Hive會啓動MapReduce任務來執行查詢。任務讀取的數據來自HDFS。
Map階段通常負責讀取數據並進行一些基本的處理,如過濾和轉換。
Reduce階段則負責聚合數據並生成最終結果。
7. 返回結果
當所有MapReduce任務完成後,Hive會收集並整理結果,然後將其返回給用戶。





 

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