从零开始使用IoTDB
IoTDB是针对时间序列数据收集、存储与分析一体化的数据管理引擎。它具有体量轻、性能高、易使用的特点,支持对接Hadoop与Spark生态,适用于工业物联网应用中海量时间序列数据高速写入和复杂分析查询的需求。
背景信息
假定某某集团旗下有3个生产线,每个生产线上有5台设备,传感器会实时采集这些设备的指标数据(例如温度、速度、运行状态等),如图1所示。使用IoTDB存储并管理这些数据的业务操作流程为:
- 创建数据库“root.集团名称”以表示该集团。
- 创建时间序列,用于存储具体设备传感器对应的指标数据。
- 模拟传感器,录入指标数据。
- 使用SQL查询指标数据信息。
- 业务结束后,删除存储的数据。
操作步骤
- 登录客户端。
- 以客户端安装用户登录安装客户端的节点,执行以下命令切换到客户端安装目录,例如客户端安装目录为“/opt/client”。
cd /opt/client
- 执行以下命令配置环境变量。
- 首次登录IoTDB客户端前需执行以下步骤生成SSL客户端证书:
- 如果当前集群已启用Kerberos认证,执行以下命令认证当前用户,当前用户需要具有创建IoTDB表的权限,可参考IoTDB权限管理。如果当前集群未启用Kerberos认证,则无需执行此命令。
kinit MRS集群用户
例如:
kinit iotdbuser
- 以客户端安装用户登录安装客户端的节点,执行以下命令切换到客户端安装目录,例如客户端安装目录为“/opt/client”。
- 执行以下命令,切换IoTDB客户端运行脚本所在目录。
cd /opt/client/IoTDB/iotdb/sbin
- 集群未启用Kerberos认证(普通模式)需先调用“alter-cli-password.sh”脚本修改默认用户root的默认密码:
sh alter-cli-password.sh IoTDBServer实例节点IP RPC端口
- IoTDBServer RPC端口默认为22260,也可在参数“IOTDB_SERVER_RPC_PORT”中自行配置。
- root用户默认密码请联系系统管理员获取。
- 执行以下命令登录客户端。
./start-cli.sh -h IoTDBServer实例节点ip -p IoTDBServer RPC端口
IoTDBServer RPC端口默认为22260,也可在参数“IOTDB_SERVER_RPC_PORT”中自行配置。
运行该命令后,根据实际需求指定业务用户名(集群未启用Kerberos认证(普通模式)使用root用户登录):
- 不指定业务用户名,则输入“no”;此时,则使用1.d中的用户执行后续操作:
- 输入其它,则退出登录:
- 不指定业务用户名,则输入“no”;此时,则使用1.d中的用户执行后续操作:
- 根据图1创建数据库“root.company”。
create database root.company;
- 创建对应的时间序列,用于表示生产线下对应设备的传感器。
create timeseries root.company.line1.device1.spin WITH DATATYPE=FLOAT, ENCODING=RLE;
create timeseries root.company.line1.device1.status WITH DATATYPE=BOOLEAN, ENCODING=PLAIN;
create timeseries root.company.line1.device2.temperature WITH DATATYPE=FLOAT, ENCODING=RLE;
create timeseries root.company.line1.device2.power WITH DATATYPE=FLOAT, ENCODING=RLE;
create timeseries root.company.line2.device1.temperature WITH DATATYPE=FLOAT, ENCODING=RLE;
create timeseries root.company.line2.device1.speed WITH DATATYPE=FLOAT, ENCODING=RLE;
create timeseries root.company.line2.device2.speed WITH DATATYPE=FLOAT, ENCODING=RLE;
create timeseries root.company.line2.device2.status WITH DATATYPE=BOOLEAN, ENCODING=PLAIN;
- 向时间序列中加入数据。
insert into root.company.line1.device1(timestamp, spin) values (now(), 6684.0);
insert into root.company.line1.device1(timestamp, status) values (now(), false);
insert into root.company.line1.device2(timestamp, temperature) values (now(), 66.7);
insert into root.company.line1.device2(timestamp, power) values (now(), 996.4);
insert into root.company.line2.device1(timestamp, temperature) values (now(), 2684.0);
insert into root.company.line2.device1(timestamp, speed) values (now(), 120.23);
insert into root.company.line2.device2(timestamp, speed) values (now(), 130.56);
insert into root.company.line2.device2(timestamp, status) values (now(), false);
- 查询1号生产线下所有设备指标。
select * from root.company.line1.**;
+-----------------------------+-------------------------------+---------------------------------+--------------------------------------+--------------------------------+ | Time|root.company.line1.device1.spin|root.company.line1.device1.status|root.company.line1.device2.temperature|root.company.line1.device2.power| +-----------------------------+-------------------------------+---------------------------------+--------------------------------------+--------------------------------+ |2021-06-17T11:29:08.131+08:00| 6684.0| null| null| null| |2021-06-17T11:29:08.220+08:00| null| false| null| null| |2021-06-17T11:29:08.249+08:00| null| null| 66.7| null| |2021-06-17T11:29:08.282+08:00| null| null| null| 996.4| +-----------------------------+-------------------------------+---------------------------------+--------------------------------------+--------------------------------+
- 删除2号生产线下所有设备指标。
delete timeseries root.company.line2.**;
查询2号生产线指标数据已无内容。
select * from root.company.line2.**;
+----+ |Time| +----+ +----+ Empty set.