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

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 龙头企业|博世力士乐|德国宝马|北斗智慧物联|某物联大厂|昆仑数据|怡养科技|绍兴安瑞思


http://www.kler.cn/a/597013.html

相关文章:

  • 一条不太简单的TEX学习之路
  • tryhackme——The Lay of the Land
  • 从报错到成功:Mermaid 流程图语法避坑指南✨
  • 嵌入式基础知识学习:UART是什么?
  • kotlin 函数引用
  • SQL语言——MySQL
  • 解决 ECharts Map3D 在高分辨率大屏下鼠标与地图位置错位的问题
  • 如何理解java中Stream流?
  • Python Django入门(创建网页:学习笔记主页)
  • hive:处理JSON格式(get_json_object()函数),连续登录题型,快速生成表(explode,stack),迭代计算
  • 深入理解 lt; 和 gt;:HTML 实体转义的核心指南!!!
  • 批量文件分析器:使用Python从PPT和PDF中提取文本
  • 云服务器运维
  • 022-spdlog
  • python转换wav到mp3
  • AI大模型训练教程
  • C#里使用libxl来对列或行进行分组显示
  • 如何编写SLURM系统的GRES资源插件
  • 【电子元器件篇】——8.LDO
  • 深度学习 Deep Learning 第7章 深度学习的正则化