当前位置: 首页 > news >正文

Doris集群安装部署

Doris集群安装部署

一、环境搭建

1、环境准备
主机名角色
node1FE(leader),BE,BROKER
node2FE(follower),BE,BROKER
node3FE(observer),BE,BROKER

二、准备工作

1、下载doris安装包

个人建议 生产 稳定版本 2.1.6 下载链接:https://doris.apache.org/download

2、虚拟机系统设置
# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld#永久关闭selinuxsed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0  # 临时# 关闭swap
swapoff -a  # 临时
sed -ri 's/.*swap.*/#&/' /etc/fstab    # 永久cat >> /etc/security/limits.conf  <<EOF
* soft nofile 655360
* hard nofile 655360
EOFvim /etc/sysctl.conf
vm.max_map_count=2000000sudo sysctl -p 立即生效
3、配置jdk
#配置java环境变量
cat >>/etc/profile <<EOFexport JAVA_HOME=/usr/lib/jvm/jdk-8u451
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarEOFsource /etc/profile
4、上传软件包
scp apache-doris-2.1.6-bin-x64.tar.gz root@node1:/export/software
tar -zxvf /export/software/apache-doris-2.1.6-bin-x64.tar.gz -C /export/server/
mv /export/server/apache-doris-2.1.6-bin-x64/ /export/server/doris216

三、安装部署

1.创建存储目录
#三台服务器都创建mkdir -p /export/doris_data/{storage,doris-meta}node1  node2 创建 FE 的元数据目录软连接
ln -s /export/server/doris216/fe/doris-meta /export/doris_data/doris-meta 
查看ls -l /export/doris_data/doris-meta
输出lrwxrwxrwx. 1 root root 37 520 16:45 doris-meta -> /export/server/doris216/fe/doris-meta
2. 配置环境变量

1.FE

FE:
vim /export/server/doris216/fe/conf/fe.conf 文件 修改
1.打开 jdbc_drivers_dir = ${DORIS_HOME}/jdbc_drivers
2: priority_networks = 192.168.88.0/24 (改成网段)
3.加载profile
# 1.添加doris环境变量
vim /etc/profile 
export DORIS_HOME=/export/server/doris216
PATH=$PATH:$DORIS_HOME/bin# 2.刷新配置文件
source /etc/profile # 3.查看环境变量是否生效
echo $DORIS_HOME
/export/server/doris216
4. 启动 FE Master 节点
/export/server/doris216/fe/bin/start_fe.sh --daemon
5. 查看 FE 运行状态
# 1.查看进程
jps
14994 Jps
9657 DorisFE# 2.curl状态检查
curl http://127.0.0.1:8030/api/bootstrap
{"msg":"success","code":0,"data":{"replayedJournalId":0,"queryPort":0,"rpcPort":0,"version":""},"count":0}
# 这里 IP 和 端口分别是 FE 的 IP 和 http_port(默认8030),如果是你在 FE 节点执行,直接运行上面的命令即可。
# 如果返回结果中带有 "msg":"success" 字样,则说明启动成功。

5.1 用户名:root 密码:空着

6. 部署 FE Follower 节点(可选)
node1 执行
scp -r doris216  root@node2:$PWD
scp -r doris216  root@node3:$PWDnode2
ls -l /export/doris_data/doris-meta
输出lrwxrwxrwx. 1 root root 37 520 16:45 doris-meta -> /export/server/doris216/fe/doris-metanode2 node3 
# 清空目录
cd /export/server/doris216/fe/doris-meta/
rm -rf *cd /export/server/doris216/fe/log
rm -f *
6.1 修改 FE Follower 节点配置文件
# 1.添加doris环境变量
vim /etc/profile 
export DORIS_HOME=/export/server/doris216
PATH=$PATH:$DORIS_HOME/bin# 2.刷新配置文件
source /etc/profile # 3.查看环境变量是否生效
echo $DORIS_HOME
/export/server/doris216
6.2 配置环境变量
# 1.添加doris环境变量
vim /etc/profile 
export DORIS_HOME=/export/server/doris216
PATH=$PATH:$DORIS_HOME/bin# 2.刷新配置文件
source /etc/profile # 3.查看环境变量是否生效
echo $DORIS_HOME
/export/server/doris216
6.3 注册 FE Follower 节点
在启动新的 FE 节点前,需要先在 FE 集群中注册新的 FE 节点。## 链接任一存活的 FE 节点
mysql -uroot -P9030 -h node1## 注册 FE Follower 节点
## fe_edit_log_port 可以从 fe.conf 中查看,默认为 9010
## 在 MySQL Client 中执行 ALTER SYSTEM 语句ALTER SYSTEM ADD FOLLOWER "192.168.88.163:9010";
ALTER SYSTEM ADD FOLLOWER "192.168.88.162:9010";如果要添加 observer 节点,可以使用 ADD OBSERVER 命令## 注册 FE observer 节点,在 MySQL Client 中执行 ALTER SYSTEM 语句
ALTER SYSTEM ADD OBSERVER "<fe_ip_address>:<fe_edit_log_port>"
6.4 启动 FE Follower 节点
通过以下命令,可以启动 FE Follower 节点,并自动同步元数据。# 其中,helper_fe_ip 为当前 FE 集群中任一存活的节点。--heper 参数只应用于第一次启动 FE 时同步元数据,后续重启 FE 的操作不需要指定。
bin/start_fe.sh --helper <helper_fe_ip>:<fe_edit_log_port> --daemon[root@node3 ~]# cd  /export/server/doris216/fe/
[root@node2 ~]# cd  /export/server/doris216/fe/# 首次启动(因为hadoop01是存活的,所以都指定hadoop01)
[root@node2 fe]# /export/server/doris216/fe/bin/start_fe.sh --daemon --helper 192.168.88.161:9010 --daemon
[root@node3 fe]# /export/server/doris216/fe/bin/start_fe.sh --daemon --helper 192.168.88.161:9010 --daemon# 非首次启动
/export/server/doris216/fe/bin/start_fe.sh --daemon
6.5 判断 follower 节点状态
ndoe2/3 jps
7878 DorisFE
7958 Jps# 2.curl状态检查
curl http://127.0.0.1:8030/api/bootstrap
{"msg":"success","code":0,"data":{"replayedJournalId":0,"queryPort":0,"rpcPort":0,"version":""},"count":0}
# 这里 IP 和 端口分别是 FE 的 IP 和 http_port(默认8030),如果是你在 FE 节点执行,直接运行上面的命令即可。
# 如果返回结果中带有 "msg":"success" 字样,则说明启动成功。
6.6 连接 FE Follower 节点
连接MySQLmysql> show frontends;
+-----------------------------------------+----------------+-------------+----------+-----------+---------+--------------------+----------+----------+-----------+------+-------+-------------------+---------------------+---------------------+----------+--------+-----------------------------+------------------+
| Name                                    | Host           | EditLogPort | HttpPort | QueryPort | RpcPort | ArrowFlightSqlPort | Role     | IsMaster | ClusterId | Join | Alive | ReplayedJournalId | LastStartTime       | LastHeartbeat       | IsHelper | ErrMsg | Version                     | CurrentConnected |
+-----------------------------------------+----------------+-------------+----------+-----------+---------+--------------------+----------+----------+-----------+------+-------+-------------------+---------------------+---------------------+----------+--------+-----------------------------+------------------+
| fe_ed89bac2_1323_4798_a2d9_96dddee5949b | 192.168.88.161 | 9010        | 8030     | 9030      | 9020    | -1                 | FOLLOWER | true     | 487834097 | true | true  | 209               | 2025-05-20 17:14:16 | 2025-05-20 17:30:47 | true     |        | doris-2.1.6-rc04-653e315ba5 | Yes              |
| fe_214722d6_448e_4d0a_9a7c_d54d1d5cbb28 | 192.168.88.162 | 9010        | 8030     | 9030      | 9020    | -1                 | FOLLOWER | false    | 487834097 | true | true  | 208               | 2025-05-20 17:23:54 | 2025-05-20 17:30:47 | true     |        | doris-2.1.6-rc04-653e315ba5 | No               |
| fe_fa0a5208_9ff0_4056_a9e1_b7dd5dfcba53 | 192.168.88.163 | 9010        | 8030     | 9030      | 9020    | -1                 | FOLLOWER | false    | 487834097 | true | true  | 208               | 2025-05-20 17:27:49 | 2025-05-20 17:30:47 | true     |        | doris-2.1.6-rc04-653e315ba5 | No               |
+-----------------------------------------+----------------+-------------+----------+-----------+---------+--------------------+----------+----------+-----------+------+-------+-------------------+---------------------+---------------------+----------+--------+-----------------------------+------------------+
3 rows in set (0.03 sec)mysql>
7 部署 BE
三台机器ln -sfn /export/doris_data/storage /export/server/doris216/be/storage
查看ls -l /export/doris_data/storage
lrwxrwxrwx 1 root root 34 521 09:39 storage -> /export/server/doris216/be/storage
7.1 修改 BE 配置文件
BE:
三台服务器的be下执行
vim /export/server/doris216/be/conf/fe.conf 文件 修改
添加:
storage_root_path = /export/server/doris216/be/storage
priority_networks = 192.168.88.0/24 (改成网段)
jdbc_drivers_dir = ${DORIS_HOME}/jdbc_drivers或者改一台 分发
scp /export/server/doris216/be/conf/be.conf root@node2:/export/server/doris216/be/conf/be.conf
scp /export/server/doris216/be/conf/be.conf root@node3:/export/server/doris216/be/conf/be.conf
7.2 冷热数据分级存储(可选)
Doris 支持冷热数据分级存储,将冷数据存储在 HDD 或对象存储中,热数据存储在 SSD 中。可以通过路径区别节点内的冷热数据存储目录,HDD(冷数据目录)或 SSD(热数据目录)。如果不需要 BE 节点内的冷热机制,那么只需要配置路径即可,无需指定 medium 类型;也不需要修改 FE 的默认存储介质配置。在使用冷热数据分离功能时,需要在 storage_root_path 中使用 medium 选项。## 在 storage_root_path 中使用 medium 指定磁盘类型
## /home/disk1/doris,medium:HDD: 表示该目录存储冷数据;
## /home/disk2/doris,medium:SSD: 表示该目录存储热数据;
storage_root_path=/home/disk1/doris,medium:HDD;/home/disk2/doris,medium:SSD
注意:当指定存储路径的存储类型时,至少设置一个路径的存储类型为 HDD;
如未显示声明存储路径的存储类型,则默认全部为 HDD;
指定 HDD 或 SSD 存储类型与物理存储介质无关,只为区分存储路径的存储类型,即可以在 HDD 介质的盘上标记某个目录为 SSD;
存储类型 HDD 和 SSD 关键字须大写。
7.3 注册 BE 节点
在启动新的 BE 节点前,需要先在 FE 集群中注册新的 BE 节点。
mysql -uroot -P9030 -h node1## 注册 BE 节点
## be_heartbeat_service_port 可以从 be.conf 中查看,默认为 9050
## 在 MySQL Client 中执行 ALTER SYSTEM 语句
ALTER SYSTEM ADD BACKEND "<be_ip_address>:<be_heartbeat_service_port>"ALTER SYSTEM ADD BACKEND "192.168.88.161:9050";
ALTER SYSTEM ADD BACKEND "192.168.88.162:9050";
ALTER SYSTEM ADD BACKEND "192.168.88.163:9050";
7.4 启动 BE 节点
cd /export/server/doris216/be# 三台机器都执行
sysctl -w vm.max_map_count=2000000
ulimit -n 60000
swapoff -a# 启动
[root@hadoop01 be]#  /export/server/doris216/be/bin/start_be.sh --daemon
[root@hadoop02 be]#  /export/server/doris216/be/bin/start_be.sh --daemon
[root@hadoop03 be]#  /export/server/doris216/be/bin/start_be.sh --daemon如果重新格式化fe
cd /export/server/doris216/be/log
rm -rf *
cd /export/server/doris216/be/storage
rm -rf *
7.5 查看 BE 启动状态
在链接到 Doris 集群后,通过 show backends; 命令查看 BE 的状态。mysql>  show backends;
+-----------+----------------+---------------+--------+----------+----------+--------------------+---------------------+---------------------+-------+----------------------+-----------+------------------+-------------------+---------------+---------------+---------+----------------+--------------------+--------------------------+--------+-----------------------------+-------------------------------------------------------------------------------------------------------------------------------+-------------------------+----------+
| BackendId | Host           | HeartbeatPort | BePort | HttpPort | BrpcPort | ArrowFlightSqlPort | LastStartTime       | LastHeartbeat       | Alive | SystemDecommissioned | TabletNum | DataUsedCapacity | TrashUsedCapacity | AvailCapacity | TotalCapacity | UsedPct | MaxDiskUsedPct | RemoteUsedCapacity | Tag                      | ErrMsg | Version                     | Status                                                                                                                        | HeartbeatFailureCounter | NodeRole |
+-----------+----------------+---------------+--------+----------+----------+--------------------+---------------------+---------------------+-------+----------------------+-----------+------------------+-------------------+---------------+---------------+---------+----------------+--------------------+--------------------------+--------+-----------------------------+-------------------------------------------------------------------------------------------------------------------------------+-------------------------+----------+
| 10044     | 192.168.88.161 | 9050          | 9060   | 8040     | 8060     | -1                 | 2025-05-22 10:58:37 | 2025-05-22 11:02:47 | true  | false                | 22        | 0.000            | 0.000             | 30.258 GB     | 56.986 GB     | 46.90 % | 46.90 %        | 0.000              | {"location" : "default"} |        | doris-2.1.6-rc04-653e315ba5 | {"lastSuccessReportTabletsTime":"2025-05-22 11:01:59","lastStreamLoadTime":-1,"isQueryDisabled":false,"isLoadDisabled":false} | 0                       | mix      |
| 10045     | 192.168.88.162 | 9050          | 9060   | 8040     | 8060     | -1                 | 2025-05-22 10:58:30 | 2025-05-22 11:02:47 | true  | false                | 22        | 0.000            | 0.000             | 22.997 GB     | 36.986 GB     | 37.82 % | 37.82 %        | 0.000              | {"location" : "default"} |        | doris-2.1.6-rc04-653e315ba5 | {"lastSuccessReportTabletsTime":"2025-05-22 11:01:46","lastStreamLoadTime":-1,"isQueryDisabled":false,"isLoadDisabled":false} | 0                       | mix      |
| 10046     | 192.168.88.163 | 9050          | 9060   | 8040     | 8060     | -1                 | 2025-05-22 11:00:43 | 2025-05-22 11:02:47 | true  | false                | 22        | 0.000            | 0.000             | 22.432 GB     | 36.986 GB     | 39.35 % | 39.35 %        | 0.000              | {"location" : "default"} |        | doris-2.1.6-rc04-653e315ba5 | {"lastSuccessReportTabletsTime":"2025-05-22 11:01:54","lastStreamLoadTime":-1,"isQueryDisabled":false,"isLoadDisabled":false} | 0                       | mix      |
+-----------+----------------+---------------+--------+----------+----------+--------------------+---------------------+---------------------+-------+----------------------+-----------+------------------+-------------------+---------------+---------------+---------+----------------+--------------------+--------------------------+--------+-----------------------------+-------------------------------------------------------------------------------------------------------------------------------+-------------------------+----------+
3 rows in set (0.00 sec)通常情况下需要注意以下几项状态:Alive 为 true 表示节点存活
TabletNum 表示该节点上的分片数量,新加入的节点会进行数据均衡,TabletNum 逐渐趋于平均
7.6 验证集群
mysql -uroot -P9030 -h node1mysql>  show backends;
+-----------+----------------+---------------+--------+----------+----------+--------------------+---------------------+---------------------+-------+----------------------+-----------+------------------+-------------------+---------------+---------------+---------+----------------+--------------------+--------------------------+--------+-----------------------------+-------------------------------------------------------------------------------------------------------------------------------+-------------------------+----------+
| BackendId | Host           | HeartbeatPort | BePort | HttpPort | BrpcPort | ArrowFlightSqlPort | LastStartTime       | LastHeartbeat       | Alive | SystemDecommissioned | TabletNum | DataUsedCapacity | TrashUsedCapacity | AvailCapacity | TotalCapacity | UsedPct | MaxDiskUsedPct | RemoteUsedCapacity | Tag                      | ErrMsg | Version                     | Status                                                                                                                        | HeartbeatFailureCounter | NodeRole |
+-----------+----------------+---------------+--------+----------+----------+--------------------+---------------------+---------------------+-------+----------------------+-----------+------------------+-------------------+---------------+---------------+---------+----------------+--------------------+--------------------------+--------+-----------------------------+-------------------------------------------------------------------------------------------------------------------------------+-------------------------+----------+
| 10044     | 192.168.88.161 | 9050          | 9060   | 8040     | 8060     | -1                 | 2025-05-22 10:58:37 | 2025-05-22 11:02:47 | true  | false                | 22        | 0.000            | 0.000             | 30.258 GB     | 56.986 GB     | 46.90 % | 46.90 %        | 0.000              | {"location" : "default"} |        | doris-2.1.6-rc04-653e315ba5 | {"lastSuccessReportTabletsTime":"2025-05-22 11:01:59","lastStreamLoadTime":-1,"isQueryDisabled":false,"isLoadDisabled":false} | 0                       | mix      |
| 10045     | 192.168.88.162 | 9050          | 9060   | 8040     | 8060     | -1                 | 2025-05-22 10:58:30 | 2025-05-22 11:02:47 | true  | false                | 22        | 0.000            | 0.000             | 22.997 GB     | 36.986 GB     | 37.82 % | 37.82 %        | 0.000              | {"location" : "default"} |        | doris-2.1.6-rc04-653e315ba5 | {"lastSuccessReportTabletsTime":"2025-05-22 11:01:46","lastStreamLoadTime":-1,"isQueryDisabled":false,"isLoadDisabled":false} | 0                       | mix      |
| 10046     | 192.168.88.163 | 9050          | 9060   | 8040     | 8060     | -1                 | 2025-05-22 11:00:43 | 2025-05-22 11:02:47 | true  | false                | 22        | 0.000            | 0.000             | 22.432 GB     | 36.986 GB     | 39.35 % | 39.35 %        | 0.000              | {"location" : "default"} |        | doris-2.1.6-rc04-653e315ba5 | {"lastSuccessReportTabletsTime":"2025-05-22 11:01:54","lastStreamLoadTime":-1,"isQueryDisabled":false,"isLoadDisabled":false} | 0                       | mix      |
+-----------+----------------+---------------+--------+----------+----------+--------------------+---------------------+---------------------+-------+----------------------+-----------+------------------+-------------------+---------------+---------------+---------+----------------+--------------------+--------------------------+--------+-----------------------------+-------------------------------------------------------------------------------------------------------------------------------+-------------------------+----------+
3 rows in set (0.00 sec)mysql> show frontends ;
+-----------------------------------------+----------------+-------------+----------+-----------+---------+--------------------+----------+----------+-----------+------+-------+-------------------+---------------------+---------------------+----------+--------+-----------------------------+------------------+
| Name                                    | Host           | EditLogPort | HttpPort | QueryPort | RpcPort | ArrowFlightSqlPort | Role     | IsMaster | ClusterId | Join | Alive | ReplayedJournalId | LastStartTime       | LastHeartbeat       | IsHelper | ErrMsg | Version                     | CurrentConnected |
+-----------------------------------------+----------------+-------------+----------+-----------+---------+--------------------+----------+----------+-----------+------+-------+-------------------+---------------------+---------------------+----------+--------+-----------------------------+------------------+
| fe_ec6c2c5f_ff7e_4156_b5b8_ecbe906189b3 | 192.168.88.162 | 9010        | 8030     | 9030      | 9020    | -1                 | FOLLOWER | true     | 133977265 | true | true  | 716               | 2025-05-22 10:38:48 | 2025-05-22 11:01:07 | true     |        | doris-2.1.6-rc04-653e315ba5 | No               |
| fe_24b40efd_baaa_4e35_9210_09f285373f2f | 192.168.88.163 | 9010        | 8030     | 9030      | 9020    | -1                 | FOLLOWER | false    | 133977265 | true | true  | 671               | 2025-05-22 10:38:50 | 2025-05-22 11:01:07 | true     |        | doris-2.1.6-rc04-653e315ba5 | No               |
| fe_e9172589_68ac_45c8_a1bf_3570dd126e39 | 192.168.88.161 | 9010        | 8030     | 9030      | 9020    | -1                 | FOLLOWER | false    | 133977265 | true | true  | 671               | 2025-05-22 10:38:47 | 2025-05-22 11:01:07 | true     |        | doris-2.1.6-rc04-653e315ba5 | Yes              |
+-----------------------------------------+----------------+-------------+----------+-----------+---------+--------------------+----------+----------+-----------+------+-------+-------------------+---------------------+---------------------+----------+--------+-----------------------------+------------------+
3 rows in set (0.05 sec)mysql>
8. 修改 Doris 集群密码

在创建 Doris 集群后,系统会自动创建 root 用户,并默认密码为空。建议在创建集群后为 root 用户重置一个新密码。

 确认当前用户为 root,在 MySQL Client 中查看当前用户
mysql> select user();
+------------------------+
| user()                 |
+------------------------+
| 'root'@'192.168.88.161' |
+------------------------+
1 row in set (0.02 sec)## 修改 root 用户密码,在 MySQL Client 中执行 set password 命令
mysql> SET PASSWORD = PASSWORD('root'); 
Query OK, 0 rows affected (0.02 sec)
9 创建测试表并插入数据

在新创建的集群中,可以创建表并插入数据以验证集群正确性。

## 创建测试数据库,在 MySQL Client 中执行 create database 语句
mysql> create database testdb;
Query OK, 0 rows affected (0.01 sec)## 创建测试表,在 MySQL Client 中执行 create table 语句
CREATE TABLE testdb.table_hash
(k1 TINYINT,k2 DECIMAL(10, 2) DEFAULT "10.5",k3 VARCHAR(10) COMMENT "string column",k4 INT NOT NULL DEFAULT "1" COMMENT "int column"
)
COMMENT "my first table"
DISTRIBUTED BY HASH(k1) BUCKETS 32;mysql> CREATE TABLE testdb.table_hash-> (->     k1 TINYINT,->     k2 DECIMAL(10, 2) DEFAULT "10.5",->     k3 VARCHAR(10) COMMENT "string column",->     k4 INT NOT NULL DEFAULT "1" COMMENT "int column"-> )-> COMMENT "my first table"-> DISTRIBUTED BY HASH(k1) BUCKETS 32;
Query OK, 0 rows affected (0.16 sec)## 插入部分测试数据,在 MySQL Client 中执行 insert into 语句
INSERT INTO testdb.table_hash VALUES
(1, 10.1, 'AAA', 10),
(2, 10.2, 'BBB', 20),
(3, 10.3, 'CCC', 30),
(4, 10.4, 'DDD', 40),
(5, 10.5, 'EEE', 50);mysql> INSERT INTO testdb.table_hash VALUES-> (1, 10.1, 'AAA', 10),-> (2, 10.2, 'BBB', 20),-> (3, 10.3, 'CCC', 30),-> (4, 10.4, 'DDD', 40),-> (5, 10.5, 'EEE', 50);
Query OK, 5 rows affected (0.31 sec)
{'label':'label_c59ee41cc2014658_9c1f124454c5e761', 'status':'VISIBLE', 'txnId':'31'}## 验证插入数据正确性,在 MySQL Client 中执行 select 语句
mysql> SELECT * from testdb.table_hash;+------+-------+------+------+
| k1   | k2    | k3   | k4   |
+------+-------+------+------+
|    3 | 10.30 | CCC  |   30 |
|    4 | 10.40 | DDD  |   40 |
|    1 | 10.10 | AAA  |   10 |
|    2 | 10.20 | BBB  |   20 |
|    5 | 10.50 | EEE  |   50 |
+------+-------+------+------+
5 rows in set (0.39 sec)
10 后续登录集群
 mysql -uroot -P9030 -h node1 -proot
10.1Web 控制台测试

相关文章:

  • Rust 学习笔记:关于通过异步实现并发的练习题
  • 《C++初阶之类和对象》【类 + 类域 + 访问限定符 + 对象的大小 + this指针】
  • DEVICENET转MODBUS TCP网关连接DeviceNet数字远程IO模块配置案例
  • uniapp小程序不支持动态组件问题
  • 更进一步深入的研究ObRegisterCallBack
  • 【iSAQB软件架构】以架构为中心的开发方法
  • node-red的http-request组件调研三方接口请求参数为form-data解决方案
  • 基于算力魔方与PP-OCRv5的OpenVINO智能文档识别方案
  • 零基础RT-thread第一节:串口通信UART
  • 基于大模型预测的上睑下垂综合诊疗技术方案
  • Java大厂面试真题:谢飞机的技术挑战
  • 每日算法刷题Day29 6.12:leetcode二分答案4道题,用时1h10min
  • 多线程安全:核心解决方案全解析
  • 商业智能中的地图可视化模板:助力数据高效呈现
  • C++ Vector深度解析:动态组的底层机制与实战指南
  • 林业资源多元监测技术守护绿水青山
  • 第 4 篇:线性回归——机器学习“开山第一斧”,用一条直线洞见AI本质
  • python 在基因研究中的应用,博德研究所:基因编辑
  • Rust入门之并发编程基础(二)
  • 智能查重防串标:筑牢烟草行业招投标诚信“防火墙”
  • 网站设计是什么意思/北京百度推广开户
  • 网站建设云主机云服务器/武汉大学人民医院洪山院区
  • 世纪佳缘网站开发公司/营销型高端网站建设
  • 团委网站开发/seo排名优化软件免费
  • asp.net 4.0网站开发实例教程/seo收录排名
  • 最好用的素材网站/灰色行业推广平台