使用 Docker 部署 最新版本Apache Doris3.0:踩坑与解决指南

使用 Docker 部署 最新版本Apache Doris3.0:踩坑与解决指南

精选文章moguli202025-02-19 11:24:5818A+A-

前期针对IoT超大规模数据存储和分析进行技术调研,其中之一是Doris。现将部分踩坑记录和实践经验分享给大家。

Apache Doris 是一款高性能的 MPP 数据库,广泛应用于OLAP分析场景,同时为新一代数据仓库、湖仓一体等数据设施建设提供了有力支持,尤其是多种表模型、存算分析等特性,特别适合IoT物联网场景。fe/be的架构设计,方便运维管理。(详细介绍见官网
https://doris.apache.org/zh-CN/docs/3.0/gettingStarted/what-is-apache-doris)


一、安装 Apache Doris

(一)准备工作

1. 运行环境

  • ubuntu-arm 24.0.4 虚拟机 ,已分配8G内存 80G硬盘
  • Doris最新版本为3.0.3(最新稳定版为2.1.8)

2. 修改内存参数

默认情况下,FE(Frontend)组件的内存要求为 8G。如果在虚拟机测试环境中内存不足,会导致启动失败。

通过查看错误日志,可以定位到容器中配置文件的目录为 /opt/apache-doris/fe/conf。具体的配置文件是 fe.conf,可以从官方仓库获取,或者从容器中复制出来即可。修改其中的 Xmx 和 Xms 参数,以适应宿主机的内存情况。

https://github.com/apache/doris/blob/master/conf/fe.conf



(二)拉取镜像并启动

1. 拉取镜像

需要注意的是,官方文档中给出的镜像路径可能有误,可以使用的镜像路径为 selectdb/doris.fe-ubuntu 和 selectdb/doris.be-ubuntu。

以下是修改后的 docker-compose.yaml 文件内容:

version: "3"
services:
  fe:
    image: selectdb/doris.fe-ubuntu:3.0.3
    hostname: fe
    environment:
      - FE_SERVERS=fe1:172.16.224.140:9010
      - FE_ID=1
    network_mode: host
    volumes:
      - /data/doris/conf/fe:/opt/apache-doris/fe/conf

  be:
    image: selectdb/doris.be-ubuntu:3.0.3
    hostname: be
    environment:
      - FE_SERVERS=fe1:172.16.224.140:9010
      - BE_ADDR=172.16.224.140:9050
    depends_on:
      - fe
    network_mode: host
    volumes:
      - /data/doris/conf/be:/opt/apache-doris/be/conf

在 /data/doris/conf/fe 和 /data/doris/conf/be 目录下分别放置对应的配置文件(fe.conf 和 be.conf),并确保这些目录在宿主机上存在。

使用以下命令启动 Apache Doris:

docker-compose up -d

(三)访问 Web UI

在浏览器中访问 http://<宿主机IP>:8030,默认用户名为 admin,无密码。

二、基本使用

(一)连接到 Apache Doris

可以使用支持 MySQL 协议的客户端工具连接到 Apache Doris,例如 MySQL 客户端命令行工具:

mysql -uroot -P9030 -h127.0.0.1

也可以使用 Navicat 等可视化工具进行连接。

连接并检查集群状态:

mysql -uroot -P9030 -h127.0.0.1 -e 'SELECT `host`, `join`, `alive` FROM frontends()'
mysql -uroot -P9030 -h127.0.0.1 -e 'SELECT `host`, `alive` FROM backends()'

(二)创建表

默认情况下,Apache Doris 要求表的副本数为 3。如果在本地搭建的测试环境中只有一个 BE(Backend)节点,需要在创建表时指定副本数为 1【使用properties('replication_num' = '1')】,否则会报错。以下是创建表的 SQL 示例:

create table mytable
(
  k1 TINYINT,
  k2 DECIMAL(10, 2) DEFAULT "10.05",    
  k3 CHAR(10) COMMENT "string column",    
  k4 INT NOT NULL DEFAULT "1" COMMENT "int column"
) 
COMMENT "my first table"
DISTRIBUTED BY HASH(k1) BUCKETS 1
properties('replication_num' = '1');

三、问题记录与解决

(一)空间不足报错

报错现象:启动时出现 Not enough space 的错误,日志中显示类似以下内容:

fe-1  | StdoutLogger 2025-02-07 14:41:37,795 Using Java version 17
fe-1  | StdoutLogger 2025-02-07 14:41:37,795 -Dfile.encoding=UTF-8 -Djavax.security.auth.useSubjectCredsOnly=false -Xmx8192m -Xms8192m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/opt/apache-doris/fe/log -Xlog:gc*:/opt/apache-doris/fe/log/fe.gc.log.20250207-144137:time,uptime:filecount=10,filesize=50M --add-opens=java.base/java.nio=ALL-UNNAMED --add-opens java.base/jdk.internal.ref=ALL-UNNAMED
fe-1  | StdoutLogger 2025-02-07 14:41:37,843 start time: Fri Feb  7 14:41:37 UTC 2025
fe-1  | #
fe-1  | # There is insufficient memory for the Java Runtime Environment to continue.
fe-1  | # Native memory allocation (mmap) failed to map 8589934592 bytes for committing reserved memory.
fe-1  | OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x0000000600000000, 8589934592, 0) failed; error='Not enough space' (errno=12)
fe-1  | # An error report file with more information is saved as:
fe-1  | # /opt/apache-doris/hs_err_pid533.log

原因:默认的内存参数设置过高,宿主机的内存资源无法满足。

解决方法:通过挂载配置文件的方式,从外部修改启动时的内存参数。在 /data/doris/conf/fe 目录下新建 fe.conf 文件(可以从 Apache Doris 官方 GitHub 仓库下载,或从容器中复制),修改其中的 Xms 和 Xmx 参数。然后修改 docker-compose.yaml 文件,确保正确挂载了配置文件目录。




(二)没有可用的 scanNode Backend

报错现象:启动后出现 There is no scanNode Backend available 的错误。

原因:可能是 BE 节点尚未启动成功,或者由于中断后元数据出现问题。

解决方法:尝试清除元数据目录后重启,或者直接重新创建容器。元数据目录分别为:

  • FE 元数据目录:/opt/apache-doris/fe/doris-meta
  • BE 存储目录:/opt/apache-doris/be/storage

使用以下命令清除元数据目录:

rm -rf /opt/apache-doris/be/storage
rm -rf /opt/apache-doris/fe/doris-meta

(三)创建表时副本数报错

报错现象:创建表时出现以下错误:

ERROR 1105 (HY000): errCode = 2, detailMessage = replication num should be less than the number of available backends. replication num is 3, available backend num is 1

原因:默认的副本数为 3,而本地搭建的测试环境中只有一个 BE 节点。

解决方法

  • 方法 1:在创建表时指定副本数为 1,如前面创建表的 SQL 示例所示。
create table mytable
(
  k1 TINYINT,
  k2 DECIMAL(10, 2) DEFAULT "10.05",    
  k3 CHAR(10) COMMENT "string column",    
  k4 INT NOT NULL DEFAULT "1" COMMENT "int column"
) 
COMMENT "my first table"
DISTRIBUTED BY HASH(k1) BUCKETS 1 properties('replication_num' = '1');
  • 方法 2:全局修改默认副本数。执行以下 SQL 语句:
ADMIN SET FRONTEND CONFIG ('default_replication_num' ="1");

四、总结

过于相信官方文档,会被误导(内容错误或更新不及时!!!),额外花了很多时间。很多博客教程内容几乎一样,或者单纯的搬运官方介绍,很难找到有效信息。

  1. 常规Ai、博客
  2. 官方仓库源码找答案:建议注意观察日志信息,然后通过官方仓库中的相关文件查找信息,然后修改相关配置即可,一般就是各种脚本文件、配置文件(开源的好处,赞)
  3. 自行编译镜像:相关内容配置文件按需指定即可(mac系列编译可能有些麻烦,暂未尝试)
点击这里复制本文地址 以上内容由莫古技术网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

莫古技术网 © All Rights Reserved.  滇ICP备2024046894号-2