Apache Doris(原百度 Palo)是一个基于 MPP 架构的高性能、实时的分析型数据库,由百度在 2017 年开源,2018 年 8月 进入 Apache 孵化器。
安装Doris其实很方便,参考Doris官网的快速开始和安装部署基本上就可以顺利完成,我这里主要补充了一些安装过程中,自己参考的实用命令。
官方建议:通常建议 10 ~ 100 台左右的机器,来充分发挥 Doris 的性能(其中 3 台部署 FE(HA),剩余的部署 BE)在最少4台机器(一台 FE,三台 BE,其中一台 BE 混部一个 Observer FE 提供元数据备份),以及较低配置的情况下,依然可以平稳的运行 Doris。
考虑到只是做替换尝试,我们参考了官网的开发测试环境配置。
# 查看CentOs版本(>=7.1)
cat /etc/redhat-release
1)设置系统最大打开文件句柄数
vi /etc/security/limits.conf
* soft nofile 65536
* hard nofile 65536
2)时钟同步(参考指南)
Doris 的元数据要求时间精度要小于5000ms,所以所有集群所有机器要进行时钟同步,避免因为时钟问题引发的元数据不一致导致服务出现异常。
vi /etc/chrony.conf
3)关闭交换分区(swap)
Linux交换分区会给Doris带来很严重的性能问题,需要在安装之前禁用交换分区。
# 使用不重启的方式,禁用swap,立即生效
sudo swap -a
sudo free -m
4)Liunx文件系统
这里我们推荐使用ext4文件系统,在安装操作系统的时候,请选择ext4文件系统。
# 查看文件系统 xfs(Cent OS之后)
df -hT
2. 软件需求
# 查看GCC版本(>=4.8.2)
gcc -v
# 安装并查看JAVA版本(>=1.8)
rpm -qa | grep java
yum list java*
yum install java-1.8.0-openjdk.x86_64 -y
java - version
下载
wget https://repo.huaweicloud.com/java/jdk/8u201-b09/jdk-8u201-linux-x64.tar.gz
注:卸载OpenJDK
卸载命令:rpm -e –nodeps 名称 或者 yum remove *openjdk*
之后再次输入命令 查看卸载情况:rpm -qa | grep java 或者 java -version
添加JAVA环境变量
export JAVA_HOME=/opt/jdk1.8.0_191
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt/jar:$JAVA_HOME/lib/tools.jar
因为我们采用集群部署,所以每台服务器都需要上传解压。
https://mirrors.tuna.tsinghua.edu.cn/apache/doris/1.2/1.2.4-rc01/
FE部署
1)拷贝 FE 部署文件到指定节点
# 1. 创建目录
mkdir -p /opt/software
mkdir -p fe /home/doris/
cd /opt/software
# 2. 解压压缩包
tar -xvf apache-doris-1.1.0-bin-x86-jdk8.tar
cd apache-doris-1.1.0-bin-x86-jdk8/
# 3. 移动fe文件夹至/home/doris/目录下去
mv fe /home/doris/
2)配置FE
# 配置 FE-Config
vi fe/conf/fe.conf
# 取消 priority_networks 的注释,修改参数
# 例如当前节点的 IP 地址为 10.10.2.21,则需要更改为 10.10.2.0/24 填入
# 这里需要填入的是 IP 子网网段地址,并非 IP 地址
priority_networks = 10.10.2.0/24
# 保存退出
3)启动 FE
在 FE 安装目录下执行下面的命令,来完成 FE 的启动。
./bin/start_fe.sh --daemon
查看 FE 运行状态
curl http://127.0.0.1:8030/api/bootstrap
这里 IP 和 端口分别是 FE 的 IP 和 http_port(默认8030),如果是在 FE 节点执行,直接运行上面的命令即可。如果返回结果中带有 "msg":"success"
字样,则说明启动成功。
4)连接 FE
通过下载免安装的 MySQL 客户端(mysql-client)来连接 Doris FE。
wget https://cdn.mysql.com/archives/mysql-8.0/mysql-community-common-8.0.25-1.el7.x86_64.rpm
wget https://cdn.mysql.com/archives/mysql-8.0/mysql-community-client-plugins-8.0.25-1.el7.x86_64.rpm
wget https://cdn.mysql.com/archives/mysql-8.0/mysql-community-libs-8.0.25-1.el7.x86_64.rpm
wget https://cdn.mysql.com/archives/mysql-8.0/mysql-community-client-8.0.25-1.el7.x86_64.rpm
再次将这些包放在一个路径下面安装
rpm -Uvh *.rpm --nodeps --force
MySQL客户端安装完成以后开始配置BE节点
在FE节点运行命令:
mysql -h fe_host -P query_port -uroot
fe_host为FE节点
query_port为在FE节点conf/fe.conf中设置的端口号
mysql -h 192.168.18.130 -P 9030 -uroot
# 解压刚才下载的 MySQL 客户端,在 bin/ 目录下可以找到 mysql 命令行工具。然后执行下面的命令连接 Doris。
mysql -uroot -P9030 -h127.0.0.1
查看 FE 运行状态(如果 IsMaster、Join 和 Alive 三列均为true,则表示节点正常)
SHOW FRONTENDS\G;
5)停止FE
在 FE 安装目录下执行下面的命令,来完成 FE 的停止。
./bin/stop_fe.sh
BE部署
1)拷贝 BE 部署文件到指定节点
# 1. 创建目录
mkdir -p /opt/software
mkdir -p be /home/doris/
cd /opt/software
# 2. 解压压缩包
tar -xvf apache-doris-1.1.0-bin-x86-jdk8.tar
cd apache-doris-1.1.0-bin-x86-jdk8/
# 3. 移动be文件夹至/home/doris/目录下去
mv be /home/doris/
BE 节点需要设置 2 个参数
[root@vm31 ~]# sysctl -w vm.max_map_count=2000000
vm.max_map_count = 2000000
[root@vm31 ~]# ulimit -n 65536
[root@vm31 ~]# ulimit -n
65536
从页面 https://doris.apache.org/zh-CN/download/ 选择版本 1.2.3 下载,会跳转到清华的软件源:
wget --no-check-certificate https://mirrors.tuna.tsinghua.edu.cn/apache/doris/1.2/1.2.3-rc02/apache-doris-dependencies-1.2.3-bin-x86_64.tar.xz
wget --no-check-certificate https://mirrors.tuna.tsinghua.edu.cn/apache/doris/1.2/1.2.3-rc02/apache-doris-be-1.2.3-bin-x86_64.tar.xz
wget --no-check-certificate https://mirrors.tuna.tsinghua.edu.cn/apache/doris/1.2/1.2.3-rc02/apache-doris-fe-1.2.3-bin-x86_64.tar.xz
VM31 按照 apache-doris-fe-1.2.3-bin-x86_64.tar.xz
VM32 安装 apache-doris-be-1.2.3-bin-x86_64.tar.xz
需要把 apache-doris-dependencies-1.2.3-bin-x86_64.tar.xz 解压,拷贝 java-udf-jar-with-dependencies.jar 到 BE 安装目录的 lib 目录里。否则 BE 启动会报错:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/doris/udf/JniUtil
Caused by: java.lang.ClassNotFoundException: org.apache.doris.udf.JniUtil
W0402 12:21:14.746762 501 doris_main.cpp:382] Failed to initialize JNI: [INTERNAL_ERROR]Failed to find JniUtil class.
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/doris/udf/JniUtil
Caused by: java.lang.ClassNotFoundException: org.apache.doris.udf.JniUtil
W0402 12:44:25.101190 2127 doris_main.cpp:382] Failed to initialize JNI: [INTERNAL_ERROR]Failed to find JniUtil class.
2)配置BE
# 配置 BE-Config
vi be/conf/be.conf
# 取消 priority_networks 的注释,修改参数
# 例如当前节点的 IP 地址为 10.10.2.21,则需要更改为 10.10.2.0/24 填入
# 这里需要填入的是 IP 子网网段地址,并非 IP 地址
priority_networks = 10.10.2.0/24
# 保存退出
3)启动 BE
在 BE 安装目录下执行下面的命令,来完成 BE 的启动。
./bin/start_be.sh --daemon
查看 BE 运行状态
curl http://127.0.0.1:8040/api/health
如果返回: {"status": "OK","msg": "To Be Added"} 则表示启动成功,其余情况,则可能存在问题。
4)注册BE
通过免安装的 MySQL 客户端连接 Doris FE,执行以下命令来添加每一个 BE:
mysql -h 192.168.18.130 -P 9030 -uroot
set password = password('123456');
ALTER SYSTEM ADD BACKEND "BE_IP:9050";
ALTER SYSTEM ADD BACKEND "BE_IP:9050";
ALTER SYSTEM ADD BACKEND "BE_IP:9050";
查看 BE 运行状态
SHOW PROC '/backends'\G;
5)停止BE
在 BE 安装目录下执行下面的命令,来完成 BE 的停止。
./bin/stop_be.sh
FE 主要负责元数据管理、集群管理、用户请求的接入和查询计划的解析等工作。
BE 主要负责数据存储、查询计划的执行等工作。
yum -y install centos-release-scl
yum -y install devtoolset-8-gcc devtoolset-8-gcc-c++ devtoolset-8-binutils
scl enable devtoolset-8 bash #启动gcc8
通过scl命令启动gcc,这个只是暂时的,当你的shell关闭后或者重启就会恢复原来的版本,要想一直使用升级后的版本可以使用如下命令
echo "source /opt/rh/devtoolset-8/enable" >>/etc/profile
或者
echo "source /opt/rh/devtoolset-8/enable" >> /etc/bashrc
source /etc/bashrc
修改 /etc/security/limits.conf, 执行命令:
echo "* soft nofile 204800" >> /etc/security/limits.conf
echo "* hard nofile 204800" >> /etc/security/limits.conf
echo "* soft nproc 204800" >> /etc/security/limits.conf
echo "* hard nproc 204800 " >> /etc/security/limits.conf
修改 /etc/sysctl.conf, 执行命令:
echo fs.file-max = 6553560 >> /etc/sysctl.conf
下载地址: https://doris.apache.org/download/
[图片上传失败...(image-9350b5-1678433123646)]
tar xvJf apache-doris-fe-1.2.1-bin-x86_64.tar.xz #解压fe
tar xvJf apache-doris-be-1.2.1-bin-x86_64.tar.xz
tar xvJf apache-doris-dependencies-1.2.1-bin-x86_64.tar.xz
mv apache-doris-be-1.2.1-bin-x86_64 be
mv apache-doris-fe-1.2.1-bin-x86_64 fe
mv apache-doris-dependencies-1.2.1-bin-x86_64 dependencies
将java_udf的jar包复制到be/lib目录下
cp /data8/doris_syw/dependencies/java-udf-jar-with-dependencies.jar /data8/doris_syw/be/lib/
设置vm.max_map_count
sysctl -w vm.max_map_count=2000000
vi /etc/profile #打开配置文件
#DORIS_HOME
export DORIS_HOME=/data8/doris_syw/fe/
export DORIS_HOME=/data8/doris_syw/be/
export PATH=$PATH:$DORIS_HOME/bin
source /etc/profile #保存配置文件
[root@rc fe]# pwd
/data8/doris_syw/fe #下载二进制包解压后的存放目录
【第一步】进入到fe
[root@rc fe]# ll
total 160
drwxr-xr-x. 2 1103 1103 4096 Jan 9 17:14 bin
drwxr-xr-x. 2 1103 1103 4096 Jan 9 17:09 conf #fe的配置文件存放在此里面
drwxr-xr-x. 4 1103 1103 4096 Jan 9 17:09 doris-meta
drwxr-xr-x. 2 1103 1103 32768 Dec 31 21:50 lib
-rw-r--r--. 1 1103 1103 87050 Dec 31 21:50 LICENSE-dist.txt
drwxr-xr-x. 2 1103 1103 4096 Dec 31 21:50 licenses
drwxr-xr-x. 2 1103 1103 4096 Jan 9 17:09 log
-rw-r--r--. 1 1103 1103 1948 Dec 31 21:50 NOTICE.txt
drwxr-xr-x 2 root root 4096 Jan 9 17:09 plugins
drwxr-xr-x. 2 1103 1103 4096 Dec 31 21:50 spark-dpp
drwxr-xr-x 5 root root 4096 Jan 9 17:09 temp_dir
drwxr-xr-x. 3 1103 1103 4096 Dec 31 21:50 webroot
【第二步】找到fe.conf
[root@rc fe]# cd conf/
[root@rc conf]# ll
total 16
-rw-r--r-- 1 1103 1103 2922 Jan 9 17:06 fe.conf
-rw-r--r--. 1 1103 1103 956 Dec 31 21:50 hdfs-site.xml
-rw-r--r--. 1 1103 1103 2480 Dec 31 21:50 ldap.conf
-rw-r--r-- 1 root root 2920 Jan 9 17:09 log4j2-spring.xml
【第三步】找到如下的内容,并释放掉注释
[root@rc conf]# vim fe.conf
#-----修改配置文件内容如下
meta_dir = ${DORIS_HOME}/doris-meta
priority_networks=192.168.30.118/24 #修改为自己电脑的IP
#1、进入到bin目录下
cd /data8/doris_syw/fe/bin
#2、启动fe
./start_fe.sh --daemon
[图片上传失败...(image-bf4cf9-1678433123646)][图片上传失败...(image-ae83e9-1678433123646)]
cd /data8/doris_syw/be
#在be目录下,创建data存放目录文件
mkdir /data8/doris_syw/be/data/data1
mkdir /data8/doris_syw/be/data/data2
mkdir /data8/doris_syw/be/data/data3
【第一步】进入/data8/doris_syw/be/conf/fe.conf #进入存放be的目录
-rw-r--r-- 1 1103 1103 819 Dec 31 21:50 asan_suppr.conf
-rw-r--r-- 1 1103 1103 2735 Jan 9 17:36 be.conf
-rw-r--r-- 1 1103 1103 956 Dec 31 21:50 hdfs-site.xml
-rw-r--r-- 1 1103 1103 1529 Dec 31 21:50 odbcinst.ini
【第二步】找到如下的内容,并释放掉注释
[root@rc conf]# vim be.conf
#-----修改配置文件内容如下
#配置文件中指定数据存放路径:
storage_root_path=/data8/doris_syw/be/data/data1;/data8/doris_syw/be/data/data2;/data8/doris_syw/be/data/data3
#修改绑定 ip(每台机器修改成自己的 ip)
priority_networks=192.168.30.118/24
#更快的导入速度,默认为2
flush_thread_num_per_store=5
#修改 BE 的配置文件 be.conf 添加以下配置项,重启BE,以获得更好的查询性能
enable_storage_vectorization=true
enable_low_cardinality_optimize=true
【第四步】将dependencies文件夹下的java-udf-jar-with-dependencies.jar移动到BE 的 lib 目录下
[root@rc conf]# cp /data8/doris_syw/dependencies/java-udf-jar-with-dependencies.jar ./
#启动be
start_be.sh --daemon #后台启动be
#./bin/start_be.sh #建议第一次时用此方法运行,便于查看错误
#mysql连接fe
mysql -h192.168.30.118 -P9030 -uroot
#无密码,确认即可
#在客户端设置root密码
SET PASSWORD FOR 'root' = PASSWORD('Aa123456');
#退出再次登录即可
mysql -h192.168.30.118 -P9030 -uroot -pAa123456
#添加 BE
mysql> ALTER SYSTEM ADD BACKEND "192.168.30.118:9050";
mysql> ALTER SYSTEM ADD BACKEND "192.168.30.117:9050";
mysql> ALTER SYSTEM ADD BACKEND "192.168.30.116:9050";
mysql> ALTER SYSTEM ADD BACKEND "192.168.30.115:9050";
mysql> ALTER SYSTEM ADD BACKEND "192.168.30.114:9050";
mysql -h192.168.30.118 -P9030 -uroot -pAa123456
SHOW PROC '/backends' \G; #注alive要为true
#启动
sh /data8/doris_syw/fe/bin/start_fe.sh --daemo
sh /data8/doris_syw/be/bin/start_be.sh --daemon
#停止
sh /data8/doris_syw/fe/bin/stop_fe.sh
sh /data8/doris_syw/be/bin/stop_be.sh
ALTER SYSTEM DROPP BACKEND "hostname:9050";
SHOW PROC '/frontends'; #IsMaster、Join 和 Alive 三列均为true,则表示节点正常
[root@rc bin]# ./start_be.sh
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:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
WARNING: Logging before InitGoogleLogging() is written to STDERR
W0109 18:27:14.798044 99676 doris_main.cpp:382] Failed to initialize JNI: Failed to find JniUtil class.
解决方法:报错的原因:安装Java UDF 函数因为从1.2 版本开始支持Java UDF 函数,需要从官网下载 Java UDF 函数的 JAR 包放到 BE 的 lib 目录下,否则可能会启动失败。
参考文章:
https://blog.csdn.net/qq_41187116/article/details/125813989
官网安装文档(推荐):https://doris.apache.org/zh-CN/docs/dev/get-starting/
doris官方的tpch建表与查询测试:https://github.com/apache/doris/tree/master/tools/tpch-tools
#安装maven
apt install maven
# install autoconf-2.69
wget http://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz && \
tar zxf autoconf-2.69.tar.gz && \
cd autoconf-2.69 && \
./configure && \
make && \
make install
# install bison-3.0.4
wget http://ftp.gnu.org/gnu/bison/bison-3.0.4.tar.gz && \
tar xzf bison-3.0.4.tar.gz && \
cd bison-3.0.4 && \
./configure && \
make && \
make install
拉取 Doris 的镜像
docker pull apachedoris/doris-dev:build-env-1.2
docker run -it --name doris-fe -v /home/incubator-doris/:/var/local/incubator-doris/ --network host --privileged apachedoris/doris-dev:build-env-1.2
下载doris的源码
git地址:https://github.com/apache/incubator-doris
git clone https://github.com/apache/incubator-doris.git
已经下载好的incubator-doris,直接上传到服务器中去使用
incubator-doris-master.zip
apt install unzip
------安装介绍
https://cloud.baidu.com/doc/DORIS/s/dkn5p8qbc
在fe下新建palo-meta文件夹,目录为:/root/doris/incubator-doris-master/fe/palo-meta
进入/root/doris/incubator-doris-master/conf目录
1) Fe.conf
meta_dir =/root/doris/incubator-doris-master/fe/palo-meta
http_port = 8030
rpc_port = 9020
query_port = 9030
edit_log_port = 9010
2) be.conf
be_port = 9060
be_rpc_port = 9070
webserver_port = 18040
heartbeat_service_port = 9050
brpc_port = 18060
storage_root_path =/root/doris/data
---------再一次的重新安装
1、安装java11
2、安装cmake
2、安装doris
docker pull apache/incubator-doris:build-env
docker run -it --name build-env-1.2 -v /root/.m2:/root/.m2 -v /root/doris/:/root/doris/ apache/incubator-doris:build-env-1.2
wget https://github.com/apache/incubator-doris/archive/refs/tags/1.0.0-rc03.tar.gz
tar -zxvf 1.0.0-rc03.tar.gz
mv incubator-doris-1.0.0-rc03/ incubator-doris
-------再次安装
1.1 修改镜像地址为国内地址
vim /etc/docker/daemon.json
{
"registry-mirrors": [
"https://dockerhub.azk8s.cn",
"https://hub-mirror.c.163.com"
]
}
1.2 重启进程
systemctl daemon-reload
systemctl restart docker**
2、下载代码
git clone https://github.com/apache/incubator-doris.git
3、docker拉取编译环境镜像
注意,你若下载的是最新的源码,那也需要下载最近的镜像
doris-dev镜像地址:https://hub.docker.com/r/apachedoris/doris-dev/tags
[图片上传失败...(image-d5eb2b-1678433123646)]
docker pull apachedoris/doris-dev:build-env-1.3
4、进入docker容器
docker run -it --name build-env-1.3 -v /root/doris/incubator-doris/:/root/doris/incubator-doris/ apachedoris/doris-dev:build-env-1.3
注意参数的替换:
/opt/package/incubator-doris/ : 为本地源代码地址
/root/incubator-doris : 挂载的镜像内地址
5、开始编译
cd /root/incubator-doris
sh build.sh --be --clean
此时会报错:
build.sh: line 41: /var/local/thirdparty/build-thirdparty.sh: No such file or directory
执行:cp thirdparty/*.sh //var/local/thirdparty (上述错误解决)
6、开始漫长的编译
此过程需要等待很久,根据网速来定
如果确定本地网络不慢的话,但是下载只有几kb,可以结束掉build 命令,会重新找新的下载地址下载继续,速度会提高