-
使用 Docker 部署 最新版本Apache Doris3.0:踩坑与解决指南
- 网站名称:使用 Docker 部署 最新版本Apache Doris3.0:踩坑与解决指南
- 网站分类:技术文章
- 收录时间:2025-10-01 20:03
- 网站地址:
“使用 Docker 部署 最新版本Apache Doris3.0:踩坑与解决指南” 网站介绍
前期针对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");
四、总结
过于相信官方文档,会被误导(内容错误或更新不及时!!!),额外花了很多时间。很多博客教程内容几乎一样,或者单纯的搬运官方介绍,很难找到有效信息。
- 常规Ai、博客等
- 官方仓库源码找答案:建议注意观察日志信息,然后通过官方仓库中的相关文件查找信息,然后修改相关配置即可,一般就是各种脚本文件、配置文件(开源的好处,赞)
- 自行编译镜像:相关内容配置文件按需指定即可(mac系列编译可能有些麻烦,暂未尝试)
更多相关网站
- Python目录规范:呐,这个就叫专业!
- 在线文档预览kkFileView部署及使用指南
- 逐步分解,一文教会你如何用 jenkins+docker 实现主从模式
- 每天一个 Python 库:logging 用法精讲,高效简洁的输出日志
- Python疯狂练习60天——第十四天_疯狂python讲义豆瓣评分
- 开源:NginxWebUI一款图形化管理Nginx配置的工具
- 如何使用Java API操作HDFS系统?_hdfs java api的常见环境准备?
- Gitlab+P3C-PMD(阿里云插件)标准化你团队的代码和提交信息
- NginxWebUI - 图形化的 Nginx 配置管理工具
- Linux服务器终端中文乱码解决_linux 终端显示中文
- 《Servlet》第05节:创建第一个Servlet程序(HelloSevlet)
- java项目相关知识点整理_java工程项目
- java高级用法之:无所不能的java,本地方法调用实况
- 还用swagger 吗!推荐一种好用的接口文档自动管理方案
- 小技巧!两分钟解决IntelliJ IDEA中文乱码问题
- JavaEE高级开发:Tomcat7优化配置_tomcat9调优
- Java Java命令学习系列(一)——Jps
- Maven快速入门(二)手动创建maven项目hellomaven
- 最近发表
- 标签列表
-
- mydisktest_v298 (35)
- sql 日期比较 (33)
- document.appendchild (35)
- 头像打包下载 (35)
- 梦幻诛仙表情包 (36)
- java面试宝典2019pdf (26)
- disk++ (30)
- 加密与解密第四版pdf (29)
- iteye (26)
- centos7.4下载 (32)
- intouch2014r2sp1永久授权 (33)
- jdk1.8.0_191下载 (27)
- axure9注册码 (30)
- 兔兔工程量计算软件下载 (27)
- ccproxy破解版 (31)
- aida64模板 (28)
- engine=innodb (33)
- shiro jwt (28)
- segoe ui是什么字体 (27)
- head first java电子版 (32)
- clickhouse中文文档 (28)
- jdk-8u181-linux-x64.tar.gz (32)
- 计算机网络自顶向下pdf (34)
- -dfile.encoding=utf-8 (33)
- jdk1.9下载 (32)