[Apache Doris] Apache Doris 架構及代碼目錄解讀


一、系統架構

Doris是一個MPP的OLAP系統,主要整合了Google Mesa(數據模型),Apache Impala(MPP Query Engine)和Apache ORCFile (存儲格式,編碼和壓縮) 的技術。

既可以滿足OLAP查詢,也可以滿足Adhoc查詢需求。

image

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/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM