引言

在大数据时代,企业亟需能够同时应对海量数据和实时分析挑战的引擎。Apache Doris(原 Palo) 应运而生,它是一个现代化、高性能的 MPP(大规模并行处理)分析型数据库 核心目标是为用户提供对超大规模数据集的毫秒级交互式查询体验。
相较于同类产品(如 ClickHouse、StarRocks、Hadoop生态组件),Doris 的核心优势在于:1. 极简架构 :部署运维简单,无需复杂组件栈,开箱即用;2. 卓越的实时分析能力 :独特的数据模型支持高吞吐数据摄入与秒级更新,保障查询即时性;3. 优异的易用性 :兼容 MySQL 协议,提供类 SQL 语法,便于开发和集成;4. 高并发优势 :优化设计支撑数千 QPS 高并发查询,显著优于一些竞品;5. 统一分析平台:单一系统处理实时、离线、日志及标准结构化数据的即席查询和报表分析。

Docker 部署方式
启动
bash
# 下载脚本
https://doris.apache.org/files/start-doris.sh
# 赋予执行权限
chmod 755 start-doris.sh
# 启动,-v 表示指定启动哪个版本
bash start-doris.sh -v 3.0.4
启动后日志信息如下图

检查状态
bash
## 检查 FE 状态,确定 Join 与 Alive 列均为 true
mysql -uroot -P9030 -h127.0.0.1 -e 'SELECT `host`, `join`, `alive` FROM frontends()'

bash
## 检查 BE 状态,确定 Alive 列为 1
mysql -uroot -P9030 -h127.0.0.1 -e 'SELECT `host`, `alive` FROM backends()'

本地部署方式
环境建议:
- 操作系统: 推荐使用 Ubuntu 等 AMD/ARM 主流 Linux 环境。
- Java 环境: 建议使用 Java 17 运行环境。
- 用户权限: 建议在 Linux 上新建一个 Doris 用户,避免使用 root 用户进行操作。
前期准备
修改系统最大打开文件句柄数
bash
vi /etc/security/limits.conf
* soft nofile 1000000
* hard nofile 1000000

修改完文件句柄数配置后,执行以下命令使配置生效
bash
ulimit -n 1000000
修改虚拟内存区域
bash
cat >> /etc/sysctl.conf << EOF
> vm.max_map_count = 2000000
> EOF
## 执行以下命令使配置生效
sudo sysctl -p
下载JDK17
bash
# jdk17 下载地址
https://mirrors.tuna.tsinghua.edu.cn/Adoptium/17/jdk/x64/linux/OpenJDK17U-jdk_x64_linux_hotspot_17.0.16_8.tar.gz
# 解压
tar -zxvf OpenJDK17U-jdk_x64_linux_hotspot_17.0.16_8.tar.gz -C /usr/local/
# 重命名
mv jdk-17.0.16+8/ jdk17
下载Doris安装包
bash
# doris 下载地址
https://doris.apache.org/zh-CN/download
# 运行以下命令,有输出结果,及表示机器支持 AVX2 指令集
# 建议选择支持 AVX2 指令集的机器,以利用 AVX2 的向量化能力实现查询向量化加速
cat /proc/cpuinfo | grep avx2

解压安装包
bash
tar -zxvf apache-doris-3.0.6.2-bin-x64.tar.gz -C /ops/app/
mv /ops/app/apache-doris-3.0.6.2-bin-x64/ /ops/app/doris3.0.6.2
安装 fe
bash
vim /ops/app/doris3.0.6.2/fe/conf/fe.conf
## 指定 Java 环境
JAVA_HOME=/usr/local/jdk17
# 指定 FE 监听 IP 的 CIDR 网段,32 表示子网掩码位数
priority_networks=127.0.0.1/32
## 启动
/ops/app/doris3.0.6.2/fe/bin/start_fe.sh --daemon
## 检查 FE 状态,确定 Join 与 Alive 列均为 true
mysql -uroot -P9030 -h127.0.0.1 -e 'SELECT `host`, `join`, `alive` FROM frontends()'
+-----------+------+-------+
| host | join | alive |
+-----------+------+-------+
| 127.0.0.1 | true | true |
+-----------+------+-------+
安装 be
bash
vim /ops/app/doris3.0.6.2/be/conf/be.conf
## 指定 Java 环境
JAVA_HOME=/usr/local/jdk17
# 指定 BE 监听 IP 的 CIDR 网段,32 表示子网掩码位数
priority_networks=127.0.0.1/32
## 启动
/ops/app/doris3.0.6.2/be/bin/start_be.sh --daemon
## 检查 BE 状态,确定 Alive 列为 true
mysql -uroot -P9030 -h127.0.0.1 -e 'SELECT `host`, `alive` FROM backends()'
+-----------+-------+
| host | alive |
+-----------+-------+
| 127.0.0.1 | 1 |
+-----------+-------+
启动be时如果提示
Disable swap memory before starting be
执行以下命令,临时禁用交换内存
bash
sudo swapoff -a
修改密码
默认root
账号密码为空,如果想要修改密码执行以下命令。
bash
## 进入客户端
mysql -uroot -P9030 -h127.0.0.1
## 修改当前用户密码
SET PASSWORD = PASSWORD('123456')
## 修改指定用户密码
SET PASSWORD FOR 'jack'@'192.%' = PASSWORD('123456')
运行查询
连接Doris客户端
bash
# 使用 MySQL 客户端连接, -P 表示端口,默认root账号密码为空
mysql -uroot -P9030 -h127.0.0.1

建库建表
sql
# 创建数据库与测试表
create database demo;
use demo;
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;
这里需要注意如果执行以上脚本报错,表示你的集群只有一个可用 Backend
节点,但建表时默认配置(replication_num
)要求的副本数是 3
:
bash
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
解决办法是在建表语句加入一行代码:
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" -- 设置副本数为 1
);
导入测试数据
sql
insert into mytable values
(1,0.14,'a1',20),
(2,1.04,'b2',21),
(3,3.14,'c3',22),
(4,4.35,'d4',23);
DBeaver连接
创建一个MySQL连接,配置地址、账号和密码,和建立MySQL连接一模一样。
默认端口:9030
默认账号:root
默认密码:空

Doris Web UI
访问fe
的web ui
,浏览器输入地址:http://127.0.0.1:8030
默认账号:root
默认密码:空
客户端的登录账号和密码与Doris Web UI
的登录账号和密码是一致的,如果客户端修改了密码,登录Doris Web UI
时也要更新账号密码。

fe
可视化界面主要功能是在Playground
上执行一些数据库命令。

访问be
的web ui
,浏览器输入地址:http://127.0.0.1:8040
be
可视化界面主要用于查看一些配置信息。

需要注意的是,Playground
中执行和具体数据库/表没有关系的语句,务必在左侧库栏里随意选择一个数据库,才能执行成功;另外,当前还不能在Playground
中执行SET
类型的SQL
语句。
MySQL数据源
MySQL驱动
首先需要在Docker
容器中将MySQL
的驱动包放进去,Docker
容器包括be
和fe
两个。
sql
# 在be容器中创建目录
docker exec doris_be_1 mkdir -p /opt/apache-doris/be/jdbc_drivers
# 将宿主机中的驱动包拷贝到be容器中,<be容器ID>通过 docker ps 命令查看
docker cp /ops/app/mysql-connector-java-8.0.19.jar <be容器ID>:/opt/apache-doris/be/jdbc_drivers/
# 在fe容器中创建目录
docker exec doris_fe_1 mkdir -p /opt/apache-doris/fe/jdbc_drivers
# 将宿主机中的驱动包拷贝到fe容器中,<fe容器ID>通过 docker ps 命令查看
docker cp /ops/app/mysql-connector-java-8.0.19.jar <fe容器ID>:/opt/apache-doris/fe/jdbc_drivers/
同理,如果是本地部署,也需要将驱动包拷贝至以上路径
bash
# be
mkdir /ops/app/doris3.0.6.2/be/jdbc_drivers/
cp /ops/app/mysql-connector-java-8.0.19.jar /ops/app/doris3.0.6.2/be/jdbc_drivers/
# fe
mkdir /ops/app/doris3.0.6.2/fe/jdbc_drivers/
cp /ops/app/mysql-connector-java-8.0.19.jar /ops/app/doris3.0.6.2/fe/jdbc_drivers/
创建MySQL Catalog
以下是创建catalog
的模板,其中driver_url
指向的是/opt/apache-doris/be/jdbc_drivers
和/opt/apache-doris/fe/jdbc_drivers
两个目录,mysql-connector-java-8.0.19.jar
必须和包名保持一致。
sql
# 进入客户端
mysql -uroot -P9030 -h127.0.0.1
# 创建Catalog
CREATE CATALOG mysql_catalog properties(
'type' = 'jdbc',
'user' = 'root',
'password' = '123456',
'jdbc_url' = 'jdbc:mysql://host:3306/mysql_db',
'driver_url' = 'mysql-connector-java-8.0.19.jar',
'driver_class' = 'com.mysql.cj.jdbc.Driver'
);
# 查询Catalog
show catalogs;

常用命令
bash
## 切换Catalog
switch <catalog名>;
## 删除Catalog
drop catalog <catalog名>;
## 查询mysql数据库
show databases;
## 切换到指定数据库
use <数据库名>;
## 查询数据库表
show tables;