前言

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

1 IoTDB 的架构与部署形态

1.1 IoTDB 的架构

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

1.2 时序文件部分:TsFile介绍

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

1.3 部署形态

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

明确了 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.1Windows 系统

如果使用 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 是小版本,即有了小改动的版本。

2.2.2Linux系统

如果使用 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.1Linux系统:打开最大文件数限制

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

查看软限制的指令:

ulimit -Sn

查看硬限制的指令:

ulimit -Hn

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

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

软限制:

# ulimit -Sn65535

硬限制:

# ulimit -Hn65535

完成上述步骤解压后,就可以继续准备使用 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  -rpc_port  >/dev/null 2>&1 &

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

sbin\start-server.bat -c  -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 rootsbin\start-cli.bat -h 127.0.0.1 -p 6667 -u root -pw root

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

到此,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 。

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

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

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

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

3.2.1Linux 系统时间戳

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

3.2.2测点和时间序列

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

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

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

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

3.3.1 物联网数据模型

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

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

3.3.2IoTDB数据模型

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

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

4 结语

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