DataX/iotdbwriter/doc/iotdbwriter-CN.md

201 lines
5.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 约束限制