Doris实战笔记
本文基于Doris1.2.4.1版本部署,其他版本不同之处还请见谅
注意:在Doris官网下载时,记得查询自己的服务器cpu核心架构,下载合适的架构才能运行
Doris安装部署
Doris在安装部署时,可以使用官方提供的前后端和依赖包进行安装,同时可以自行编译,此处介绍使用官方脚本:
配置Fe
没什么难度,按照[Doris官方教程](快速开始 - Apache Doris)启动即可,可能个别机器会出现启动失败的问题,建议去github的issue中查看
配置Be
我们进入到 apache-doris-x.x.x/be
目录
cd apache-doris-x.x.x/be
修改 BE 配置文件 conf/be.conf
,这里我们主要修改两个参数:priority_networks
及 storage_root
,如果你需要更多优化配置,请参考 BE 参数配置说明,进行调整。
- 添加 priority_networks 参数
priority_networks=172.23.16.0/24
注意:
这个参数我们在安装的时候是必须要配置的,特别是当一台机器拥有多个IP地址的时候,我们要为 BE 指定唯一的IP地址。
Be配置时必须注意一下,这个地址后面绝对不能加分号,否则在启动be的start.sh时会以下下错误:
(core dumped) ${LIMIT:+${LIMIT}} "${DORIS_HOME}/lib/doris_be" "$@" 2>&1 < /d
- 配置 BE 数据存储目录
storage_root_path=/path/your/data_dir
注意:
- 默认目录在 BE安装目录的 storage 目录下。
- BE 配置的存储目录必须先创建好
配置 JAVA_HOME 环境变量
注意:
-
由于从 1.2 版本开始支持 Java UDF 函数,BE 依赖于 Java 环境。所以要预先配置
JAVA_HOME
环境变量,也可以在start_be.sh
启动脚本第一行添加export JAVA_HOME=your_java_home_path
来添加环境变量。 -
安装 Java UDF 函数,因为从1.2 版本开始支持Java UDF 函数,需要从官网下载 Java UDF 函数的 JAR 包(所谓的官网就在下载路径中的dependencies的tar包中,名称是:java-udf-jar-with-dependencies.jar,一直没找到,此处来自本人的咒骂)放到 BE 的 lib 目录下,否则可能会启动失败,如下报错:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/doris/udf/JniUtil Caused by: java.lang.ClassNotFoundException: org.apache.doris.udf.JniUtil at java.net.URLClassLoader.findClass(URLClassLoader.java:387) at java.lang.ClassLoader.loadClass(ClassLoader.java:418) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:355) at java.lang.ClassLoader.loadClass(ClassLoader.java:351) WARNING: Logging before InitGoogleLogging() is written to STDERR W0530 12:47:01.236318 3087945 doris_main.cpp:382] Failed to initialize JNI: [INTERNAL_ERROR]Failed to find JniUtil class.
启动 BE
在 BE 安装目录下执行下面的命令,来完成 BE 的启动。
./bin/start_be.sh --daemon
添加 BE 节点到集群
在此之前建议将mysql链接到全局命令,否则每次需要去mysql路径下执行,很麻烦:
ln -sf xxx命令路径 /usr/bin/xxx
通过MySQL 客户端连接到 FE 之后执行下面的 SQL,将 BE 添加到集群中
ALTER SYSTEM ADD BACKEND "be_host_ip:heartbeat_service_port";
- be_host_ip:这里是你 BE 的 IP 地址,和你在
be.conf
里的priority_networks
匹配 - heartbeat_service_port:这里是你 BE 的心跳上报端口,和你在
be.conf
里的heartbeat_service_port
匹配,默认是9050
。
查看 BE 运行状态
你可以在 MySQL 命令行下执行下面的命令查看 BE 的运行状态。
SHOW BACKENDS\G
示例:
mysql> SHOW BACKENDS\G
*************************** 1. row ***************************
BackendId: 10003
Cluster: default_cluster
IP: 172.21.32.5
HeartbeatPort: 9050
BePort: 9060
HttpPort: 8040
BrpcPort: 8060
LastStartTime: 2022-08-16 15:31:37
LastHeartbeat: 2022-08-17 13:33:17
Alive: true
SystemDecommissioned: false
ClusterDecommissioned: false
TabletNum: 170
DataUsedCapacity: 985.787 KB
AvailCapacity: 782.729 GB
TotalCapacity: 984.180 GB
UsedPct: 20.47 %
MaxDiskUsedPct: 20.47 %
Tag: {"location" : "default"}
ErrMsg:
Version: 1.1.2-rc03-ca55ac2
Status: {"lastSuccessReportTabletsTime":"2022-08-17 13:33:05","lastStreamLoadTime":-1,"isQueryDisabled":false,"isLoadDisabled":false}
1 row in set (0.01 sec)
- Alive : true表示节点运行正常
停止 BE 节点
Doris BE 的停止可以通过下面的命令完成
./bin/stop_be.sh
Docker运行Doris
前置条件
首先按照官方的安装,进行初始化,类似我这样的小白可能会有以下疑问:
- 1、官方分为Docker run和Docker compose方式,二选一即可;
- 2、Docker-compose安装
安装方法地址:https://cloud.tencent.com/developer/article/1855291
安装完成后,使用本服务器的对外地址访问:8030端口即可看到相关内容
Kubernetes 部署
等待学习后,更新;
Docker源码编译
使用现成的镜像
- 下载 Docker 镜像
docker pull apache/doris:build-env-ldb-toolchain-latest`
- 运行镜像(不推荐)
docker run -it apache/doris:build-env-ldb-toolchain-latest
建议以挂载本地 Doris 源码目录的方式运行镜像,这样编译的产出二进制文件会存储在宿主机中,不会因为镜像退出而消失。
同时,建议同时将镜像中 maven 的 .m2
目录挂载到宿主机目录,以防止每次启动镜像编译时,重复下载 maven 的依赖库。
docker run -it
-v /your/local/.m2:/root/.m2
-v /your/local/doris-DORIS-x.x.x-release/:/root/doris-DORIS-x.x.x-release/ apache/doris:build-env-ldb-toolchain-latest
解释(以上地址自行配置):
-
第一个**-v**,本地服务器maven的.m2地址,** : **后为docker内部地址
-
第二个**-v**,本地源码的地址,,** : **后为docker内部地址
-
apache/doris:build-env-ldb-toolchain-latest,为docker的TAG名称
以下是我的配置:
docker run -it -v /root/.m2:/root/.m2 -v /home/doris/doris/:/root/doris/ apache/doris:build-env-ldb-toolchain-latest
3、编译 Doris
先通过以下命令查看编译机器是否支持avx2指令集
cat /proc/cpuinfo | grep avx2
不支持则使用以下命令进行编译
$ USE_AVX2=0 sh build.sh
如果支持,可不加 USE_AVX2=0 ,直接进行编译
$ sh build.sh
编译完成后,产出文件在 output/
目录中。
注意:
如果你是第一次使用
build-env-for-0.15.0
或之后的版本,第一次编译的时候要使用如下命令:
sh build.sh --clean --be --fe
这是因为 build-env-for-0.15.0 版本镜像升级了 thrift(0.9 -> 0.13),需要通过 --clean 命令强制使用新版本的 thrift 生成代码文件,否则会出现不兼容的代码。
编译完成后,产出文件在 output/
目录中。
遇见问题
1、运行build.sh脚本中的github包无法下载
-
使用加速方式下载好,随后修改build.sh文件(注释以下下函数调用):
#update_submodule "be/src/apache-orc" "apache-orc" "https://github.com/apache/doris-thirdparty/archive/refs/heads/orc.tar.gz" #update_submodule "be/src/clucene" "clucene" "https://github.com/apache/doris-thirdparty/archive/refs/heads/clucene.tar.gz"
tar -zxvf doris-thirdparty-orc.tar.gz -C /home/doris/doris/be/src/apache-orc --strip-components=1
rm doris-thirdparty-orc.tar.gz
tar -zxvf doris-thirdparty-clucene.tar.gz -C /home/doris/doris/be/src/clucene --strip-components=1
rm doris-thirdparty-clucene.tar.gz
本人在编译时,出现编译前端报错的问题,暂时未解决,查找方案后更新;