IoTDB 常见问题 QA 第六期
关于 IoTDB 的 Q & A
第六期持续答疑解惑中!我们将定期汇总社区讨论频繁的问题,并展开进行详细回答,通过积累常见问题“小百科”,方便大家使用 IoTDB。
Q1:IoTDB 看门狗配置后不生效
问题现象
使用 IoTDB 安装包自带的脚本 daemon-confignode.sh 和 daemon-datanode.sh 配置看门狗后,使用“kill -9 ConfigNode 进程号 DataNode 进程号”的方式杀掉数据库进程后,数据库进程不会自动重启。
原因
执行脚本后,默认生成的 service 文件中的 RestartPreventExitStatus=SIGKILL,表示如果服务退出状态码为 SIGKILL(信号 9),则不会重启服务,所以数据库进程不会自动重启。
解决方案
1. 执行完 daemon-confignode.sh 和 daemon-datanode.sh 后,数据库进程服务其实还没有被 systemd 接管,这时需要先把 ConfigNode 和 DataNode 服务手动停一下,然后使用下面的命令启动服务,这样数据库进程就会被 systemd 接管了。
systemctl start iotdb-confignode.servicesystemctl start iotdb-datanode.service
2. 修改 /etc/systemd/system/iotdb-confignode.service 和 /etc/systemd/system/iotdb-datanode.service 中的内容,把 RestartPreventExitStatus=SIGKILL 这一行注释掉。
3. 修改完脚本后执行以下命令使修改生效。
systemctl daemon-reload
上面的步骤执行完成后,这时再杀掉数据库进程,看门狗就可以自动拉起数据库服务了。
Q2:IoTDB 写入数据后 data 目录为空
问题现象
向 IoTDB 写入少量数据后,使用 CLI 工具可以查询到这部分数据,但是在 data 目录下未查找到对应的 TsFile 文件。
问题原因
写入数据时首先写入 memtable,记录 wal,并没有直接落盘。少量数据写入情况下可能并未触发 memtable 的持久化操作,因此在 data 目录下查看不到对应的 TsFile。而通过 CLI 命令行可以从内存中查询到这部分数据。
解决方案
在 CLI 中手动执行 flush 可以将当前 memtable 的所有数据持久化到磁盘上,将 TsFile 文件封口,然后在 data 下对应的目录中可以获取到完整的 TsFile。
思考
在做测试、备份等场景中,保证此时没有并发写入的条件下,需要当前数据文件完整性的话,可以手动 flush(使用 CLI 或者程序)。
Q3:IoTDB 日志提示 Too many open files
问题
IoTDB 1.3.3 版本 IoTDB 执行查询操作失败,日志打印提示 Too many open files。通过命令查看打开文件数,结果如下:
[root@0002 DataReceiver]# lsof|grep 28347|wc -l DataNode55444[root@0002 DataReceiver]# lsof|grep 28207|wc -l ConfigNode18574
查看当前网络连接数,结果如下:
原因和解决方案
原因一:连接太多
解决方案:降一点客户端并发。
原因二:文件太多
解决方案:观察顺乱序文件数目以及各个模块文件的大小,TsFile 过多可以调优合并,顺序文件或者乱序文件过多可以修改配置。
# The priority of compaction execution# INNER_CROSS: prioritize inner space compaction, reduce the number of files first# CROSS_INNER: prioritize cross space compaction, eliminate the unsequence files first# BALANCE: alternate two compaction types# compaction_priority=BALANCE# 优先执行空间内合并任务compaction_priority=INNER_CROSS# BALANCE 各种合并平等# INNER_CROSS 优先进行顺序文件和顺序文件或乱序文件和乱序文件的合并# CROSS_INNER 优先将乱序文件合并到顺序文件中
如果条件允许(系统资源利用率不高,对其他模块无影响的情况下),可以适当再调大合并写入限速、合并任务并发数,加速合并。
# How many threads will be set up to perform compaction, 10 by default.# Set to 1 when less than or equal to 0.# Datatype: int# compaction_thread_count=1
# The limit of write throughput merge can reach per second# values less than or equal to 0 means no limit# Datatype: int, Unit: megabyte# compaction_write_throughput_mb_per_sec=16# 每秒可达到的写入吞吐量合并限制。
# The number of sub compaction threads to be set up to perform compaction.# Currently only works for nonAligned data in cross space compaction and unseq inner space compaction.# Set to 1 when less than or equal to 0.# Datatype: int# sub_compaction_thread_count=4# 每个合并任务的子任务线程数,只对跨空间合并和乱序空间内合并生效
Q4:IoTDB TTL 不生效
问题
IoTDB 1.3.0 版本数据库的 TTL 设置为两天,show databases details 看到设置也是正确的,怎么还是可以查到好几天前的数据?因为有很多不活跃的测点,所以专门设置了两天过期,有什么办法可以自动清理呢?设置方式是在配置文件统一设置的。
原因
可能因为期间出现过 ConfigNode OOM,加了内存重启过。
或者是当前版本已解决的 TTL Cache 不一致问题。
方案
用命令 unset 然后再 set,设置就可以生效了。
升级到最新版 IoTDB。
Q5:IoTDB 一台节点的 DataNode 出现 xxxx.tsfile is not complete, and some source files is lost 错误
问题
使用 IoTDB 1.3.0 版本集群的时候,其中有一台节点的 DataNode 出现这个错误,造成无法正常写入数据:
2024-12-12 14:30:46,136 [pool-8-IoTDB-StorageEngine-3] ERROR o.a.i.d.s.d.c.e.r.CompactionRecoverTask:292 - root.ln-5 [Compaction][ExceptionHandler] target file unsequence/root.ln/5/2865/1733480889427-13297-1-0.tsfile is not complete, and some source files is lost, do nothing. Set allowCompaction to false 2024-12-12 14:30:46,136 [pool-8-IoTDB-StorageEngine-3] INFO o.a.i.c.conf.CommonConfig:399 - Set system mode from Running to ReadOnly. 2024-12-12 14:30:46,136 [pool-8-IoTDB-StorageEngine-3] WARN o.a.i.c.conf.CommonConfig:405 - Change system status to ReadOnly! Only query statements are permitted! 2024-12-12 14:30:46,136 [pool-8-IoTDB-StorageEngine-3] ERROR o.a.i.d.s.d.c.e.r.CompactionRecoverTask:142 - root.ln-5 [Compaction][Recover] Failed to recover compaction, set allowCompaction to false
还有两个 DataNode 节点是好的,连接好的 DataNode 节点写入是没有问题的,但是剩下的节点就不行了。
原因
在低版本的 IoTDB 当中,Compaction 时出现上述异常,会将对应的 DataNode 设置为 ReadOnly 的状态,此时该节点会无法进行写入请求。
解决方案
更新至 IoTDB 1.3.3 及以上版本。
规上企业应用实例
能源电力:中核武汉|国网信通产业集团|华润电力|大唐先一|上海电气国轩|清安储能|某储能厂商|太极股份
航天航空:中航机载共性|北邮一号卫星
钢铁、金属冶炼:宝武钢铁|中冶赛迪|中国恩菲
交通运输:中车四方|长安汽车|城建智控|德国铁路
智慧工厂与物联:PCB 龙头企业|博世力士乐|德国宝马|北斗智慧物联|某物联大厂|昆仑数据|怡养科技|绍兴安瑞思