1. IoTDB数据库简介
Apache IoTDB是Apache基金会开源的时序数据库,专为物联网场景设计。IoTDB以其轻量级架构、高吞吐量写入和丰富的查询功能著称,特别适合工业物联网和智能设备数据管理。更多学习教程www.fgedu.net.cn
IoTDB核心特点
轻量级架构:部署简单,资源占用低
高吞吐量:支持每秒千万级数据点写入
丰富查询:支持时间对齐、降采样、聚合等查询
多协议支持:支持MQTT、REST、JDBC等多种接口
双模型支持:支持树模型和表模型
2. IoTDB版本说明
Apache IoTDB提供多个版本,用户可根据需求选择。学习交流加群风哥微信: itpux-com
最新版本信息
IoTDB v2.0.2:最新稳定版本,支持树表双模型
IoTDB v1.3.7:稳定版本,广泛使用
IoTDB v1.2.x:历史稳定版本
IoTDB v0.14.x:历史长期支持版本
版本特性
v2.x版本:支持树表双模型,新增表模型权限管理
v1.x版本:稳定可靠,功能完整
v0.x版本:基础版本,功能相对较少
3. IoTDB下载地址
Apache IoTDB可以从官方网站或镜像站获取安装包。
官方下载地址
官方网站:https://iotdb.apache.org/Download/
GitHub仓库:https://github.com/apache/iotdb
Apache镜像:https://downloads.apache.org/iotdb/
下载安装包
# cd /fgeudb/software
# wget https://downloads.apache.org/iotdb/1.3.7/apache-iotdb-1.3.7-all-bin.zip
# 输出示例如下:
–2026-04-04 10:00:00– https://downloads.apache.org/iotdb/1.3.7/apache-iotdb-1.3.7-all-bin.zip
Resolving downloads.apache.org… 88.99.95.219
Connecting to downloads.apache.org|88.99.95.219|:443… connected.
HTTP request sent, awaiting response… 200 OK
Length: 104857600 (100M) [application/zip]
Saving to: ‘apache-iotdb-1.3.7-all-bin.zip’
apache-iotdb-1.3.7-all-bin.zip 100%[===================>] 100.00M 15.2MB/s in 6.6s
2026-04-04 10:00:10 (15.2 MB/s) – ‘apache-iotdb-1.3.7-all-bin.zip’ saved
# 验证下载文件
# ls -lh apache-iotdb-1.3.7-all-bin.zip
-rw-r–r–. 1 root root 100M Apr 4 10:00 apache-iotdb-1.3.7-all-bin.zip
4. 环境准备
在安装IoTDB之前,需要准备必要的系统环境和Java运行时。
系统要求
# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.9 (Maipo)
# 检查系统架构
# uname -m
x86_64
# 检查内存和磁盘空间
# free -h
total used free shared buff/cache available
Mem: 31G 2.1G 28G 8.5M 1.0G 28G
Swap: 15G 0B 15G
# df -h /fgeudb
Filesystem Size Used Avail Use% Mounted on
/dev/sdb1 500G 20G 480G 4% /fgeudb
# 安装JDK 11或更高版本
# yum install -y java-11-openjdk java-11-openjdk-devel
# 验证Java版本
# java -version
# 输出示例如下:
openjdk version “11.0.20” 2023-07-18 LTS
OpenJDK Runtime Environment 18.9 (build 11.0.20+9-LTS)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.20+9-LTS, mixed mode, sharing)
# 配置JAVA_HOME
# vi /etc/profile.d/java.sh
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk
export PATH=$JAVA_HOME/bin:$PATH
# 使环境变量生效
# source /etc/profile.d/java.sh
5. 二进制包安装实战
使用二进制包安装是最简单的方式,以下是详细步骤。学习交流加群风哥QQ113257174
步骤1:解压安装包
# yum install -y unzip
# 解压安装包
# cd /fgeudb/software
# unzip apache-iotdb-1.3.7-all-bin.zip -d /fgeudb/
# 输出示例如下:
Archive: apache-iotdb-1.3.7-all-bin.zip
creating: /fgeudb/iotdb-1.3.7/
creating: /fgeudb/iotdb-1.3.7/conf/
creating: /fgeudb/iotdb-1.3.7/lib/
creating: /fgeudb/iotdb-1.3.7/sbin/
creating: /fgeudb/iotdb-1.3.7/tools/
inflating: /fgeudb/iotdb-1.3.7/LICENSE
inflating: /fgeudb/iotdb-1.3.7/NOTICE
inflating: /fgeudb/iotdb-1.3.7/README.md
# 重命名目录
# mv /fgeudb/iotdb-1.3.7 /fgeudb/iotdb
# 查看目录结构
# ls -la /fgeudb/iotdb/
total 16
drwxr-xr-x. 6 root root 4096 Apr 4 10:05 .
drwxr-xr-x. 3 root root 4096 Apr 4 10:00 ..
drwxr-xr-x. 2 root root 4096 Apr 4 10:05 conf
drwxr-xr-x. 2 root root 4096 Apr 4 10:05 lib
drwxr-xr-x. 2 root root 4096 Apr 4 10:05 sbin
drwxr-xr-x. 2 root root 4096 Apr 4 10:05 tools
-rw-r–r–. 1 root root 5120 Apr 4 10:05 LICENSE
-rw-r–r–. 1 root root 1024 Apr 4 10:05 NOTICE
-rw-r–r–. 1 root root 2048 Apr 4 10:05 README.md
步骤2:配置IoTDB
# vi /fgeudb/iotdb/conf/iotdb-env.sh
# 修改JVM参数
MAX_HEAP_SIZE=”4G”
HEAP_NEWSIZE=”1G”
# 编辑主配置文件
# vi /fgeudb/iotdb/conf/iotdb-engine.properties
# 主要配置参数
dn_rpc_address=0.0.0.0
dn_rpc_port=6667
dn_data_dirs=/fgeudb/iotdb/data
dn_wal_dirs=/fgeudb/iotdb/wal
dn_system_dir=/fgeudb/iotdb/system
dn_schema_dir=/fgeudb/iotdb/schema
# 元数据引擎配置
schema_engine_mode=Memory
# 存储引擎配置
timestamp_precision=ms
enable_wal=true
wal_mode=SYNC
# 保存配置文件
步骤3:启动IoTDB
# cd /fgeudb/iotdb/sbin
# ./start-standalone.sh
# 输出示例如下:
Starting IoTDB
Java version is 11.0.20
IoTDB started successfully, pid=12345
# 检查进程
# ps -ef | grep iotdb
root 12345 1 5 10:10 pts/0 00:00:10 /usr/lib/jvm/java-11-openjdk/bin/java -cp /fgeudb/iotdb/sbin/../lib/iotdb-server-1.3.7.jar org.apache.iotdb.db.service.IoTDB
# 检查端口
# netstat -tlnp | grep 6667
tcp 0 0 0.0.0.0:6667 0.0.0.0:* LISTEN 12345/java
步骤4:配置systemd服务
# vi /etc/systemd/system/iotdb.service
[Unit]
Description=Apache IoTDB Server
After=network.target
[Service]
Type=forking
User=root
Group=root
Environment=”JAVA_HOME=/usr/lib/jvm/java-11-openjdk”
Environment=”IOTDB_HOME=/fgeudb/iotdb”
ExecStart=/fgeudb/iotdb/sbin/start-standalone.sh
ExecStop=/fgeudb/iotdb/sbin/stop-standalone.sh
PIDFile=/fgeudb/iotdb/iotdb.pid
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
# 重新加载systemd
# systemctl daemon-reload
# 启动IoTDB服务
# systemctl start iotdb
# 设置开机自启
# systemctl enable iotdb
# 输出示例如下:
Created symlink from /etc/systemd/system/multi-user.target.wants/iotdb.service to /etc/systemd/system/iotdb.service.
# 检查服务状态
# systemctl status iotdb
● iotdb.service – Apache IoTDB Server
Loaded: loaded (/etc/systemd/system/iotdb.service; enabled)
Active: active (running) since Fri 2026-04-04 10:15:00 CST; 10s ago
Process: 12340 ExecStart=/fgeudb/iotdb/sbin/start-standalone.sh (code=exited, status=0/SUCCESS)
Main PID: 12345 (java)
CGroup: /system.slice/iotdb.service
└─12345 /usr/lib/jvm/java-11-openjdk/bin/java -cp …
6. Docker容器安装实战
使用Docker容器安装IoTDB是最快捷的方式,适合快速测试和开发环境。更多学习教程公众号风哥教程itpux_com
步骤1:拉取IoTDB镜像
# docker pull apache/iotdb:1.3.7-standalone
# 输出示例如下:
1.3.7-standalone: Pulling from apache/iotdb
f1f26f570256: Pull complete
8f8e43ef9c3a: Pull complete
e9d8dca5b8a5: Pull complete
a1b8d4c4a5e6: Pull complete
Digest: sha256:abc123def456…
Status: Downloaded newer image for apache/iotdb:1.3.7-standalone
docker.io/apache/iotdb:1.3.7-standalone
# 查看镜像
# docker images | grep iotdb
apache/iotdb 1.3.7-standalone abc123def456 2 weeks ago 500MB
步骤2:运行IoTDB容器
# mkdir -p /fgeudb/iotdb/{data,wal,system}
# 运行IoTDB容器
# docker run -d \
–name iotdb \
-p 6667:6667 \
-p 31999:31999 \
-p 8181:8181 \
-v /fgeudb/iotdb/data:/iotdb/data \
-v /fgeudb/iotdb/wal:/iotdb/wal \
-e enable_wal=true \
apache/iotdb:1.3.7-standalone
# 输出示例如下:
abc123def456789…
# 检查容器状态
# docker ps | grep iotdb
abc123def456 apache/iotdb:1.3.7-standalone “/iotdb/sbin/start-s…” 10 seconds ago Up 9 seconds 0.0.0.0:6667->6667/tcp, 0.0.0.0:8181->8181/tcp iotdb
# 查看容器日志
# docker logs iotdb
# 输出示例如下:
2026-04-04 10:20:00.000 [main] INFO o.a.i.d.s.IoTDB:IoTDB started successfully
2026-04-04 10:20:00.100 [main] INFO o.a.i.d.s.IoTDB:IoTDB is listening on port 6667
7. IoTDB配置优化
以下是生产环境的IoTDB配置优化建议。
JVM配置优化
# vi /fgeudb/iotdb/conf/iotdb-env.sh
# JVM参数配置
MAX_HEAP_SIZE=”8G”
HEAP_NEWSIZE=”2G”
# GC参数
IOTDB_JMX_OPTS=”$IOTDB_JMX_OPTS -XX:+UseG1GC”
IOTDB_JMX_OPTS=”$IOTDB_JMX_OPTS -XX:MaxGCPauseMillis=200″
IOTDB_JMX_OPTS=”$IOTDB_JMX_OPTS -XX:ParallelGCThreads=8″
IOTDB_JMX_OPTS=”$IOTDB_JMX_OPTS -XX:ConcGCThreads=2″
IOTDB_JMX_OPTS=”$IOTDB_JMX_OPTS -XX:+HeapDumpOnOutOfMemoryError”
IOTDB_JMX_OPTS=”$IOTDB_JMX_OPTS -XX:HeapDumpPath=/fgeudb/iotdb/logs/heap_dump.hprof”
# 保存配置文件
存储引擎配置
# vi /fgeudb/iotdb/conf/iotdb-engine.properties
# 基础配置
dn_rpc_address=0.0.0.0
dn_rpc_port=6667
dn_internal_address=192.168.1.51
dn_data_dirs=/fgeudb/iotdb/data
dn_wal_dirs=/fgeudb/iotdb/wal
dn_system_dir=/fgeudb/iotdb/system
dn_schema_dir=/fgeudb/iotdb/schema
# 写入配置
enable_wal=true
wal_mode=SYNC
flush_thread_count=8
sync_thread_count=4
write_thread_count=16
# 压缩配置
enable_tsfile_compression=true
compress_mode=SNAPPY
# 合并配置
enable_auto_compaction=true
compaction_thread_count=4
merge_write_thread_count=4
# 查询配置
query_thread_count=16
read_consistency_level=strong
# 内存配置
allocate_memory_for_read=4G
allocate_memory_for_write=2G
# 保存配置文件
8. 安装验证与测试
安装完成后,需要进行验证测试确保IoTDB正常运行。
使用CLI客户端连接
# cd /fgeudb/iotdb/sbin
# ./start-cli.sh -h 192.168.1.51 -p 6667 -u root -pw root
# 输出示例如下:
Starting IoTDB Cli
_____ _________ ______ ______
|_ _| | _ _ ||_ _ `.|_ _ \
| | .–.|_/ | | \_| | | `. \ | |_) |
| | / (`–‘) | | | | | | | __’.
_| |_| `.___.’ _| |_ _| |_.’ /_| |__) )
|_____| |_____| |______.’|_______/
IoTDB Client version: 1.3.7
IoTDB>
# 查看版本
IoTDB> show version;
+—————+
| version|
+—————+
| 1.3.7 |
+—————+
Total line number = 1
# 查看服务器状态
IoTDB> show server info;
+———————-+———————-+
| ServerInfo| Value|
+———————-+———————-+
| System Version| 1.3.7|
| System BuildTime| 2025-03-04T07:52:00|
| System CPUUsage| 5.2%|
| System MemoryUsage| 45.6%|
+———————-+———————-+
创建存储组和时间序列
IoTDB> CREATE STORAGE GROUP root.ln;
# 输出示例如下:
Msg: The statement is executed successfully.
# 创建时间序列
IoTDB> CREATE TIMESERIES root.ln.wf01.wt01.status WITH DATATYPE=BOOLEAN, ENCODING=PLAIN;
# 输出示例如下:
Msg: The statement is executed successfully.
IoTDB> CREATE TIMESERIES root.ln.wf01.wt01.temperature WITH DATATYPE=FLOAT, ENCODING=RLE;
# 输出示例如下:
Msg: The statement is executed successfully.
# 查看存储组
IoTDB> SHOW STORAGE GROUP;
+————-+
| StorageGroup|
+————-+
| root.ln |
+————-+
Total line number = 1
# 查看时间序列
IoTDB> SHOW TIMESERIES root.ln.**;
+—————————–+—–+——–+——–+
| Timeseries|Alias|DataType|Encoding|
+—————————–+—–+——–+——–+
|root.ln.wf01.wt01.temperature| null| FLOAT| RLE|
| root.ln.wf01.wt01.status| null| BOOLEAN| PLAIN|
+—————————–+—–+——–+——–+
Total line number = 2
插入和查询数据
IoTDB> INSERT INTO root.ln.wf01.wt01(timestamp, status, temperature) VALUES (1712217600000, true, 25.5);
# 输出示例如下:
Msg: The statement is executed successfully.
IoTDB> INSERT INTO root.ln.wf01.wt01(timestamp, status, temperature) VALUES (1712217601000, false, 26.3);
# 输出示例如下:
Msg: The statement is executed successfully.
IoTDB> INSERT INTO root.ln.wf01.wt01(timestamp, status, temperature) VALUES (1712217602000, true, 27.1);
# 输出示例如下:
Msg: The statement is executed successfully.
# 查询数据
IoTDB> SELECT * FROM root.ln.wf01.wt01;
+—————————–+—————————–+————————+
| Time|root.ln.wf01.wt01.temperature|root.ln.wf01.wt01.status|
+—————————–+—————————–+————————+
|2026-04-04T10:00:00.000+08:00| 25.5| true|
|2026-04-04T10:00:01.000+08:00| 26.3| false|
|2026-04-04T10:00:02.000+08:00| 27.1| true|
+—————————–+—————————–+————————+
Total line number = 3
# 聚合查询
IoTDB> SELECT COUNT(temperature), AVG(temperature), MAX_VALUE(temperature) FROM root.ln.wf01.wt01;
+—————————-+—————————–+—————————+
|COUNT(root.ln.wf01.wt01.temperature)|AVG(root.ln.wf01.wt01.temperature)|MAX_VALUE(root.ln.wf01.wt01.temperature)|
+—————————-+—————————–+—————————+
| 3| 26.300000000000000| 27.1|
+—————————-+—————————–+—————————+
Total line number = 1
# 退出客户端
IoTDB> quit;
REST API测试
$ curl -X POST “http://192.168.1.51:8181/rest/v1/sql” \
-H “Content-Type: application/json” \
-d ‘{“sql”: “SHOW STORAGE GROUP”}’
# 输出示例如下:
{
“code”: 200,
“message”: “SUCCESS”,
“result”: {
“columnNames”: [“StorageGroup”],
“columnTypes”: [“STRING”],
“values”: [[“root.ln”]]
}
}
# 插入数据
$ curl -X POST “http://192.168.1.51:8181/rest/v1/sql” \
-H “Content-Type: application/json” \
-d ‘{“sql”: “INSERT INTO root.ln.wf01.wt01(timestamp, temperature) VALUES (1712217603000, 28.0)”}’
# 输出示例如下:
{
“code”: 200,
“message”: “SUCCESS”
}
# 查询数据
$ curl -X POST “http://192.168.1.51:8181/rest/v1/sql” \
-H “Content-Type: application/json” \
-d ‘{“sql”: “SELECT * FROM root.ln.wf01.wt01”}’
# 输出示例如下:
{
“code”: 200,
“message”: “SUCCESS”,
“result”: {
“columnNames”: [“Time”, “root.ln.wf01.wt01.temperature”, “root.ln.wf01.wt01.status”],
“columnTypes”: [“LONG”, “FLOAT”, “BOOLEAN”],
“values”: [
[1712217600000, 25.5, true],
[1712217601000, 26.3, false],
[1712217602000, 27.1, true],
[1712217603000, 28.0, null]
]
}
}
至此,IoTDB数据库的下载和安装已完成。后续可以根据实际业务需求创建存储组、时间序列和配置集群。
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
