Impala原始碼分析 1

2021-06-24 11:36:21 字數 3962 閱讀 6846

本章開始進入原始碼分析階段,參考鏈結是一篇非常好的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 ...