
# 快速使用IoTDB
IoTDB是针对时间序列数据收集、存储与分析一体化的数据管理引擎。它具有体量轻、性能高、易使用的特点，支持对接Hadoop与Spark生态，适用于工业物联网应用中海量时间序列数据高速写入和复杂分析查询的需求。
#### 背景信息
假定某某集团旗下有3个生产线，每个生产线上有5台设备，传感器会实时采集这些设备的指标数据（例如温度、速度、运行状态等），如[图1]所示。使用IoTDB存储并管理这些数据的业务操作流程为：
1. 创建存储组"root.集团名称"以表示该集团。
2. 创建时间序列，用于存储具体设备传感器对应的指标数据。
3. 模拟传感器，录入指标数据。
4. 使用SQL查询指标数据信息。
5. 业务结束后，删除存储的数据。
图1数据结构   
![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000001676907174.png "点击放大")
#### 操作步骤
1. 登录客户端。 
   1. 以客户端安装用户登录安装客户端的节点，执行以下命令切换到客户端安装目录，例如客户端安装目录为"/opt/client"。 **cd /opt/client**
      
   
   2. 执行以下命令配置环境变量。 **source bigdata_env**
      
   
   3. 首次登录IoTDB客户端前需执行以下步骤生成SSL客户端证书：
      1. 执行以下命令生成客户端SSL证书： **keytool -noprompt -import -alias myservercert -file ca.crt -keystore truststore.jks**
         执行该命令后需输入一个自定义密码。
         
      
      2. 将生成的"truststore.jks"文件复制到"*客户端安装目录* /IoTDB/iotdb/conf"目录下：
         **cp truststore.jks** *客户端安装目录* **/IoTDB/iotdb/conf**
         
       
   
   4. 如果当前集群已启用Kerberos认证，执行以下命令认证当前用户，当前用户需要具有创建IoTDB表的权限，可参考[IoTDB用户权限管理](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_24140.html)。如果当前集群未启用Kerberos认证，则无需执行此命令。
      **kinit** *MRS* *集群用户*
      例如：
      **kinit iotdb** **user**
      
   
   
   
   
2. 执行以下命令，切换IoTDB客户端运行脚本所在目录。 
   **cd /opt/client/IoTDB/iotdb/sbin**
   
   
3. 集群未启用Kerberos认证（普通模式）需先调用"alter-cli-password.sh"脚本修改默认用户**root** 的默认密码：
   
   **sh alter-cli-password.sh** *IoTDBServer实例节点* *IP* *RPC端口*
   ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/public_sys-resources/note_3.0-zh-cn.png)
   - IoTDBServer实例节点IP地址可在Manager界面，选择"集群 \> 服务 \> IoTDB \> 实例"查看。
   
   - IoTDBServer RPC端口可在参数"IOTDB_SERVER_RPC_PORT"中自行配置。默认端口如下：
     - 开源端口默认值为：6667
     
     - 定制端口默认值为：22260
     
     
     端口定制/开源区分：创建LTS版本类型集群时，可以选择"组件端口"为"开源"或是"定制"，选择"开源"使用开源端口，选择"定制"使用定制端口。
     
   
   - **root**用户初始密码MRS 3.3.0之前版本为"root"，MRS 3.3.0及之后版本为"Iotdb@123"。
   
   - 修改的用户密码字符长度MRS 3.3.0之前版本至少为4位，MRS 3.3.0及之后版本至少为8位，且不能包含空格。
    
   
   
4. 执行以下命令登录客户端。 
   **./start-cli.sh** **-h** *IoTDBServer实例节点ip* **-p** *IoTDBServer RPC端口*
   IoTDBServer RPC端口可在参数"IOTDB_SERVER_RPC_PORT"中自行配置。
   运行该命令后，根据实际需求指定业务用户名（集群未启用Kerberos认证（普通模式）使用**root**用户登录）：
   - 指定业务用户名，则输入"yes"，并根据提示输入业务用户名和对应的业务用户密码： ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000001724866525.png "点击放大")
     
   
   
   
   - 不指定业务用户名，则输入"no"；此时，则使用[1.d]中的用户执行后续操作：
     ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000001724746653.png "点击放大")
     
   
   - 输入其他，则退出登录： ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000001676907170.png "点击放大")
     
   
   
   
   
5. 根据[图1]创建存储组/数据库（MRS 3.3.0及之后版本）"root.company"。
   
   **set storage group to root.company;**
   
   
6. 创建对应的时间序列，用于表示生产线下对应设备的传感器。 
   **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;**
   
   
7. 向时间序列中加入数据。 
   **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);**
   
   
8. 查询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|
   +-----------------------------+-------------------------------+---------------------------------+--------------------------------------+--------------------------------+
   ```
   
   
9. 删除2号生产线下所有设备指标。 
   **delete timeseries root.company.line2.\*\*;**
   查询2号生产线指标数据已无内容。
   **select \* from root.company.line2.\*\*;**
   ```
   +----+
   |Time|
   +----+
   +----+
   Empty set.
   ```
   
   
 
