Impala架構概述

概述

Imala是基於Hive並使用內存進行計算,兼顧數據倉庫,具有實時,批處理,多併發等優點。因爲直接使用的Hive的metadata,也就是impala的元數據都存儲在Hive中的metadata之中,並且Impala兼容大部分Hive語法。

優點

1、Impala特別快,因爲所有的計算都可以放入內存當中進行完成,只要你內存足夠大
2、擯棄了MR的計算,改用C++來實現,有針對性的硬件優化
3、具有數據倉庫的特性,對hive的原有數據做數據分析
4、支持ODBC,jdbc遠程訪問

缺點

1、基於內存計算,對內存依賴性較大
2、改用C++編寫,意味着維護難度增大
3、基於hive,與hive共存亡,緊耦合
4、穩定性不如hive,不存在數據丟失的情況


架構

在這裏插入圖片描述

impala-server ==>啓動的守護進程,執行我們的查詢計劃 從節點,官方建議與所有的datanode裝在一起,可以通過hadoop的短路讀取特性實現數據的快速查詢
impala-statestore ==》 狀態存儲區 主節點
impalas-catalog ==》元數據管理區 主節點
查詢執行
impalad分爲frontend和backend兩個層次, frondend用java實現(通過JNI嵌入impalad), 負責查詢計劃生成, 而backend用C++實現, 負責查詢執行。


frontend生成查詢計劃分爲兩個階段:

(1)生成單機查詢計劃,單機執行計劃與關係數據庫執行計劃相同,所用查詢優化方法也類似。
(2)生成分佈式查詢計劃。 根據單機執行計劃, 生成真正可執行的分佈式執行計劃,降低數據移動, 儘量把數據和計算放在一起。
在這裏插入圖片描述
該SQL的目標是在三表join的基礎上算聚集, 並按照聚集列排序取topN。

impala的查詢優化器支持代價模型: 利用表和分區的cardinality,每列的distinct值個數等統計數據, impala可估算執行計劃代價, 並生成較優的執行計劃。 上圖左邊是frontend查詢優化器生成的單機查詢計劃, 與傳統關係數據庫不同, 單機查詢計劃不能直接執行, 必須轉換成如圖右半部分所示的分佈式查詢計劃。 該分佈式查詢計劃共分成6個segment(圖中彩色無邊框圓角矩形), 每個segment是可以被單臺服務器獨立執行的計劃子樹。

impala支持兩種分佈式join方式, 表廣播和哈希重分佈:

表廣播方式保持一個表的數據不動, 將另一個表廣播到所有相關節點(圖中t3);
哈希重分佈的原理是根據join字段哈希值重新分佈兩張表數據(譬如圖中t1和t2)。

分佈式計劃中的聚集函數分拆爲兩個階段執行。第一步針對本地數據進行分組聚合(Pre-AGG)以降低數據量, 並進行數據重分步, 第二步, 進一步彙總之前的聚集結果(mergeAgg)計算出最終結果。

與聚集函數類似, topN也是分爲兩個階段執行,

(1)本地排序取topN,以降低數據量;
(2) merge sort得到最終topN結果。

Backend從frontend接收plan segment並執行, 執行性能非常關鍵,impala採取的查詢性能優化措施有向量執行。 一次getNext處理一批記錄, 多個操作符可以做pipeline。LLVM編譯執行, CPU密集型查詢效率提升5倍以上。IO本地化。 利用HDFS short-circuit local read功能,實現本地文件讀取Parquet列存,相比其他格式性能最高提升5倍。

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