Doris4
Apache Doris 是一款高性能、实时数仓(Real-Time Data Warehouse),由百度开源并加入 Apache 基金会孵化。它采用 MPP 架构、列式存储,并具备高吞吐的导入能力与秒级查询性能,适用于 BI 分析、实时报表、OLAP 查询、日志分析、指标平台等场景。Doris 的设计目标是让“实时 + 分析”简单易用,运维成本极低,同时保持企业级数据仓库的稳定性与扩展性。
Doris 4.0 是一次架构级升级,重点引入新的 Lakehouse 架构(Doris-Lake)、更强的 向量化执行引擎、更智能的 查询优化器 Nereids 以及全面增强的安全体系。相比 3.x,4.0 提供更高并发、更快查询、更灵活的存储层、更完善的资源隔离与权限管理,并大幅提升与外部数据湖(Iceberg、Hive、S3)的互通能力,是面向统一数仓与数据湖的核心版本。
基础配置
创建网络
创建一个网络供Doris使用
docker network create ateng-network创建目录
sudo mkdir -p /data/container/doris/{data,config}创建配置文件
创建FE配置文件
sudo tee /data/container/doris/config/fe.conf <<"EOF"
CUR_DATE=`date +%Y%m%d-%H%M%S`
LOG_DIR = ${DORIS_HOME}/log
JAVA_HOME=/usr/lib/jvm/java
JAVA_OPTS_FOR_JDK_17="-Xms1024m -Xmx8192m -Dfile.encoding=UTF-8 -Djavax.security.auth.useSubjectCredsOnly=false -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=$LOG_DIR -Xlog:gc*,classhisto*=trace:$LOG_DIR/fe.gc.log.$CUR_DATE:time,uptime:filecount=10,filesize=50M --add-opens=java.base/java.nio=ALL-UNNAMED --add-opens java.base/jdk.internal.ref=ALL-UNNAMED --add-opens java.base/sun.nio.ch=ALL-UNNAMED --add-opens java.xml/com.sun.org.apache.xerces.internal.jaxp=ALL-UNNAMED"
meta_dir = ${DORIS_HOME}/doris-meta
jdbc_drivers_dir = ${DORIS_HOME}/jdbc_drivers
http_port = 8030
rpc_port = 9020
query_port = 9030
edit_log_port = 9010
arrow_flight_sql_port = 8070
log_roll_size_mb = 1024
# INFO, WARN, ERROR, FATAL
sys_log_level = WARN
# NORMAL, BRIEF, ASYNC
sys_log_mode = NORMAL
qe_max_connection = 1024
qe_query_timeout_second = 300
qe_slow_log_ms = 5000
enable_fqdn_mode = true
EOF2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
创建BE配置文件
sudo tee /data/container/doris/config/be.conf <<"EOF"
CUR_DATE=`date +%Y%m%d-%H%M%S`
LOG_DIR="${DORIS_HOME}/log/"
JAVA_OPTS_FOR_JDK_17="-Xms1024m -Xmx8192m -Dfile.encoding=UTF-8 -Djol.skipHotspotSAAttach=true -DlogPath=$LOG_DIR/jni.log -Xlog:gc*:$LOG_DIR/be.gc.log.$CUR_DATE:time,uptime:filecount=10,filesize=50M -Djavax.security.auth.useSubjectCredsOnly=false -Dsun.security.krb5.debug=true -Dsun.java.command=DorisBE -XX:-CriticalJNINatives -XX:+IgnoreUnrecognizedVMOptions --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.base/java.lang.reflect=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED --add-opens=java.base/java.nio=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED --add-opens=java.base/sun.nio.ch=ALL-UNNAMED --add-opens=java.base/sun.nio.cs=ALL-UNNAMED --add-opens=java.base/sun.security.action=ALL-UNNAMED --add-opens=java.base/sun.util.calendar=ALL-UNNAMED --add-opens=java.security.jgss/sun.security.krb5=ALL-UNNAMED --add-opens=java.management/sun.management=ALL-UNNAMED -Darrow.enable_null_check_for_get=false"
JAVA_HOME=/usr/lib/jvm/java
JEMALLOC_CONF="percpu_arena:percpu,background_thread:true,metadata_thp:auto,muzzy_decay_ms:5000,dirty_decay_ms:5000,oversize_threshold:0,prof:true,prof_active:false,lg_prof_interval:-1,lg_extent_max_active_fit:8"
JEMALLOC_PROF_PRFIX="jemalloc_heap_profile_"
# ports for admin, web, heartbeat service
be_port = 9060
webserver_port = 8040
heartbeat_service_port = 9050
brpc_port = 8060
arrow_flight_sql_port = 8050
storage_root_path = ${DORIS_HOME}/storage
jdbc_drivers_dir = ${DORIS_HOME}/jdbc_drivers
# INFO, WARNING, ERROR, FATAL
sys_log_level = INFO
EOF2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
运行服务
运行FE服务
docker run -d --name ateng-doris-fe \
--net ateng-network -p 20024:8030 -p 20025:9030 -p 20026:8050 --restart=always \
-v /data/container/doris/config/fe.conf:/opt/apache-doris/fe/conf/fe.conf:ro \
-v /data/container/doris/data/fe:/opt/apache-doris/fe/doris-meta \
-e TZ=Asia/Shanghai \
--entrypoint /opt/apache-doris/fe/bin/start_fe.sh \
registry.lingo.local/service/doris:fe-4.0.12
3
4
5
6
7
查看日志
docker exec -it ateng-doris-fe tail -200f /opt/apache-doris/fe/log/fe.log运行BE服务
docker run -d --name ateng-doris-be \
--net ateng-network --restart=always \
-v /data/container/doris/config/be.conf:/opt/apache-doris/fe/conf/be.conf:ro \
-v /data/container/doris/data/be:/opt/apache-doris/be/storage \
-e TZ=Asia/Shanghai \
--entrypoint /opt/apache-doris/be/bin/start_be.sh \
registry.lingo.local/service/doris:be-4.0.12
3
4
5
6
7
查看日志
docker exec -it ateng-doris-be tail -f /opt/apache-doris/be/log/be.INFO配置服务
进入FE容器
docker exec -it ateng-doris-fe bash进入FE服务
如果是在 FE 的同一台机器上的 MySQL 客户端连接 127.0.0.1, 不需要输入密码。
mysql -uroot -P9030 -h127.0.0.1查看FE服务状态
show frontends\G;添加BE节点
ALTER SYSTEM ADD BACKEND "ateng-doris-be:9050";查看BE服务状态
Alive : true 表示节点正常运行
SHOW BACKENDS\G;设置用户密码
在创建 Doris 集群时,系统会自动创建一个名为 root 的用户,并默认设置其密码为空。为了提高安全性,建议在集群创建后立即为 root 用户设置一个新密码。
远程连接FE,修改root密码
mysql -uroot -P20025 -h192.168.1.12 -e "SET PASSWORD = PASSWORD('Admin@123');"远程连接FE,修改admin密码
mysql -uadmin -P20025 -h192.168.1.12 -e "SET PASSWORD = PASSWORD('Admin@123');"创建普通用户
create database kongyu;
create user kongyu identified by 'kongyu';
grant all on kongyu.* to kongyu;2
3
查看所有用户权限
SHOW ALL GRANTS;创建数据
连接FE
mysql -uroot -P9030 -h127.0.0.1创建表
CREATE TABLE IF NOT EXISTS kongyu.user_info (
id INT NOT NULL,
name STRING,
age INT,
city STRING
)
DISTRIBUTED BY HASH(id) BUCKETS 4
PROPERTIES (
"replication_num" = "1"
);2
3
4
5
6
7
8
9
10
插入数据
INSERT INTO kongyu.user_info (id, name, age, city) VALUES
(2, 'Bob', 30, 'Shanghai'),
(3, 'Charlie', 28, 'Guangzhou'),
(4, 'David', 35, 'Shenzhen');2
3
4
查询数据
SELECT * FROM kongyu.user_info;使用服务
使用HTTP
URL: http://192.168.1.12:20024
Username: admin
Password: Admin@1232
3
使用mysql协议
Address: 192.168.1.12:20025
Username: admin
Password: Admin@1232
3
例如使用mysql客户端:mysql -uadmin -pAdmin@123 -h192.168.1.12 -P20025
使用Arrow Flight SQL
Address: 192.168.1.12:20026
Username: admin
Password: Admin@1232
3
删除服务
停止服务
docker stop ateng-doris-be
docker stop ateng-doris-fe2
删除服务
docker rm ateng-doris-be
docker rm ateng-doris-fe2
删除目录
sudo rm -rf /data/container/doris