本章開始進入原始碼分析階段,參考鏈結是一篇非常好的impala實現、執行流程介紹的文件,感謝作者。
impala內部架構圖如下:
圖2-1 impala內部架構
從圖中可以看出,impala三個部分:client、impalad、statestore的關係。
元件
說明
client
圖中可以看到有三種,是thrift客戶端,用來提交查詢,連線到impalad的21000埠
impalad
有frontend和backend兩部分,包括三個thrift server(beeswax-server、hs2-server、be-server)
statestore
各個impalad向其註冊,然後它向各個impalad更新集群中其他節點的狀態
下面介紹一下impalad元件的各個埠,如下表:
屬性
值
說明
impalad
元件埠impala
後台程式後端埠
be_port
22000
預設值impalabackendservice
匯出的埠。
impala daemon beeswax
埠
beeswax_port
21000
預設值impala daemon
向beeswax
客戶端請求提供服務所使用的埠。
impala daemon hiveserver2
埠
hs2_port
21050
預設值impala daemon
向hiveserver2
客戶端請求提供服務所使用的埠。
statestoresubscriber
服務埠
state_store_subscriber_port
23000
預設值statestoresubscriberservice
執行的埠。
statestore
元件埠statestore
服務埠
state_store_port
24000
預設值statestoreservice
匯出的埠。
伺服器端口
webserver_port
25010
預設值statestore
除錯**伺服器執行的埠。
其中beeswax_port=21000是用來給beeswax客戶端提供服務的埠,比如圖中的hue客戶端、jdbc、impala-shell三種client都會使用這個埠;hs2_port=21050是用來給hiveserver2客戶端提供服務的;be_port=22000是用來與內部的其他impalad程序互動的埠;state_store_subscriber_port=23000是用來向statestated程序註冊自己和更新狀態用的埠;而statestore元件裡的24000埠正是用來與impalad的23000埠進行互動的,其他埠不太重要,不做介紹。
整體的**檔案結構如下:
2.2.1 impalad-main.cc
16 // this file contains the main() function for the impala daemon process,
17 // which exports the thrift services impalaservice and impalainternalservice.
18 19 #include 20 #include 21
22 #include "common/logging.h"
23 #include "common/init.h"
24 #include "exec/hbase-table-scanner.h"
25 #include "exec/hbase-table-writer.h"
26 #include "runtime/hbase-table-factory.h"
27 #include "codegen/llvm-codegen.h"
28 #include "common/status.h"
29 #include "runtime/coordinator.h"
30 #include "runtime/exec-env.h"
31 #include "util/jni-util.h"
32 #include "util/network-util.h"
33 #include "rpc/thrift-util.h"
34 #include "rpc/thrift-server.h"
35 #include "rpc/rpc-trace.h"
36 #include "service/impala-server.h"
37 #include "service/fe-support.h"
38 #include "gen-cpp/impalaservice.h"
39 #include "gen-cpp/impalainternalservice.h"
40 #include "util/impalad-metrics.h"
41 #include "util/thread.h"
42 43 using namespace impala;
44 using namespace std;
45 46 declare_string(classpath);
47 declare_bool(use_statestore);
48 declare_int32(beeswax_port);
49 declare_int32(hs2_port);
50 declare_int32(be_port);
51 declare_string(principal);
52 53 int main(int argc, char** argv)
84 85 // this blocks until the beeswax and hs2 servers terminate
86 exit_if_error(beeswax_server->start());
87 exit_if_error(hs2_server->start());
88 impaladmetrics::impala_server_ready->update(true);
89 log(info) << "impala has started.";
90 beeswax_server->join(); //阻塞等待beeswax-server退出才執行後面的語句
91 hs2_server->join(); //阻塞等待hs2-server退出才繼續執行後面語句
92 93 delete be_server;
94 delete beeswax_server;
95 delete hs2_server;
96 }
待續。。。 Impala原始碼解析(1) 概念與架構
寫在前面 impala作為基於記憶體的mpp資料庫,底層是hdfs,能夠快速響應sql查詢。接下來一系列文章是綜合網上其他blog和自己看原始碼整理,旨在的解析impala核心,為自己開發借鑑經驗。有錯誤之處,還望指正!資料 impala官網 cloudera impala 原 impala守護程序...
cvDilate 原始碼分析 1
在cv.h檔案中對cvdilate的定義如下 cvapi void cvdilate const cvarr src,cvarr dst,iplconvkernel element cv default null int iterations cv default 1 iplconvkernel 指...
leveldb原始碼分析1
leveldb是乙個key value型的儲存引擎,由google開發,並宣布在bsd許可下開放源 plain git clone plain cd leveldb make all 此時生成libleveldb.a庫檔案。拷貝leveldb的標頭檔案到 usr include下 plain cp ...