IoTDB 常见问题 QA 第五期

关于 IoTDB 的 Q & A

 

情人节之际,让 IoTDB Q&A 陪您一起共度解惑!我们将定期汇总我们将定期汇总社区讨论频繁的问题,并展开进行详细回答,通过积累常见问题“小百科”,方便大家使用 IoTDB。

Q1:导入数据时提示内存不足如何处理

outside_default.png

问题现象

IoTDB 导入数据时提示内存不足,该如何处理?

f7b9d39c4ce4049fce3ed455da3073e0.png

outside_default.png

解决方案

数据导入脚本会在触发内存不足的时候主动进行重试。当遇到此问题时,用户不用做任何操作,脚本也可以正确进行处理。如果想从根源减少此类提示,可以按照下述方案:

  • 方案一:增大 DataNode 的堆内内存

  • 方案二:减少当时的查询操作

  • 方案三:调整内存分配比例,给查询先分配更多的内存。用户可以更改 iotdb-system.properties 中的 datanode_memory_proportion,为查询内存分配更高的比例份额

e608ecb5b8185b5856fc4afa5f38c4e7.jpeg

Q2:断电后无法启动 DataNode,日志提示 Meet error while starting up

outside_default.png

问题

IoTDB 1.3.2 版本,断电后 IoTDB 的 DataNode 无法启动,日志如下:

2024-12-16 14:45:41,350 [main] ERROR o.a.i.db.service.DataNode:562 - Meet error while starting up. org.apache.iotdb.commons.exception.StartupException: For input string: "���"  at org.apache.iotdb.db.pipe.progress.SimpleConsensusProgressIndexAssigner.start(SimpleConsensusProgressIndexAssigner.java:69)  at org.apache.iotdb.db.pipe.agent.runtime.PipeDataNodeRuntimeAgent.preparePipeResources(PipeDataNodeRuntimeAgent.java:75)  at org.apache.iotdb.db.service.DataNode.preparePipeResources(DataNode.java:950)  at org.apache.iotdb.db.service.DataNode.prepareResources(DataNode.java:549)  at org.apache.iotdb.db.service.DataNode.setUp(DataNode.java:599)  at org.apache.iotdb.db.service.DataNode.active(DataNode.java:560)  at org.apache.iotdb.db.service.DataNode.doAddNode(DataNode.java:215)  at org.apache.iotdb.db.service.DataNodeServerCommandLine.run(DataNodeServerCommandLine.java:81)  at org.apache.iotdb.commons.ServerCommandLine.doMain(ServerCommandLine.java:58)  at org.apache.iotdb.db.service.DataNode.main(DataNode.java:183)

84550a73c1338cebfe59fc391d3993e0.jpeg

c7e40e38c03d5cd88368f4ce9758dcf2.png

outside_default.png

问题原因

断电时文件系统产生某些意外错误,导致 data/datanode/system/pipe/reboot_times.txt 文件写入内容异常。

outside_default.png

解决方案

出现该日志导致无法启动时,区分两种情况进行处置:

1. 如果系统中不存在 pipe 的使用,手动删除文件 data/datanode/system/pipe/reboot_times.txt 即可。

2. 如果系统中存在 pipe 的使用,请联系社区开发同学提供安全解决方案(可以参考 https://github.com/apache/iotdb/pull/14594 自行修改源码后启动,或升级最新社区版本 > v1.3.3)。

Q3:集群重启某节点失败

outside_default.png

问题现象

IoTDB 1.3.3.6 版本部署的 3C3D 集群,在重启某个节点服务时失败,报错信息为节点冲突,日志部分截图如下:

a61af717f8bf2a5b7063ca990c61a0ca.jpeg

outside_default.png

问题原因

当前 IoTDB 会根据 data/confignode/system 路径下的 confignode-system.properties 文件及 data/datanode/system 路径下的 system.properties 文件去判断是否为重启加入集群。如果该文件被误删除,则可能导致重启时认为当前节点是要加入集群的新节点,而不是重新启动已存在的节点,进而产生如上报错。

outside_default.png

解决方案

1. 可以按照日志提示信息,修改配置重新加入,成功后再移除掉失效的旧节点。

2. 如果实际情况不允许修改配置信息,则可以参考集群中其他节点的 confignode-system.properties 和system.properties 文件,手动创建符合当前节点信息的 confignode-system.properties 和 system.properties,然后分别放到对应的 data/confignode/system 及 data/datanode/system 路径下,再启动即可成功。

Q4:集群节点 IP 改变,如何更新集群

outside_default.png

问题

  • 问题1:如果 IoTDB 配置的时候用的 IP,没有用 hostname,后面 IP 修改了,历史数据需要重新导吗?

  • 问题2:如果现场运行 IoTDB 半年,电脑 IP 要改的话,半年的数据要导出来再导入么?

  • 问题3:有个关于 IoTDB 3C3D 集群,IP 地址更改的问题请教下。目前我们这儿 3C3D 集群,需要进行 IP 地址变更,之前配置文件里面,没有采用 hostname 模型,采用的是 IP 地址参数配置,请问服务器如果 IP 进行了变更,需要针对 IoTDB 集群进行如何调整,才能保证数据的完整性?

  • 问题4:有一个关于 IoTDB 1.3.1 的 TsFile load 问题需要请教下:

    • 【问题场景】:原先采用 3C3D 配置的 IoTDB 集群,config 文件中没有采用 hostname 配置方式,采用的 IP 地址配置,但由于机器 IP 发生了变更,现需要进行 IoTDB 数据 TsFile 重新 load,以加载改 IP 之前录入 IoTDB 的数据。

    • 【问题描述】:目前将 3 台服务器的老数据 data 文件夹,移动到了其他目录:/opt 目录下,目前需要加载 TsFile,是否直接全量加载 sequence 目录下的所有 TsFile 即可?还是说 snapshot 及其他目录的 TsFile,也需要进行 load?但是 snapshot 目录下 sequence 和 unsequence 目录下都有 TsFile,我该选哪个进行 load 才能全量保留之前的数据?

  • 问题5:请问下,3 节点的集群,将原先的 IP 地址参数改成了主机名字。现在往 IoTDB 中写数据时,session 还是通过 IP 来的,但是 IP 有的时候会去解析其他节点的主机名,发现解析不了而报错。请问这种情况该如何解决?

  • 问题6:刚开始电脑部署的 IoTDB 数据库以 127.0 IP 运行,现在想改为以 hostname 运行、因为不能改配置中的 IP,历史数据我可以不要,所以我重新下载了 1.3.0 版本,配置为 hostname 运行成功,但 CLI 连不上,什么原因呢?这样建立新的文件夹,重启新数据库做法可行吗?

outside_default.png

方案

  • 集群部署前的准备:推荐使用合适的 hostname,具体原因可参考《为什么推荐将 IoTDB 服务地址配置为 HostName 而非 IP?》。

  • 集群部署后,IP 地址改变的处理

    • 需要旧集群数据的情况:

      • 搭建并配置新集群:新集群之间需要在每台主机的 /etc/hosts 文件中配置 IP 地址和对应主机名的关系,以确保它们能够相互识别(注意,hostname 必须唯一),之后可以启动新集群。

      • 迁移老集群数据到新集群:可以通过 pipe 同步全量数据,直接将老集群的 data/ 目录(包括 sequence 和 unsequence)加载到新集群中。

    • 不需要旧集群数据的情况:

      • 停止旧集群。

      • 删除旧集群的 data 目录和 logs 目录。

      • 修改新集群及其所在主机的 host 配置。

      • 启动新集群。

  • 集群迁移后,客户端连接更新

    • 在 CLI 连接时,需加上 -h hostname 参数。

    • 对于使用 session 或 sessionPool 的客户端,建议也更新为对应的主机名(hosts)。

Q5:节点宕机后集群恢复

outside_default.png

问题及现象

  • 现象1:IoTDB 集群一台电脑硬盘坏了,换了新硬盘迁移数据只能用 load 么?是不是直接新增节点就行了?

  • 现象2:这个错误是什么原因引起的?集群有个节点宕机,上线之后就报错:

insertByGroup - Meet error when async insert! org.apache.iotdb.rpc.StatementExecutionException: 606: The write is rejected because the wal directory size has reached the threshold 53687091200 bytes. You may need to adjust the flush policy of the storage storageengine or the IoTConsensus synchronization parameter
  • 现象3:请教个问题,双副本集群中,一个节点宕机后,WAL 会持续增加,如果机器无法恢复,需要怎么解决?

  • 现象4:如果 3C3D 的模式下,设置了三个元数据副本,两个数据副本,其中一个节点有问题后会影响另外两个节点的工作么?如果移除那个有问题的节点后会存在数据丢失么?看官方文档说会把移除节点的数据自动同步到剩余两个节点中,又在文档中说不能少于元数据 3 副本的节点数运行,那三个节点的集群岂不是照样一个节点都不能挂?

  • 现象5:如果老节点挂掉了,是不是拿不到之前节点上的数据了?如果是单副本,那数据是取不到吗?

outside_default.png

方法

  • 单机版节点宕机:在其他主机上配置新节点,重新启动,并将旧节点的 /data 目录 load 进新节点。

  • 集群内某个节点宕机之后:

    • 节点能启动:手动启动该节点,启动后如果依然报下面的错,V1.1.0 及之前的版本先升级到最新版本,尝试调大 WAL 文件总大小配置 iot_consensus_throttle_threshold_in_byte 并重启该 DataNode 服务。

The write is rejected because the wal directory size has reached the threshold 53687091200 bytes. You may need to adjust the flush policy of the storage storageengine or the IoTConsensus synchronization parameter`
    • 节点无法启动:在其他主机上配置一个新的节点,指向该集群,启动该节点加入集群。CLI 连接上该集群其他 DataNode,移除掉已经宕机的节点。

outside_default.png

原因

  • 无法移除 DataNode 的情况:当集群只有 3 个 DataNode 且每个有 3 副本时,无法移除某个 DataNode,系统不允许分片的副本数小于配置值。建议先增加一个 DataNode,达到 4 个节点后再移除出问题的节点,因为如果 DataNode 数量不足,系统不支持主动移除节点,这样可能导致副本数少于配置值。但如果是被动宕机,集群仍能正常工作。

  • 拒绝写入的错误原因:如果某个节点长时间宕机,数据副本会一直无法同步,直到达到一定的阈值(默认 50G)后,保护机制会启动。重启后,由于待同步的 WAL 文件过多,通过增大 WAL 总文件大小配置,可以暂时避免阻塞节点间的数据同步。当前版本在节点长时间宕机的情况下,仍然需要通过恢复或移除节点的方式来解决 WAL 堆积问题。未来版本会优化这方面的设计,避免 WAL 堆积再次发生。

规上企业应用实例

能源电力:中核武汉|国网信通产业集团|华润电力|大唐先一|上海电气国轩|清安储能|某储能厂商|太极股份

航天航空:中航机载共性|北邮一号卫星

钢铁冶炼:宝武钢铁|中冶赛迪|中国恩菲

交通运输:中车四方|长安汽车|城建智控|德国铁路

智慧工厂与物联:PCB 龙头企业|博世力士乐|德国宝马|北斗智慧物联|京东|昆仑数据|怡养科技|绍兴安瑞思

ec74a9bbf38d4105f536b3eba5498d23.gif

23bae1cea92dc0e24bdade1aac5c6dbf.jpeg

6fa0b4bcc027baf8562edf9adaecfe1d.jpeg

490eaf6ddd435691102179047e2396c9.jpeg

26b3eed8c10017ebd4bc2cba93d57785.gif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/970670.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SwiftUI 5.0 中宝藏视图修改器 containerRelativeFrame 趣谈(下)

概览 小伙伴们都知道,为了将 SwiftUI 中多如牛毛的视图井然有序、有条不紊的组织起来,我们必须借助容器(Container)伏虎降龙般地威力。而如何最大限度的让容器中的子视图能根据容器尺寸安排自己的空间,则需要一些技术手段来洞幽察微。 在过去,我们往往使用 GeometryRead…

家里WiFi信号穿墙后信号太差怎么处理?

一、首先在调制解调器(俗称:猫)测试网速,网速达不到联系运营商; 二、网线影响不大,5类网线跑500M完全没问题; 三、可以在卧室增加辅助路由器(例如小米AX系列)90~200元区…

windows,docker停止所有容器

CMD命令窗口 你可以尝试使用以下命令来停止所有正在运行的Docker容器: FOR /f "tokens*" %i IN (docker ps -q) DO docker stop %i这条命令的工作原理是: docker ps -q 列出所有正在运行的容器的ID。 FOR /f "tokens*" %i IN (c…

Jenkins介绍

什么是Jenkins Jenkins 是一个开源的自动化服务器,主要用于持续集成和持续交付(CI/CD)。它帮助开发团队自动化构建、测试和部署软件,从而提高开发效率和软件质量。 如果一个系统是前后端分离的开发模式,在集成阶段会需…

解锁电商数据宝藏:淘宝商品详情API实战指南

在电商蓬勃发展的今天,数据已成为驱动业务增长的核心引擎。对于商家、开发者以及数据分析师而言,获取精准、实时的商品数据至关重要。而淘宝,作为国内最大的电商平台,其海量商品数据更是蕴含着巨大的价值。 本文将带你深入探索淘…

嵌入式硬件篇---OpenMV的硬件流和软件流

文章目录 前言一、硬件流控制(Hardware Flow Control)1. 基本原理RTSCTS 2. OpenMV中的实现• 硬件要求• 代码配置• 工作流程 二、软件流控制(Software Flow Control)1. 基本原理XONXOFF 2. OpenMV中的实现• 代码配置• 工作流…

小米平板怎么和电脑共享屏幕

最近尝试使用小米平板和电脑屏幕分屏互联 发现是需要做特殊处理的,需要下载一款电脑安装包:小米妙享 关于这个安装包,想吐槽的是: 没有找到官网渠道,是通过其他网络方式查到下载的 不附录链接,原因是因为地…

ML.Net二元分类

ML.Net二元分类 文章目录 ML.Net二元分类前言项目的创建机器学习模型的创建添加模型选择方案训练环境的选择训练数据的添加训练数据的选择训练数据的格式要预测列的选择模型评估模型的使用总结前言 ‌ML.NET‌是由Microsoft为.NET开发者平台创建的免费、开源、跨平台的机器学习…

在本地校验密码或弱口令 (windows)

# 0x00 背景 需求是验证服务器的弱口令,如果通过网络侧校验可能会造成账户锁定风险。在本地校验不会有锁定风险或频率限制。 # 0x01 实践 ## 1 使用 net use 命令 可以通过命令行使用 net use 命令来验证本地账户的密码。打开命令提示符(CMD&#xff0…

全方位养生指南:打造健康生活蓝图

在这个追求高效与速度的时代,健康养生的重要性愈发凸显,它是我们享受美好生活的前提。下面,让我们从饮食、运动、作息、情绪管理四个维度,解锁健康密码。 饮食是养生的根基,合理搭配才能滋养身心。一日三餐&#xff0c…

【Java 面试 八股文】Spring Cloud 篇

Spring Cloud 篇 1. Spring Cloud 5大组件有哪些?2. 服务注册和发现是什么意思?Spring Cloud 如何实现服务注册发现?3. 我看你之前也用过nacos,你能说下nacos与eureka的区别?4. 你们项目负载均衡如何实现的&#xff1f…

【动态路由】系统Web URL资源整合系列(后端技术实现)【nodejs实现】

需求说明 软件功能需求:反向代理功能(描述:apollo、eureka控、apisix、sentinel、普米、kibana、timetask、grafana、hbase、skywalking-ui、pinpoint、cmak界面、kafka-map、nacos、gateway、elasticsearch、 oa-portal 业务应用等多个web资…

凸包算法—— cad c#二次开发

效果如下&#xff1a; 代码如下&#xff1a; using IfoxDemo; //[assembly: CommandClass(typeof(IFoxDemo.凸包class))]//只允许此类快捷键命令 namespace IFoxDemo {public class 凸包class{public static class 凸包助手{/// <summary>/// 计算点集的凸包并返回多段线…

【设计模式】【行为型模式】解释器模式(Interpreter)

&#x1f44b;hi&#xff0c;我不是一名外包公司的员工&#xff0c;也不会偷吃茶水间的零食&#xff0c;我的梦想是能写高端CRUD &#x1f525; 2025本人正在沉淀中… 博客更新速度 &#x1f44d; 欢迎点赞、收藏、关注&#xff0c;跟上我的更新节奏 &#x1f3b5; 当你的天空突…

进阶数据结构——离散化

目录 一、离散化的核心思想与本质二、离散化的应用场景三、离散化的实现步骤四、离散化的复杂度分析五、离散化的优化技巧六、常见误区与调试技巧七、代码模版&#xff08;c&#xff09;八、经典例题数列离散化寻找满足高度的最大山峦美丽值 九、总结与学习建议 一、离散化的核…

VNC远程控制Mac

前言 macOS系统自带有VNC远程桌面&#xff0c;我们可以在控制端上安装配置VNC客户端&#xff0c;以此来实现远程控制macOS。但通常需要在不同网络下进行远程控制&#xff0c;为此&#xff0c;我们可以在macOS被控端上使用cpolar做内网穿透&#xff0c;映射VNC默认端口5…

[0689].第04节:Kafka与第三方的集成 – Kafka集成SpringBoot

Kafka笔记大纲 SpringBoot 是一个在 JavaEE 开发中非常常用的组件。可以用于 Kafka 的生产者&#xff0c;也可以用于 SpringBoot 的消费者 一、SpringBoot 环境准备 1.1.创建一个 Spring Initializr 1.2.引入场景启动器&#xff1a; <?xml version"1.0" encod…

「软件设计模式」装饰者模式(Decorator)

深入解析装饰者模式&#xff1a;动态扩展功能的艺术&#xff08;C实现&#xff09; 一、模式思想与应用场景 1.1 模式定义 装饰者模式&#xff08;Decorator Pattern&#xff09;是一种结构型设计模式&#xff0c;它通过将对象放入包含行为的特殊封装对象中&#xff0c;动态地…

简单几个步骤完成 Oracle 到金仓数据库(KingbaseES)的迁移目标

作为国产数据库的领军选手&#xff0c;金仓数据库&#xff08;KingbaseES&#xff09;凭借其成熟的技术架构和广泛的市场覆盖&#xff0c;在国内众多领域中扮演着至关重要的角色。无论是国家电网、金融行业&#xff0c;还是铁路、医疗等关键领域&#xff0c;金仓数据库都以其卓…

【Jenkins流水线搭建】

Jenkins流水线搭建 01、SpringBoot项目 - Jenkins基于Jar持续集成搭建文档基于手动方式发布项目基于dockerfile基于jenkins + dockerfile + jenkinsfile +pieline基于jenkins + jar方式的发布01、环境说明01、准备项目02、准备服务器03、安装git04、安装jdk1.805、安装maven依赖…