Impala 技術原理

Impala 簡介

Impala 是由 Cloudera 公司開發的新型查詢系統,它提供 SQL 語義,能查詢存儲在 Hadoop 的 HDFS 和 HBase 上的 PB 級大數據,在性能上比 Hive 高出 3~30 倍。

Impala 的運行需要依賴於 Hive 的元數據。Impala 是參照 Dremel 系統進行設計的。

Impala 採用了與商用並行關係數據庫類似的分佈式查詢引擎,可以直接與 HDFS 和 HBase 進行交互查詢。

Impala 和 Hive 採用相同的 SQL 語法、ODBC 驅動程序和用戶接口。

組件

圖:Impala 與其他組件的關係

Impala 系統架構

系統架構

圖:Impala 系統架構圖

Impala 和 Hive、HDFS、HBase 等工具是統一部署在一個 Hadoop 平臺上的。Impala 主要由 Impalad,State Store 和 CLI 三部分組成。

(1)Impalad

(2)State Store

(3)CLI

說明:Impala 中的元數據直接存儲在 Hive 中。Impala 採用與 Hive 相同的元數據、SQL 語法、ODBC 驅動程序和用戶接口,從而使得在一個 Hadoop 平臺上,可以統一部署 Hive 和 Impala 等分析工具,同時支持批處理和實時查詢。

Impala 查詢執行過程

過程圖

圖:Impala 查詢執行過程圖

Impala 執行查詢的具體過程:

  1. 第 0 步,當用戶提交查詢前,Impala 先創建一個負責協調客戶端提交的查詢的 Impalad 進程,該進程會向 Impala State Store 提交註冊訂閱信息,State Store 會創建一個 statestored 進程,statestored 進程通過創建多個線程來處理 Impalad 的註冊訂閱信息。

  2. 第 1 步,用戶通過 CLI 客戶端提交一個查詢到 impalad 進程,Impalad 的 Query Planner 對 SQL 語句進行解析,生成解析樹;然後,Planner 把這個查詢的解析樹變成若干 PlanFragment,發送到 Query Coordinator.

  3. 第 2 步,Coordinator 通過從 MySQL 元數據庫中獲取元數據,從 HDFS 的名稱節點中獲取數據地址,以得到存儲這個查詢相關數據的所有數據節點。

  4. 第 3 步,Coordinator 初始化相應 impalad 上的任務執行,即把查詢任務分配給所有存儲這個查詢相關數據的數據節點。

  5. 第 4 步,Query Executor 通過流式交換中間輸出,並由 Query Coordinator 匯聚來自各個 impalad 的結果。

  6. 第 5 步,Coordinator 把彙總後的結果返回給 CLI 客戶端。

Impala 與 Hive 的比較

對比

圖:Impala 與 Hive 的對比

Hive 與 Impala 的不同點總結如下:

  1. Hive 適合於長時間的批處理查詢分析,而 Impala 適合於實時交互式 SQL 查詢。

  2. Hive 依賴於 MapReduce 計算框架,Impala 把執行計劃表現爲一棵完整的執行計劃樹,直接分發執行計劃到各個 Impalad 執行查詢。

  3. Hive 在執行過程中,如果內存放不下所有數據,則會使用外存,以保證查詢能順序執行完成,而 Impala 在遇到內存放不下數據時,不會利用外存,所以 Impala 目前處理查詢時會受到一定的限制。

Hive 與 Impala 的相同點總結如下:

  1. Hive 與 Impala 使用相同的存儲數據池,都支持把數據存儲於 HDFS 和 HBase 中。

  2. Hive 與 Impala 使用相同的元數據。

  3. Hive 與 Impala 中對 SQL 的解釋處理比較相似,都是通過詞法分析生成執行計劃。

總結:

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/NVNlYfdRBbe5N-7MSgEAVA