Apache IoTDB开源解决方案-乔嘉林

展开查看详情

1.基于 IoTDB 打造时序数据 全生命周期管理的开源解决方案 2020/1/4 乔嘉林

2.乔嘉林 Apache IoTDB PPMC 清华大学软件学院博士生 公众号作者:铁头乔

3. 目录/Contens 1.时序管理需求 2.IoTDB架构 3.开源解决方案 4.总结

4.时序管理需求

5.示例场景 风力发电厂(风能->电能) 1、发电功率预测 2、风机故障预警(如叶片结冰) 数据? 1、静态关系数据:风机型号、叶片数量、坐标 2、动态时序数据:叶片转速、风力、温度

6.时序数据生命周期 采集 缓存 处理 存储 查询/分析 可视化/应用 设备*传感器 边缘网关 消息队列/流处理 数据平台 计算平台 用户 支持多种 高吞吐 轻量级 保序 单一数据源 好用 工业协议 高压缩比

7.IoTDB架构

8.开放的架构:查询分析一体化 • 一份数据同时支持查询 (DBMS) 和分析 (BigData Analysis) IoTDB Engine Analyzing Layer JDBC/Session API vehicle OPC Modbus PROFINET TsFile TsFile RS232 TsFile IoTDB IoTDB TCP/IP Engine Engine Hadoop-TsFile Spark-TsFile wind turbine UDP TsFile Sync Adaptor Adaptor TsFile API TsFile API data center Storage Hadoop TsFile Local TsFile TsFile Distributed TsFile TsFile TsFile File System File System excavator

9.IoTDB组件介绍 • 基本概念 • 元数据模型 • 数据文件 • 存储 • 查询 • 大数据生态

10. IoTDB 基本概念 Storage Group (存储组 / 数据库 / 设备类型) • 独立的物理存储和资源管理 Cadillac • 可管理多个设备 • root.Cadillac Device (设备) • 一个工业设备实例,可以有多个属性 • “root.Cadillac.id_7BTC409” Measurement (测点) • 部署在一个设备上的多个传感器 • “fuelRemain” 剩余油量 Time Series (时间序列) • Device + Measurement (设备+测点) • root.Cadillac.id_7BTC409.fuelRemain

11. 元数据 root 工厂 FU01 FU02 FU03 FU04 设备种类 deviceType1 devicetype2 devicetype1 devicetype2 devicetype1 devicetype2 …… …… …… 设备编码 AZQ01 AZQ02 AZQ01 AZQ01 AZQ01 AZQ02 AZQ01 AZQ02 AZQ01 AZQ02 Temperature Temperature Temperature Temperature Temperature Temperature Temperature Temperature Wind Speed Wind Speed Wind Speed Wind Speed Wind Speed Wind Speed Wind Speed Wind Speed 测点 …… …… …… 路径:唯一确定一条时间序列

12. 元数据 场景:地铁数据管理 场景:电厂设备管理 • Storage group:地铁线路 • Storage group:设备类别(风机/太阳能 • Device:列车编号 板/逆变器) • Measurement:列车速度、开关量 • Device:设备编号 时间序列: • Measurement:风速、光照、电压 • 一号线的1701车的列车速度 时间序列: • root.metro.line1.1707.speed • 1号风机所在位置的风速 • root.turbine.1.windSpeed

13. TsFile-时间序列文件格式 三层结构:Chunk Group(设备) -> Chunk(测点) -> Page (times-values) 每层:预聚合、索引 Chunk Group Chunk 1 Chunk Header …… Page 1 Page Header Chunk m Times … Group Footer Values Page n Page Chunk Chunk Group Index https://iotdb.apache.org/#/Documents/0.9.x/chap4/sec5

14.TsFile-时间序列文件格式 特点: 1、易用:不同时间序列可独立写入,不需提前按时间对齐(应对时钟不同步) 2、高压缩比:每个时间序列存储时间-值两列,不存储空值 3、高性能查询:不同 Chunk Group 属于不同设备,可快速索引 文件大小 查询耗时

15.常见存储结构 原地更新 l 实时更新磁盘上的数据: B+Tree(MySQL-InnoDB)、AVL-Tree (HSQLDB)、COW-Tree(BTrDB) l 缺点:IO效率低,为了更新一条数据,需要重写一个或多个数 据块,写入速度慢 Log-structured Merge Tree (LSM) count=4 count=3 预计算结果 l 追加型写入,写入效率高 l 乱序数据会影响查询性能 1 2 3 4 6 7 8 时间 l 后台合并机制 5

16.IoTDB 存储引擎:tLSM 1、支持乱序、重复数据写入 2、顺序、乱序数据分离存储,减少merge数据量 3、支持HDFS或本地存储 4、不同实例间同步数据 append active out-of-order memtable 1 SG 2 time 3 5 submit Processor detector active ordered flush memtable 4 task redo flush manager log ordered out-of-order differential indexes TsFile Tsfile File Compaction

17. IoTDB 存储引擎 Local or HDFS • 打包 server 和 Hadoop 模块 • 将 hadoop 模块 jar 包放到 server/lib 下 • 修改配置文件 iotdb-engine.properties https://iotdb.apache.org/#/Documents/progress/chap8/sec3

18.IoTDB 存储引擎:文件同步 发送端定期传输数据文件至接收端 发送端 汇总各个工厂数据到数据中心 1、接收端/发送端配置文件 iotdb-engine.properties TsFile 2、启动接收端IoTDB 发送端 接收端 sbin/start-server.sh 3、启动发送进程: tools/start-sync-client.sh 发送端 https://iotdb.apache.org/#/Documents/0.9.x/chap6/sec1

19.IoTDB-查询引擎 SQL解析、逻辑计划生成、逻辑优化、物理计划生成、执行、返回结果 两种表结构 time, ts1, ts2, ts3 time, deviceId, m1, m2, m3

20.IoTDB-元数据查询 1. 查询存储组 2. 查询时间序列 3. 查询子节点 root 工厂 FU01 FU02 FU03 FU04 设备种类 deviceType1 devicetype2 devicetype1 devicetype2 devicetype1 devicetype2 …… …… …… 设备编码 AZQ01 AZQ02 AZQ01 AZQ01 AZQ01 AZQ02 AZQ01 AZQ02 AZQ01 AZQ02 Temperature Temperature Temperature Temperature Temperature Temperature Temperature Temperature Wind Speed Wind Speed Wind Speed Wind Speed Wind Speed Wind Speed Wind Speed Wind Speed 测点 …… …… …… https://iotdb.apache.org/#/Documents/progress/chap5/sec1

21.IoTDB-原始数据查询 select temperature from root.turbine.device1 where time < 2019-11-01T00:08:00.000 and temperature < 10

22.IoTDB-聚合查询 count、avg、sum、max_time、last_value、min_time、 first_value 文件层预计算 数据块 1,2,3,4 5,6,7,8 9,10 l 三层预计算信息 min:1 min:5 min:9 摘要 max:4 max:8 max:10 持久化聚合索引PISA l 增量构建、更新代价小 l 查询时直接计算所需节点编号

23.IoTDB-降采样查询 1. 查询时间范围 2. 聚合范围 3. 滑动步长 select avg(temperature) from root.windturbine.device1 group by ( [2019-01-01 00:00:00, 2020-01-01 00:00:00] , 3h , 1d ); 查询2019年-2020年每天0点-3点的平均温度

24.大数据生态集成 Spark-TsFile 、Spark-IoTDB、Hadoop-TsFile、Hive-TsFile、 Grafana-IoTDB HDFS TsFile RDD Spark 文件级: Worker 1、ChunkGroup -> Task Chunk Group 1 Partition Task Node1 Executor 2、谓词下推 Chunk Group 2 Partition Task …… …… …… …… 系统级: 1、数据分区 2、谓词下推

25.开源解决方案

26.IoTDB生态 采集 缓存 处理 存储 查询/分析 可视化/应用

27.系统概览 采集 缓存 处理 存储 查询/分析 可视化/应用 OPC Modbus RS232 TCP/IP UDP TsFile HDFS TsFile TsFile

28.采集 https://plc4x.apache.org PLC(可编程逻辑控制器) 工业生产的大脑,采集数据、下发控制指令 Modbus PLC Modbus Slave: 模拟PLC 传感器1 传感器2 Apache PLC4X 工业协议适配器,内部实现了多种工控协议。希望解决多种PLC或现场设备与 IT系统的通信协议不兼容问题,提供统一的API。 https://github.com/Ratuchetp/Plc4jPi

29.缓存 TsFile 1、采集标量数据 2、时序数据生成:时间戳、属性(设备ID、测点ID等) 3、将时序数据发送至后端 4、网络不通时缓存到本地,网络恢复后重新发送:产生乱序