前言

        上篇教程谈到,IoTDB 作为数据库管理系统,具有数据收集、数据写入、数据存储、数据查询、数据分析等一系列功能,并将使用优势贯穿了数据的生命周期。而能够让 IoTDB 实现覆盖数据全生命周期功能和优势的基础就是 IoTDB 的架构。所以,本篇首先介绍 IoTDB 的基本架构及可部署形态,继而介绍 IoTDB 的安装启动方法,最后介绍 IoTDB 的数据模式与数据建模方法,作为下篇开始介绍使用 IoTDB 功能处理时序数据的认识基础。

1 IoTDB 的架构与部署形态

1.1 IoTDB 的架构

        IoTDB 的架构分为三个部分:时序文件、数据库引擎和分析引擎,其中分析引擎是可选的分析组件。

a1f7056b1a266e660341bf92b7ab1df4.png

1.2 时序文件部分:TsFile介绍

        TsFile 是 IoTDB 自研的一种专门为时序数据设计的文件存储格式,支持高效的压缩和查询性能,能够为上层应用提供出色的数据存储和查询支持。TsFile 既是 IoTDB 的核心组成部分,也可以独立使用,通过 TsFileSync 时序数据文件同步工具将文件同步至 HDFS 后即可在 Hadoop 或 Spark 等平台上进行数据处理。后篇教程将介绍如何通过 Cli 工具对 TsFile 文件进行管理。

9ef6c4a4b40c058e5b99206211aa586b.png

1.3 部署形态

        除 IoTDB 的架构可实现数据库多功能、高性能的优势外, IoTDB 的部署方式也十分灵活。基础的单机部署简单易用,可支持一键安装,并维持高稳定与高性能。单机处理遇到瓶颈的时候可以考虑边云协同部署和双活部署。边云协同部署能在低网络流量的情况下实现实时同步和批量同步,双活部署则能在两台 IoTDB 之间实现数据实时同步,一个节点失效可自动转换到另一个节点,可靠性高。分布式部署则更上一个台阶,结构灵活,可实现数据分区、动态扩缩容、并行计算等性能提升,可靠性高,可用性好。

bf5303bc1ea0d34b54c85dd39c5c49c0.png

        明确了 IoTDB 的基本架构和部署方法,接下来就可以进入“实战”,即尝试使用 IoTDB 。下文将介绍简易安装 IoTDB 单机版的方法。需要注意的是,以下介绍的方法不是唯一的,其他安装方法可参考 IoTDB 官网上的官方文档:https://iotdb.apache.org/zh/UserGuide/Master/QuickStart/QuickStart.html

2 IoTDB的安装启动与退出方法

2.1 使用环境

        在下载前,需具备 JDK>=1.8 的运行环境,并配置好 JAVA_HOME 环境变量。

2.2 下载指引

2.2.1 Windows 系统

        如果使用 Windows 系统,可以首先前往官网下载页面

https://iotdb.apache.org/zh/Download/

        本文档使用的版本为 0.13.1,点击对应版本的 “All-in-one” 下载即可。下载的压缩包里包含了 Windows 和 Mac 系统所需的文件。

        之后更新的版本也会放到下载页面,可以根据需要版本进行更新。注:下图的 0.12.6 和 0.13.1 版本,12 和 13 表示大版本,即有了大改动的版本。而 6 和 1 是小版本,即有了小改动的版本。

a1e44e484832b4b67a792922c4c8243e.png

2.2.2 Linux系统

        如果使用 Linux 系统,那么 0.13.1 版本的官方下载地址为:https://dlcdn.apache.org/iotdb/0.13.1/apache-iotdb-0.13.1-all-bin.zip

        我们可以用 wget 指令下载: 

wget https://archive.apache.org/dist/iotdb/0.13.1/apache-iotdb-0.13.1-all-bin.zip

2.3 配置指南

        下载压缩包完成后,Windows 和 Mac 系统下只需解压,而 Linux 系统下解压后还需进行简单的配置,以保证 IoTDB 运行文件量大时不出错。

2.3.1 Linux系统:打开最大文件数限制

        Linux 系统下建议设置最大的打开文件数为 65535,我们可以先检查系统目前设置的最大打开文件数为多少。

        查看软限制的指令:

ulimit -Sn

        查看硬限制的指令:

ulimit -Hn

        如果显示的数字为 65535,就不用修改了。如果小于 65535,则要再设置为 65535 。

        这是设置之后的查看结果:

        软限制:

# ulimit -Sn

65535

        硬限制:

# ulimit -Hn

65535

        完成上述步骤解压后,就可以继续准备使用 IoTDB 。要使用 IoTDB 需要先启动 IoTDB Server ,再启动控制工具。控制工具有多种,这里我们先启动 IoTDB 自带的命令行工具 Cli/Shell 工具,之后对数据的增删查改可以在 Cli 窗口中进行。

2.4 启动IoTDB Server与Cli工具

2.4.1 启动 IoTDB Server

2.4.1.1 默认参数启动

        Linux 及 Mac 系统下的默认参数启动指令(注意需要先进入到解压后的 IoTDB 文件目录):

nohup sbin/start-server.sh >/dev/null 2>&1 &

        可以简化为:

nohup sbin/start-server.sh &

        Windows 系统下的默认参数启动指令:

sbin\start-server.bat &

        如果显示 nohup: ignoring input and appending output to ‘nohup.out’ ,可以忽略,不影响 IoTDB 的启动成功状态。

        在 Linux 及 Mac 系统下,更推荐执行第一个指令,第二个指令会生成日志占用内存。

2.4.1.2 指定参数启动

        上面针对两类系统的指令都会使用默认的参数登录, IoTDB 也可以使用指定的参数登录。

        Linux 和 Mac 系统下的指定参数语句为:

nohup sbin/start-server.sh -c <conf_path> -rpc_port <rpc_port> >/dev/null 2>&1 &

         Windows 系统下的指定参数语句为:

sbin\start-server.bat -c <conf_path> -rpc_port <rpc_port>

        其中 "-c" 指定了配置文件所在的文件夹,"-rpc_port"  指定了启动的 rpc port 。

        例如把安装包放在 Windows 系统下的D盘,端口为 6667 ,那么启动指令应为:

sbin\start-server.bat -c D:\apache-iotdb-0.13.1-all-bin\conf -rpc_port 6667

        Windows 系统下,IoTDB Server 启动成功会出现“IoTDB has started”字样,如下面的指令结果所示。Linux 系统下不会出现。

2022-06-28 10:06:29,813 [main] INFO o.a.i.d.e.c.ContinuousQueryService:136 – Continuous query service started.

2022-06-28 10:06:29,813 [main] INFO o.a.i.db.service.IoTDB:169 – Congratulation, IoTDB is set up successfully. Now, enjoy yourself! 

2022-06-28 10:06:29,813 [main] INFO o.a.i.db.service.IoTDB:115 – IoTDB has started.

2.4.2 启动 Cli 工具

        我们可以使用 sbin 文件夹下的 start-cli 脚本来启动 Cli 工具。Linux 和 Mac 系统下这样输入指令:

sbin/start-cli.sh

        Windows 系统下要再开一个 Cli 窗口(需进到文件夹 “apache-iotdb-0.13.0-all-bin” 下打开),输入指令为:

sbin\start-cli.bat

        默认参数为 "-h 127.0.0.1 -p 6667 -u root -pw -root" ,-p 指定端口,-u 指定用户,-pw 指定用户密码,而默认端口是 6667 ,默认用户是 root ,默认密码是 root 。这些参数可以修改,不修改的情况下可以这样输入:

sbin/start-cli.sh -h 127.0.0.1 -p 6667 -u root -pw root

sbin\start-cli.bat -h 127.0.0.1 -p 6667 -u root -pw root

        Windows 系统启动成功会提示 “login successfully” ,当前启动的是 0.13.1 版本。Linux 系统下的启动成功界面如下:

0ca720675831dfd5dcefb9e8d087dd1f.png

        到此,IoTDB Server和Cli/Shell 工具的启动均已完成,IoTDB 也已成功启动可以使用。如需退出 IoTDB  Server 和 Cli/Shell 工具,进而退出使用 IoTDB ,可参考如下步骤。

2.5 退出 IoTDB Server 与 Cli 工具

2.5.1 退出 Cli 工具

        输入 quit 可退出 Cli 工具,结束会话:

quit

2.5.2 退出 IoTDB Server

        可以使用 $IOTDB_HOME/sbin 文件夹下的 stop-server 脚本停止 IoTDB 。

Linux 和 Mac 系统的指令为:

sbin/stop-server.sh

        Windows系统的指令为:

sbin\stop-server.bat

        到此,大家应该了解了 IoTDB 的简易安装方法与退出方法。后续的教程中,我们还将介绍 IoTDB 对于时序数据的具体操作方法(如导入、查询、删除、管理等)。但在介绍具体操作方法之前,我们需要了解一下 IoTDB 使用过程中关于时序数据的基本数据概念、数据模式、和建模方式。IoTDB 的数据建模以物联网模型为基础,非常贴合工业生产场景。理解 IoTDB 的数据模式,才能更好地使用 IoTDB 。

3 IoTDB 的数据模式与建模方式

3.1 工业场景的数据层级与 IoTDB 的数据命名格式

        以实际工业应用场景为例,如下图,电力集团 BHSFC ,拥有 Q1 风电厂,风电厂有一座名为 W002 的风机,风机上测量的数据即轮毂温度命名为 WROT_HubTmp 。

35a56255a6d677d7f7f2f272b3c74460.png

        IoTDB 采用树形结构定义数据模式,根节点默认为  root ,节点之间用“.”分割。上述例子中涉及的数据的时间序列在IoTDB中会被命名为“root.BHSFC.Q1.W002.WROT_HubTmp”。

        如在 IoTDB 中处理此场景内的数据,表头将修改为如下样式,即 “Time” 和“root.BHSFG.Q1.W002.WROT_HubTmp”字段。

92dce34d43850d422c2d736b654ebf85.png

        我们在上述表达中已经提到了时间序列这个概念,那么上表的 IoTDB 数据涉及的概念除了时间序列还有哪些呢?时间序列又具体是指代什么呢?

3.2 IoTDB的数据概念 时间戳、测点、和时间序列

3.2.1 Linux 系统时间戳

        时间戳 ( Timestamp ):为一个数据采集的时间点。

3.2.2 测点和时间序列

        在 IoTDB 中,测点监测的数据代表时间序列。工业场景中,一个传感器或元件采样一个物理量。如果一个测点在不断地采集数据,每个数据点都会打上一个时间戳,这个测点的数据就是一条时间序列,一条时间序列举例如下:

f88686de475431b8064f830e091d4ce6.png

        IoTDB 以从 root 节点到叶子节点的路径来命名一个时间序列,如上述风力电厂例子,数据的存储名字root.BHSFG.Q1.W002.WROT_HubTmp 既是时间序列名,也是测点名。

        明确了 IoTDB 数据涉及的基本概念,我们就可以联系物联网场景的实际数据模型,进一步明确 IoTDB 元数据建模时的数据模型结构。

3.3 基于物联网数据模型的 IoTDB 元数据建模

3.3.1 物联网数据模型

        基于实际工业业务场景,物联网数据模型可表示为如下图所示的属性层级组织结构,即集团层-工厂层-设备层-测点层。设备,例如可以是上述风力电厂例子中的二号风机。测点,例如可以是上述风力电厂例子中风机上的传感器,温度传感器,风速传感器等。

        风机测量的温度加上时间戳即是一条时间序列, IoTDB 的目标场景就是管理很多这种时间序列。

ab4e13c8f3b31bd898fa28b53bbf6ef6.png

3.3.2 IoTDB数据模型

        IoTDB 数据模型基于物联网实际数据模型,贴合紧密,因此建模过程也可以完全参考物联网的实际数据模型架构。依然对应上图的层级,root 为根节点, IoTDB 中的时间序列必须以此开头。第二层及以下可以设置为存储组( storage group )。倒数第二层(设备)是实体,倒数第一层(测点)是物理量,即时间序列。

        上图的红色字样即为 IoTDB 的建模内容,存储组的建模根据需要可设置多个层级,至少为 2 层,图中的存储组 1 为 4 层,存储组 2 为 3 层。

4 结语

        至此我们除了解了 Apache IoTDB 的性能和功能强项外,对于 IoTDB 的架构、部署形态、数据模型及安装启动方法都有了基本认识。接下来的教程将带大家了解 IoTDB 是如何实现具体的数据处理功能,进而完成高效的时序数据管理的。

————————————————

版权声明:本文为CSDN博主「Apache IoTDB」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/qin_DB/article/details/127456594