Apache Doris毫秒级分布式数据库引擎

引言

在大数据时代,企业亟需能够同时应对海量数据和实时分析挑战的引擎。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

访问feweb ui,浏览器输入地址:http://127.0.0.1:8030

默认账号:root

默认密码:空

客户端的登录账号和密码与Doris Web UI的登录账号和密码是一致的,如果客户端修改了密码,登录Doris Web UI时也要更新账号密码。

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

访问beweb ui,浏览器输入地址:http://127.0.0.1:8040

be 可视化界面主要用于查看一些配置信息。

需要注意的是,Playground 中执行和具体数据库/表没有关系的语句,务必在左侧库栏里随意选择一个数据库,才能执行成功;另外,当前还不能在Playground 中执行SET类型的SQL语句。

MySQL数据源

MySQL驱动

首先需要在Docker容器中将MySQL的驱动包放进去,Docker容器包括befe两个。

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;

参考

Apache Doris 简介 - Apache Doris

相关推荐
NocoBase4 分钟前
6 个替代飞书多维表格的开源无代码数据库工具
数据库·开源·数据可视化
G_H_S_3_10 分钟前
【网络运维】Linux:MariaDB 数据库介绍及管理
linux·运维·网络·数据库
LLLLYYYRRRRRTT11 分钟前
MariaDB 数据库管理与web服务器
前端·数据库·mariadb
Mike_小新22 分钟前
【Mike随想】未来更看重架构能力和业务经验,而非单纯编码能力
后端·程序员
Abadbeginning25 分钟前
FastSoyAdmin导出excel报错‘latin-1‘ codec can‘t encode characters in position 41-54
前端·javascript·后端
很小心的小新30 分钟前
五、SpringBoot工程打包与运行
java·spring boot·后端
ACGkaka_33 分钟前
SpringBoot 集成 MapStruct
java·spring boot·后端
anthem3733 分钟前
12、Python项目实战
后端
anthem3733 分钟前
7、Python高级特性 - 提升代码质量与效率
后端
anthem3734 分钟前
6、Python文件操作与异常处理
后端