Impala原始碼解析(1) 概念與架構

2021-07-04 17:21:55 字數 2134 閱讀 5009

寫在前面:

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...