• [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/

    本文作者: chaplinthink, 关注领域:大数据、基础架构、系统设计, 一个热爱学习、分享的大数据工程师
  • 相关阅读:
    【数论】【快速幂】【扩展欧几里得】【BSGS算法】bzoj2242 [SDOI2011]计算器
    【数论】【ex-BSGS】poj3243 Clever Y
    【数论】【扩展欧几里得】hdu3579 Hello Kiki
    【CCpp程序设计2017】推箱子游戏
    【Miller-Rabin算法】
    【数论】nefu119 组合素数
    【数论】nefu118 n!后面有多少个0
    【树形dp】vijos P1180 选课
    【树形dp】Codeforces Round #405 (rated, Div. 1, based on VK Cup 2017 Round 1) B. Bear and Tree Jumps
    【树形dp】VK Cup 2012 Round 1 D. Distance in Tree
  • 原文地址:https://www.cnblogs.com/bigdata1024/p/15518789.html
Copyright © 2020-2023  润新知