寫在前面:
impala作為基於記憶體的mpp資料庫,底層是hdfs,能夠快速響應sql查詢。接下來一系列文章是綜合網上其他blog和自己看原始碼整理,旨在的解析impala核心,為自己開發借鑑經驗。有錯誤之處,還望指正!
資料:impala官網:
cloudera impala:
原**:
impala守護程序
impala核心成員是乙個執行在集群中每乙個節點上的守護程序,物理表示為impalad程序。
負責資料檔案的讀寫;
從impala-shell命令列、hue、jdbc或者odbc接收並轉化查詢;
並行查詢和給集群中其他節點分配任務;
把查詢中間結果傳輸到中心協調節點。
你可以給執行在任何乙個結點上的守護程序提交查詢,那個節點就作為所提交查詢的協調節點。
其他節點把中間部分查詢結果傳輸到協調者節點,然後協調者節點為所提交的查詢構造最後完整的結果。當通過impala-shell命令列執行功能性實驗,為了方便,你可能一直都是連線到相同的impala守護程序。對於執行生產線上的工作,你可能需要在不同節點間做負載均衡,通過jdbc、odbc按照round-robin的形式向不同的impala程序提交查詢。
impalad守護程序頻繁的跟statestore程序通訊,確保哪些節點健康以及能夠接受新的任務。
他們也接收來自catalogd守護程序的廣播資訊,一旦任何集群中的impala節點create,alter或者drop任何型別的物件,或者當insert或者loaddata語句在impala中執行。這個後台通訊減少refresh或者invalidatemetadata語句,後者優先在impala必須用於在節點中同步元資料。
statestore
impala中statestore程序檢測集群中每乙個節點上impala守護程序的健康程度,並且不斷的把它的發現**給這裡的每乙個程序。物理表示為statestored程序;你只需要在集群中的乙個節點上執行這樣的程序。如果乙個
impala
節點由於硬體故障、網路錯誤、軟體事故、或者其他原因造成離線,這個
statestore
通知所有其他節點,所以後來的查詢避免傳送到這些不能到達的節點。 因為
statestore
程序的目的是當出錯的時候起作用,對
impalajiqun
中平常的操作不重要。如果
statestore
不執行或者變得不可達,其他節點照常繼續執行並且在他們之間分配任務;如果有些節點在
statestore
離線的情況下出錯,這個集群的魯棒性下降。當這個
statestore
catalog服務
catalog
服務將來自
impalasql
語句修改元資料的資訊
**給集群中的所有其他節點。物理表示為
catalogd
守護程序;你只需要在集群中的乙個節點上執行這個程序。因為這個請求是通過
statestore
守護程序,有意義將
statestored
和catalogd
服務執行在同乙個節點。
這個在impala1.2
引入的新成員減少
refresh
和invalidatemetadata
語句的必要。正式來說,如果你在乙個
impala
節點上發起
createdatabase
,dropdatabase
, createtable
, altertable
,or
droptable
語句,需要
refresh
和invalidatemetadata
語句。但是如果在
hive
上ddl
,那麼還是需要
refresh
和invalidatemetadata
語句。(有改動)
以下是sql執行流程圖:
注:關於statestore和catalog只需要執行在集群中的乙個結點,並且**資訊,應該可以理解為這兩個程序是資訊中心,通過它1:n的形式廣播資訊。通過statestore的訂閱發布模式**給其他節點。statestore只是蒐集心跳資訊,那麼心跳應該是impalad程序傳送的。
Impala原始碼分析 1
本章開始進入原始碼分析階段,參考鏈結是一篇非常好的impala實現 執行流程介紹的文件,感謝作者。impala內部架構圖如下 圖2 1 impala內部架構 從圖中可以看出,impala三個部分 client impalad statestore的關係。元件 說明 client 圖中可以看到有三種,...
Impala概念及架構解析
impala伺服器是乙個分布式 大規模並行處理 mpp 資料庫引擎。執行在集群每個節點上的守護程序,名稱為impalad。負責讀寫資料檔案 接受查詢請求,將查詢結果返回給中心協調者節點。statestore搜尋集群中impalad程序節點的健康狀態,並不斷將健康狀態的結果 給所有的impalad程序...
Qt原始碼解析 1
本文 感謝原創者分享 如果你閱讀了 qt 的源 你會看到一堆奇奇怪怪的巨集,例如 q d,q q。我們的qt原始碼之旅就從理解這些巨集說起。下面先看乙個c 的例子。cpp class person person string name void setname string name int age...