一、系統架構
Doris是一個MPP的OLAP系統,主要整合了Google Mesa(數據模型),Apache Impala(MPP Query Engine)和Apache ORCFile (存儲格式,編碼和壓縮) 的技術。
既可以滿足OLAP查詢,也可以滿足Adhoc查詢需求。
Frontend
Frontend 以 Java 語言為主。主要有如下功能職責:
- 接收用戶連接請求(MySQL 協議層)
- 元數據存儲與管理
- 查詢語句的解析與查詢計划的執行
- 集群管控
Backend
Backend 以 C++ 語言為主。主要有如下功能職責:
- 數據存儲與管理
- 查詢計划的執行
二、Apache Doris 代碼目錄結構說明
├── be // BE 代碼目錄
├── bin // FE/BE 的啟停腳本
├── build_plugin.sh // FE 插件編譯腳本
├── build.sh // Doris 編譯腳本
├── build-support // 編譯用輔助腳本
├── CODE_OF_CONDUCT.md // 貢獻者代碼行為准則
├── conf // FE/BE 的配置文件
├── contrib // 第三方貢獻代碼,如 udf
├── CONTRIBUTING_CN.md
├── CONTRIBUTING.md
├── DISCLAIMER
├── docker // Doris 開發鏡像的 Dockerfile
├── docs // 文檔目錄
├── env.sh
├── extension // 擴展功能代碼,如 flink connector 等
├── fe // FE 代碼目錄
├── fe_plugins // FE 插件目錄
├── fs_brokers // Broker 代碼目錄
├── gensrc // thrift/protobuf 等代碼生成目錄
├── LICENSE.txt
├── NOTICE.txt
├── README.md
├── run-be-ut.sh // BE 單元測試運行腳本
├── run-fe-ut.sh // FE 單元測試運行腳本
├── samples // 示例代碼目錄
├── thirdparty // 第三方依賴庫目錄
├── tools // 一些輔助工具
├── tsan_suppressions
├── ui // FE 前端代碼目錄
└── webroot // 一些靜態網頁相關代碼
主要介紹 fe/ be/ gensrc/ extension/ 四個目錄
2.1 FE
├── checkstyle-apache-header.txt
├── checkstyle.xml
├── conf
├── fe-common // 一些 FE 模塊的通用代碼
├── fe-core // FE 模塊主代碼
├── pom.xml
├── README
└── spark-dpp // Spark Load 所依賴的 Spark 導入程序代碼
fe-core 為 FE 的核心代碼模塊
├── main
│ ├── cup // 語法定義文件
│ ├── java // 主代碼
│ ├── jflex // 詞法定義文件
│ └── resources
└── test // 單元測試
├── java
└── resources
在 main/java/org/apache/doris/ 下即是 FE 代碼的主要部分了:
├── alter // 表結構變更操作相關的代碼。包括表結構變更,物化視圖等。
├── analysis // 包含所有SQL語法的java實例類
├── backup // 備份恢復操作相關的代碼
├── blockrule // SQL 黑名單相關代碼
├── catalog // 包含元數據操作的主類和各種數據庫、表、分區的元數據實例類
├── clone // 數據副本修復和均衡相關的代碼
├── cluster // 已廢棄
├── common // 一些工具類和通用定義
├── consistency // 數據一致性校驗相關的代碼
├── deploy // 部署相關代碼
├── external // Doris on Elasticsearch相關的代碼
├── ha // 元數據高可用相關的代碼
├── http // http v1 代碼
├── httpv2 // http v2 代碼(逐步替換v1)
├── journal // 元數據日志相關的代碼
├── ldap // LDAP 認證相關代碼
├── load // 導入作業相關代碼
├── master // FE Master角色相關的操作代碼,如元數據Checkpoint,BE任務匯報的處理等。
├── metric // FE 監控指標相關的代碼
├── monitor // JVM 監控相關代碼
├── mysql // MySQL協議層相關代碼
├── PaloFe.java // Main函數入口
├── persist // 元數據持久化相關的代碼
├── planner // 查詢優化器相關的代碼
├── plugin // Frontend端插件管理相關代碼
├── qe // 用於處理各類SQL請求相關的代碼。如查詢請求的處理類、DDL請求的處理類等
├── resource // 資源標簽相關的代碼
├── rewrite // 查詢優化器重寫規則相關的代碼
├── rpc // Frontend和Backend之間RPC協議相關的代碼
├── service // Frontend側各種服務器端代碼
├── system // 集群節點的實例類和集群節點管理相關的代碼
├── task // Frontend發往Backend的各類任務相關的代碼
└── transaction // 導入事務相關代碼
2.2 BE
├── CMakeLists.txt // CMake 編譯文件
├── src // 主代碼目錄
├── test // 單元測試
主代碼目錄包含:
├── agent // FE 下發的 agent task 相關處理類
├── common // 通用類
├── env // 文件系統操作類
├── exec // 執行算子相關代碼
├── exprs // 表達式、函數計算相關代碼
├── geo // 地理位置函數相關代碼
├── glibc-compatibility // GLIBC 兼容代碼
├── gutil // Google gutil 相關代碼
├── http // BE 端 http server 相關代碼
├── olap // 存儲層代碼
├── plugin // BE 插件管理相關代碼
├── runtime // 查詢層運行時相關代碼
├── service // BE 對外服務接口相關代碼
├── testutil // 單元測試輔助類
├── tools // 輔助工具相關代碼
├── udf // 用戶自定義函數相關代碼
└── util // 一些工具類
2.3 gensrc
├── Makefile
├── proto // protobuf 定義文件
├── script // 一些輔助腳本,包括函數定義代碼生成模板等
└── thrift // thrift 定義文件
2.4 extension
├── DataX // DataX doriswriter 插件
├── flink-doris-connector // Flink Doris Connector
├── logstash // logstash 導入插件
└── spark-doris-connector // Spark Doris Connector
三、 源碼編譯部署
使用docker鏡像編譯
# 掛載maven倉庫及源碼目錄並進入鏡像
$ docker run -it -v /data/dev:/root/.m2 -v /root/code/incubator-doris/:/root/incubator-doris/ apache/incubator-doris:build-env-1.3.1
# 編譯
sh build.sh
# 編譯文件位置
output/
WebUi:
http://ip:8030/login
默認登陸賬號: admin/