mirror of
https://github.com/alibaba/DataX.git
synced 2025-05-03 02:50:49 +08:00
201 lines
5.5 KiB
Markdown
201 lines
5.5 KiB
Markdown
# 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 约束限制
|
||
|
||
|