# DataX IoTDBWriter ## 1 快速介绍 IoTDBWriter插件实现了写入数据到IoTDB数据库目标表(设备)的功能。 底层实现上,IoTDBWriter通过iotdb.session连接IoTDB,按照IoTDB的SQL语法, 执行session.insertRecordsOfOneDevice语句,将数据写入IoTDB。 IoTDBWriter可以作为数据迁移工具供DBA将其它数据库的数据导入到IoTDB。 ## 2 实现原理 IoTDBWriter 通过 DataX 框架获取 Reader 生成的协议数据Record,通过Session连接IoTDB,执行insert语句,将数据写入IoTDB。 IoTDB中设备与列的概念见IoTDB官方文档。 ## 3 功能说明 ### 3.1 配置样例 配置一个MySQL数据写入IoTDB的作业 使用下面的Job配置,将数据写入IoTDB: ```json { "job": { "content": [ { "reader": { "name": "mysqlreader", "parameter": { "username": "root", "password": "toy123", "column": ["time","A5STD","L2RIS014MD","L2VVP003SM5","D1RIS001MD","D1KRT003EU"], "splitPk": "", "connection": [ { "table": [ "device" ], "jdbcUrl": [ "jdbc:mysql://localhost:3306/demodb?useUnicode=true&allowPublicKeyRetrieval=true&characterEncoding=utf-8" ] } ] } }, "writer": { "name": "iotdbwriter", "parameter": { "username": "root", "password": "root", "host": "192.168.150.100", "port": 6667, "version": "V_1_0", "##": "Reader中时间列的位置,默认0列", "timeColumnPosition": 0, "batchSize": 1000, "device": "root.cgn.device", "measurements": ["A5STD","L2RIS014MD","L2VVP003SM5","D1RIS001MD","D1KRT003EU"], "###": "在插入之前,预先执行的SQL,默认为空", "preSql": [] } } } ], "setting": { "speed": { "channel": 3 } } } } ``` 注意:mysqlreader插件,在src/main/java/com/alibaba/datax/plugin/rdbms/reader/CommonRdbmsReader.java 中270行左右,修改了代码,将mysql中的tinyint(1)转为boolean类型 case Types.SMALLINT: case Types.TINYINT: // 将mysql中的tinyint(1)转为boolean类型 if (metaData.getPrecision(i) <= 3){ record.addColumn(new BoolColumn(rs.getBoolean(i))); break; } ### 3.2 参数说明 * username * 描述:用户名 * 必选:是 * 默认值:无 * password * 描述:用户名的密码 * 必选:是 * 默认值:无 * host * 描述:连接iotdb数据库的主机地址 * 必选:是 * 默认值:无 * port * 描述:端口 * 必选:是 * 默认值:无 * version * 描述:iotdb版本 * 必选:是 * 默认值:无 * timeColumnPosition * 描述:时间列在Record中列的位置 * 必选:否 * 默认值:0 * device * 描述:iotdb中的概念,对应mysql中的表名 * 必选:是 * 默认值:无 * measurements * 描述:iotdb中的概念,对应mysql中的字段集合,顺序应该与record中column的顺序相同 * 必选:是 * 默认值:无 * batchSize * 描述:每batchSize条record为一个batch进行写入 * 必选:否 * 默认值:1000 * preSql * 描述:插入前是否预先执行SQL * 必选:否 * 默认值:无 ### 3.3 类型转换 datax中的数据类型,映射到IoTDB的数据类型 | DataX 内部类型 | IoTDB 数据类型 | | -------------- |------------------| | INT | INT32 | | LONG | TIMESTAMP, INT64 | | DOUBLE | DOUBLE | | STRING | STRING | | BOOL | BOOL | | DATE | TIMESTAMP,DATE | | BYTES | BINARY | ### 3.4 各数据源到IoTDB的参考示例 见datax-example/datax-example-iotdb ## 4 性能报告 ### 4.1 环境准备 #### 4.1.1 数据特征 建表语句: 单行记录类似于: #### 4.1.2 机器参数 * 执行DataX的机器参数为: 1. cpu: 2. mem: 3. net: 千兆双网卡 4. disc: DataX 数据不落磁盘,不统计此项 * IoTDB数据库机器参数为: 1. cpu: 2. mem: 3. net: 千兆双网卡 4. disc: #### 4.1.3 DataX jvm 参数 -Xms1024m -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError ### 4.2 测试报告 #### 4.2.1 单表测试报告 | 通道数 | DataX速度(Rec/s) | DataX流量(MB/s) | DataX机器网卡流出流量(MB/s) | DataX机器运行负载 | DB网卡进入流量(MB/s) | DB运行负载 | DB TPS | | ------ | ---------------- | --------------- | --------------------------- | ----------------- | -------------------- | ---------- | ------ | | 1 | | | | | | | | | 4 | | | | | | | | | 8 | | | | | | | | | 16 | | | | | | | | | 32 | | | | | | | | #### 4.2.4 性能测试小结 ## 5 约束限制