Apache Doris 简介

Apache Doris(原百度 Palo)是一个现代化的MPP(大规模并行处理)分析型数据库,专为高并发、低延迟的实时分析场景设计。它结合了Google Mesa和Apache Impala的优点,提供了高性能、易扩展、高可用的分布式SQL数据分析解决方案。Doris采用列式存储引擎,支持多维分析、即席查询、统一的批流处理等特性,广泛应用于报表分析、即席查询、数据可视化、实时大屏等场景。

核心特性

  1. 简单易用:兼容MySQL协议,支持标准SQL,无需复杂ETL
  2. 高性能:MPP架构,向量化执行引擎,智能索引
  3. 高可用:支持多副本自动同步,故障自动恢复
  4. 可扩展:支持在线扩缩容,无需停机
  5. 统一的数据分析平台:支持多种数据模型(明细、聚合、更新)和数据源接入

Doris架构

Doris主要由两种角色组成:

  1. **FE (Frontend)**:负责元数据管理、查询解析、规划和调度
  2. **BE (Backend)**:负责数据存储和查询执行

Doris架构图

FE角色

  • Leader FE:处理所有元数据写操作,保证元数据一致性
  • Follower FE:接收Leader的元数据更新,提供读服务,可在Leader故障时被选为新Leader
  • Observer FE:只提供读服务,不参与选举,用于扩展查询吞吐量

BE角色

所有BE节点对等,负责数据存储和查询执行,支持横向扩展。

安装部署Doris

环境要求

  • 操作系统:CentOS 7+/Ubuntu 16.04+
  • JDK:1.8+
  • GCC:4.8.2+
  • 内存:建议FE ≥ 16GB,BE ≥ 32GB
  • 磁盘:SSD为佳
  • 网络:万兆网卡为佳

安装步骤

1. 下载安装包

1
2
3
4
5
# 下载最新版本
wget https://downloads.apache.org/doris/2.0.2/apache-doris-2.0.2-bin.tar.gz

# 解压
tar -zxvf apache-doris-2.0.2-bin.tar.gz

2. 配置FE

1
2
3
4
5
6
7
8
9
10
11
12
cd apache-doris-2.0.2/fe

# 修改配置文件
vim conf/fe.conf

# 添加以下配置
priority_networks=192.168.1.0/24 # 替换为实际网段
meta_dir=/path/to/doris/fe/meta # 元数据目录
http_port=8030
rpc_port=9020
query_port=9030
edit_log_port=9010

3. 配置BE

1
2
3
4
5
6
7
8
cd apache-doris-2.0.2/be

# 修改配置文件
vim conf/be.conf

# 添加以下配置
priority_networks=192.168.1.0/24 # 替换为实际网段
storage_root_path=/path/to/doris/be/storage # 数据存储目录

4. 启动FE

1
2
cd apache-doris-2.0.2/fe
bin/start_fe.sh --daemon

5. 启动BE

1
2
cd apache-doris-2.0.2/be
bin/start_be.sh --daemon

6. 添加BE节点到集群

使用MySQL客户端连接FE:

1
mysql -h 127.0.0.1 -P 9030 -u root

添加BE节点:

1
ALTER SYSTEM ADD BACKEND "192.168.1.10:9050";

常见问题及解决方案

1. FE部署问题

问题:priority_networks配置错误

ip address range configured for priority_networks does not include the current IP address

解决方案

需要在FE的conf目录下正确设置priority_networks网段,确保包含当前节点IP地址。

  1. 查看本机IP地址:

    1
    ip addr show eth0 | grep inet | awk '{print $2}' | awk -F'/' '{print $1}'
  2. 修改fe.conf文件,设置正确的网段:

    1
    priority_networks=192.168.1.0/24

问题:FE启动时卡在UNKNOWN状态

wait catalog to be ready. FE type: UNKNOWN. is ready: false, counter: 658341

解决方案

  1. 检查是否存在虚拟IP地址冲突:

    1
    ip addr
  2. 检查元数据目录权限:

    1
    chown -R doris:doris /path/to/doris/fe/meta
  3. 检查日志文件查找具体错误:

    1
    tail -f log/fe.log
  4. 如果是全新安装,可以尝试清空元数据目录重新启动:

    1
    2
    rm -rf /path/to/doris/fe/meta/*
    bin/start_fe.sh --daemon

2. BE部署问题

问题:要求禁用swap内存

Please disable swap memory before installation

解决方案

Doris要求禁用swap以获得更好的性能。

  1. 临时禁用swap:

    1
    sudo swapoff -a
  2. 永久禁用swap(修改/etc/fstab):

    1
    2
    3
    4
    # 编辑/etc/fstab,注释掉包含swap的行
    sudo vim /etc/fstab
    # 注释掉类似下面的行
    # /dev/mapper/centos-swap swap swap defaults 0 0

问题:JAVA_HOME未定义

The JAVA_HOME environment variable is not defined correctly

解决方案

  1. 设置JAVA_HOME环境变量:

    1
    2
    echo 'export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk' >> ~/.bashrc
    source ~/.bashrc
  2. 或在启动脚本中直接指定:

    1
    JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk bin/start_fe.sh --daemon

3. 集群问题

问题:BE节点无法加入集群

解决方案

  1. 检查BE状态:

    1
    SHOW BACKENDS;
  2. 确认网络连通性:

    1
    telnet BE_IP 9050
  3. 检查BE日志:

    1
    tail -f /path/to/doris/be/log/be.INFO
  4. 尝试重新添加BE:

    1
    2
    ALTER SYSTEM DECOMMISSION BACKEND "BE_IP:9050";
    ALTER SYSTEM ADD BACKEND "BE_IP:9050";

问题:表创建后无法写入数据

解决方案

  1. 检查表的分区和分桶设计是否合理
  2. 确认BE节点状态正常
  3. 检查写入语句是否正确
  4. 查看FE和BE日志获取详细错误信息

性能优化建议

  1. 合理设计表模型:选择适当的模型(Aggregate、Unique、Duplicate)
  2. 优化分区分桶:根据查询模式设计分区和分桶策略
  3. 合理设置Bloom Filter:对高基数列启用Bloom Filter
  4. 使用物化视图:针对常见查询模式创建物化视图
  5. 合理设置副本数:根据可靠性需求和资源情况设置
  6. 定期Compaction:执行ADMIN MANUAL COMPACT优化存储
  7. 监控资源使用:关注CPU、内存、磁盘和网络使用情况

常用运维命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
-- 查看FE节点
SHOW FRONTENDS;

-- 查看BE节点
SHOW BACKENDS;

-- 查看表信息
SHOW CREATE TABLE tbl_name;

-- 查看表分区
SHOW PARTITIONS FROM tbl_name;

-- 查看表的数据分布
SHOW TABLET FROM tbl_name;

-- 手动触发Compaction
ALTER TABLE tbl_name MANUAL COMPACT;

总结

Apache Doris是一个功能强大的分析型数据库,适合各种实时分析场景。正确部署和配置Doris是充分发挥其性能的关键。本文记录了Doris部署过程中的常见问题及解决方案,希望能帮助用户更顺利地部署和使用Doris。

参考资源