暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

DataX自定义iotdbwriter插件

程序猿客栈 2021-08-19
1319

IoTDB针对工业物联网领域时序数据乱序问题对LSM-Tree进行了优化改造,在内存和文件上面都考虑乱序的处理,非常适合工业物联网环境下的应用场景。


作者简介

具有十多年技术研发与架构经验,目前在某公司担任大数据产品负责人、资深大数据架构师,负责大数据产品设计与技术架构,并参与编写核心代码工作。前青云大数据工程师,负责公有云消息中间件研发工作,前斗鱼大数据工程师,负责海量日志平台建设,精通各种大数据技术栈,对架构设计、JVM底层等理解深刻。

IoTDB

概述

IoTDB 是清华大学主导的 Apache顶级项目,一款专为物联网时序数据打造的数据库。

特征

  • 针对物联网模型做了定制化,提供 JDBC 访问方式,支持边云一体化部署。

  • 开放的 TsFile 存储格式,设备模型简单易理解。

  • 体量轻、性能高、易使用,存储支持使用 HDFS,并提供多种 connector,与现有大数据生态无缝打通。

  • 提供数据收集,存储和分析一体化服务。

  • 可以满足大规模数据存储,高速数据提取和复杂数据分析,因此适用于工业物联网应用中海量时间序列数据高速写入和复杂分析查询的需求。

架构

IoTDB套件由若干个组件构成,共同形成“数据收集-数据写入-数据存储-数据查询-数据可视化-数据分析”等一系列功能。

下图展示了使用IoTDB套件全部组件后形成的整体应用架构。

用户可以使用JDBC将设备上的传感器收集的时间序列数据导入本地/远程IoTDB。

这些时间序列数据可以是系统状态数据(例如服务器负载和CPU内存等),消息队列数据,来自应用程序的时间序列数据或数据库中的其他时间序列数据。

用户还可以将数据直接写入TsFile(本地或HDFS上)。对于写入IoTDB和本地TsFile的数据,用户可以使用TsFileSync工具将TsFile同步到HDFS,从而在Hadoop或Spark数据处理平台上执行数据处理任务,例如异常检测和机器学习,分析结果可以用相同的方式写回TsFile。

此外,IoTDB和TsFile提供客户端工具,以满足用户以SQL形式,脚本形式和图形形式编写和查看数据的各种需求。

DataX

简介

在如何用DataX自定义iotdbwriter之前,我们先来先了解一下什么是DataX,它能做什么事呢?

DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台。DataX 实现了包括 MySQL、Oracle、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、Hologres、DRDS 等各种异构数据源之间高效的数据同步功能。

Features

其本身作为数据同步框架,将不同数据源的同步抽象为从源头数据源读取数据的Reader插件,以及向目标端写入数据的Writer插件,理论上DataX框架可以支持任意数据源类型的数据同步工作。同时DataX插件体系作为一套生态系统, 每接入一套新数据源该新加入的数据源即可实现和现有的数据源互通。


DataX3.0框架设计

DataX本身作为离线数据同步框架,采用Framework + plugin架构构建。将数据源读取和写入抽象成为Reader/Writer插件,纳入到整个同步框架中。

  • Reader:Reader为数据采集模块,负责采集数据源的数据,将数据发送给Framework。

  • Writer:Writer为数据写入模块,负责不断向Framework取数据,并将数据写入到目的端。

  • Framework:Framework用于连接reader和writer,作为两者的数据传输通道,并处理缓冲,流控,并发,数据转换等核心技术问题。

插件机制

从设计之初,DataX就把异构数据源同步作为自身的使命,为了应对不同数据源的差异、同时提供一致的同步原语和扩展能力,DataX自然而然地采用了框架 + 插件 的模式:

  • 插件只需关心数据的读取或者写入本身。

  • 而同步的共性问题,比如:类型转换、性能、统计,则交由框架来处理。

作为插件开发人员,则需要关注两个问题:

  • 数据源本身的读写数据正确性。

  • 如何与框架沟通、合理正确地使用框架。

建议大家花费一点时间了解官方提供的DataX插件开发宝典,理解底层原理的实现。

iotdbwriter插件简介

1 快速介绍

数据导入iotdb的插件。

2 实现原理

使用Java原生接口, 批量把从reader读入的数据写入iotdb。

3 功能说明

3.1 配置样例

job.json

    {
    "job": {
    "setting": {
    "speed": {
    "channel": 1
    }
    },
    "content": [{
    "reader": {
    ...
    },
    "writer": {
    "name": "iotdbwriter",
    "parameter": {
    "host": "127.0.0.1",
    "port": 6667,
    "username": "root",
    "password": "root",
    "storageGroup": "root.ln",
    "batchSize": 5000
    }
    }
    }]
    }
    }

    3.2 参数说明(各个配置项前后不允许有空格)

    • host

    • 描述:iotdb的连接地址

    • 必选:是

    • 默认值:无

    • port

    • 描述:iotdb的rpc port

    • 必选:否

    • 默认值:6667

    • username

    • 描述:iotdb连接用户名

    • 必选:是

    • 默认值:空

    • password

    • 描述:iotdb连接密码

    • 必选:是

    • 默认值:无

    • storageGroup

    • 描述:iotdb存储组

    • 必选:是

    • 默认值:无

    • batchSize

    • 描述:写入批次大小

    • 必选:否

    • 默认值:5000

    4 约束限制

    • 目前插件数据格式按照deviceIds,time,measurements,values 严格有序,示例值:root.ln.wf01.wt01,1628490506000,["s1","s2"],[0.530635,0.530635]

    插件开源地址

      https://github.com/pengkeboy/DataX-iotdb
      https://gitee.com/pengkeboy/DataX-iotdb

      结束语

      以上若有不对,请多多指正,一起完善插件!大家多多指教~共同探讨与学习~

      文章转载自程序猿客栈,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

      评论