[Apache Doris] Apache Doris 架构及代码目录解读
一、系统架构
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/