Linux - Doris

Linux - Doris

环境:CentOS 7.9 / WSL2,Doris 3.1.4,二进制安装,单节点模式


一、前置依赖

1.1 确认 JDK 17

bash 复制代码
java -version
echo $JAVA_HOME
# 确认输出 17.x,且 JAVA_HOME 已配置

1.2 检查 CPU 是否支持 AVX2

bash 复制代码
cat /proc/cpuinfo | grep avx2 | head -1
# 有输出说明支持,下载普通版本
# 无输出说明不支持,需下载 noavx2 版本

1.3 系统参数调整

bash 复制代码
# 关闭 swap(BE 要求)
swapoff -a

# 设置虚拟内存
echo "vm.max_map_count=2000000" >> /etc/sysctl.conf
sysctl -p

# 设置文件句柄数
cat >> /etc/security/limits.conf << 'EOF'
* soft nofile 1000000
* hard nofile 1000000
EOF

# WSL2 环境 limits.conf 不生效,在 .bashrc 里设置
echo "ulimit -n 1000000" >> ~/.bashrc
source ~/.bashrc

# 验证
ulimit -n
# 输出 1000000 表示成功

二、下载并解压

bash 复制代码
# 下载二进制包(支持 AVX2 用此版本)
wget https://apache-doris-releases.oss-accelerate.aliyuncs.com/apache-doris-3.1.4-bin-x64.tar.gz

# 解压到安装目录
tar -zxvf apache-doris-3.1.4-bin-x64.tar.gz -C /usr/local/
mv /usr/local/apache-doris-3.1.4-bin-x64 /usr/local/doris

目录结构:

复制代码
/usr/local/doris/
├── fe/          # Frontend 节点(大脑)
├── be/          # Backend 节点(存储+计算)
├── ms/          # Meta Service(存算分离用,单节点忽略)
├── extensions/  # 扩展插件
└── tools/       # 工具

三、配置 FE

bash 复制代码
vi /usr/local/doris/fe/conf/fe.conf

修改以下配置:

properties 复制代码
# 元数据存储目录
meta_dir = /usr/local/doris/data/fe/meta

# 指定监听IP(单节点用127.0.0.1)
priority_networks = 127.0.0.1/32

# 禁用本地免密登录(可选,默认 true 允许免密)
skip_localhost_auth_check = false
bash 复制代码
# 创建元数据目录
mkdir -p /usr/local/doris/data/fe/meta

四、配置 BE

bash 复制代码
vi /usr/local/doris/be/conf/be.conf

修改以下配置:

properties 复制代码
# 数据存储目录
storage_root_path = /usr/local/doris/data/be/storage

# 指定监听IP(和 FE 保持一致)
priority_networks = 127.0.0.1/32
bash 复制代码
# 创建数据目录
mkdir -p /usr/local/doris/data/be/storage

五、启动服务

必须先启动 FE,再启动 BE

bash 复制代码
# 启动 FE
/usr/local/doris/fe/bin/start_fe.sh --daemon
sleep 10

# 启动 BE
/usr/local/doris/be/bin/start_be.sh --daemon
sleep 10

# 验证进程
jps
# 看到 DorisFE 和 DorisBE 表示成功

六、注册 BE 到 FE

bash 复制代码
# 连接 FE
mysql -h 127.0.0.1 -P 9030 -u root

# 注册 BE(只需执行一次)
ALTER SYSTEM ADD BACKEND "127.0.0.1:9050";

# 查看 BE 状态,Alive: true 表示成功
SHOW BACKENDS\G

七、配置 Service 管理脚本

bash 复制代码
cat > /etc/init.d/doris << 'EOF'
#!/bin/bash
# chkconfig: 2345 90 10
# description: Apache Doris

DORIS_HOME=/usr/local/doris
JAVA_HOME=/usr/local/jdk/jdk
export JAVA_HOME
export PATH=$JAVA_HOME/bin:$DORIS_HOME/fe/bin:$DORIS_HOME/be/bin:$PATH

case "$1" in
  start)
    echo "Starting Doris FE..."
    $DORIS_HOME/fe/bin/start_fe.sh --daemon
    sleep 5
    fe_pid=$(jps | grep DorisFE | awk '{print $1}')
    if [ -n "$fe_pid" ]; then
      echo "Doris FE started, PID: $fe_pid"
    else
      echo "Doris FE start failed, check logs"
    fi

    echo "Starting Doris BE..."
    $DORIS_HOME/be/bin/start_be.sh --daemon
    sleep 5
    be_pid=$(jps | grep DorisBE | awk '{print $1}')
    if [ -n "$be_pid" ]; then
      echo "Doris BE started, PID: $be_pid"
    else
      echo "Doris BE start failed, check logs"
    fi
    ;;
  stop)
    echo "Stopping Doris BE..."
    $DORIS_HOME/be/bin/stop_be.sh
    sleep 3
    echo "Doris BE stopped"

    echo "Stopping Doris FE..."
    $DORIS_HOME/fe/bin/stop_fe.sh
    sleep 3
    echo "Doris FE stopped"
    ;;
  restart)
    $0 stop
    sleep 3
    $0 start
    ;;
  status)
    fe_pid=$(jps | grep DorisFE | awk '{print $1}')
    be_pid=$(jps | grep DorisBE | awk '{print $1}')
    if [ -n "$fe_pid" ]; then
      echo "Doris FE is running, PID: $fe_pid"
    else
      echo "Doris FE is not running"
    fi
    if [ -n "$be_pid" ]; then
      echo "Doris BE is running, PID: $be_pid"
    else
      echo "Doris BE is not running"
    fi
    ;;
  *)
    echo "Usage: service doris {start|stop|restart|status}"
    exit 1
    ;;
esac
EOF

chmod +x /etc/init.d/doris
chkconfig --add doris

常用命令:

bash 复制代码
service doris start
service doris stop
service doris restart
service doris status

八、用户与密码管理

bash 复制代码
# root 连接(本地127.0.0.1默认免密)
mysql -h 127.0.0.1 -P 9030 -u root

# 设置 root 密码
SET PASSWORD FOR 'root'@'%' = PASSWORD('your_password');

# 创建业务用户(推荐,用于应用连接)
CREATE USER 'doris_user'@'%' IDENTIFIED BY 'your_password';
GRANT ALL ON *.* TO 'doris_user'@'%';

本地 127.0.0.1 默认免密登录(可通过 skip_localhost_auth_check = false 关闭)

内网 IP 连接必须输入密码,生产环境建议使用业务用户而非 root


九、基本使用

sql 复制代码
-- 查看版本
SELECT VERSION();

-- 创建数据库
CREATE DATABASE my_db;
USE my_db;

-- 创建表(示例)
CREATE TABLE order_create (
    id          BIGINT NOT NULL,
    company_id  VARCHAR(32),
    order_id    VARCHAR(32),
    order_time  BIGINT,
    insert_time DATETIME DEFAULT CURRENT_TIMESTAMP
)
UNIQUE KEY(id, company_id, order_id)
PARTITION BY RANGE(order_time)(
    PARTITION p202401 VALUES LESS THAN ("1706745600"),
    PARTITION p202402 VALUES LESS THAN ("1709251200")
)
DISTRIBUTED BY HASH(order_id) BUCKETS 16
PROPERTIES("replication_num" = "1");

-- 批量插入
INSERT INTO order_create VALUES
(1, 'company001', 'ORDER001', 1704067200, NOW()),
(2, 'company001', 'ORDER002', 1704067200, NOW());

-- 查询
SELECT * FROM order_create;

十、端口说明

FE 端口:

端口 用途 是否对外
9030 MySQL 协议,客户端连接 ✅ 必须
8030 HTTP,WebUI / Stream Load ✅ 按需
9020 FE 与 BE 内部 RPC ❌ 内部
9010 FE 节点选举 ❌ 内部

BE 端口:

端口 用途 是否对外
9050 心跳端口,注册 BE 时用 ❌ 内部
9060 查询执行 ❌ 内部
8040 BE HTTP / Stream Load 直写 ✅ 按需
8060 BE RPC ❌ 内部

对外只需开放 9030,使用 Stream Load 时额外开放 8030


十一、Kafka → Doris Routine Load

Doris 原生支持消费 Kafka JSON 数据直接入库:

sql 复制代码
CREATE ROUTINE LOAD my_db.load_order_create
ON order_create
COLUMNS(company_id, order_id, order_time, insert_time)
PROPERTIES(
    "format" = "json",
    "json_root" = "$",
    "desired_concurrent_number" = "3",
    "max_batch_interval" = "10",
    "max_batch_rows" = "3000000",
    "strict_mode" = "false"
)
FROM KAFKA(
    "kafka_broker_list" = "127.0.0.1:9092",
    "kafka_topic" = "order-create-topic",
    "property.group.id" = "doris_group"
);

-- 查看任务状态
SHOW ROUTINE LOAD FOR load_order_create\G

-- 暂停 / 恢复
PAUSE ROUTINE LOAD FOR load_order_create;
RESUME ROUTINE LOAD FOR load_order_create;

十二、注意事项

  • FE 和 BE 必须先启 FE 再启 BE,停止顺序相反
  • BE 注册到 FE 只需执行一次,重启不需要重新注册
  • 单节点 replication_num 必须设为 1
  • Doris 写入必须批量提交,避免单条频繁写入产生小文件
  • WSL2 环境 limits.conf 不持久,需在 .bashrc 中设置 ulimit
  • stat table does not exist 日志为正常现象,BE 注册后自动消失
相关推荐
平行云2 小时前
实时云渲染预启动技术解析:UE数字孪生应用的延迟优化机制(二)
linux·unity·ue5·webgl·实时云渲染·云桌面·像素流
看到代码头都是大的2 小时前
CentOS环境下手动升级openssl、openssh
linux·运维·centos
浮生若城2 小时前
Linux——Ext系列文件系统
linux·运维·服务器
ITyunwei09872 小时前
主流 SaaS 工单系统对比
运维·服务器·人工智能
cdbqss12 小时前
VB2026 菜单生成基类 BqGetMenuStrip
数据库·经验分享·学习·oracle·vb
洛水水2 小时前
Redis 分布式锁详解:实现与缺陷
数据库·redis·分布式
韶博雅2 小时前
oracle中表和列转大写
数据库·oracle
weixin_548444262 小时前
爆红处理APK 自动化编译流水线 v2026(英文名:APK AutoPipeline)
运维·自动化
枳实-叶2 小时前
【Linux驱动开发】第16天:按键中断完整实战
linux·运维·驱动开发