随着越来越多的事物连接到物联网, 与 IoT 设备相关联的数据量及其生成的数据量 (包括设备状态, 元数据和传感器读数) 呈指数级增长. 如果 IoT 解决方案要实现价值, 那么管理和了解这些数据至关重要.
针对 IoT 数据应用数据分析, 以生成仪表板, 报告, 警报和视图, 进而监控连接设备的运行状况和状态, 并提供传感器读数的可视性. 使用分析技术识别模式, 检测异常情况并预测数据的结果, 以及通过应用规则来触发操作.
在本文中, 我将介绍一些处理 IoT 数据的方法, 包括存储数据, 处理和分析数据以及应用规则.
存储数据
IoT 设备通常具有有限的数据存储能力, 因此 IoT 设备所获取的大部分数据需要使用 通信协议 (如 MQTT 或 CoAP)进行通信, 然后由 IoT 服务摄取以进一步处理和存储. IoT 应用程序和服务正在存储和访问比以往任何时候都要多的数据.
处理增加的数据量并不是管理存储的 IoT 数据的唯一考虑因素. 其他考虑因素包括:
处理异构数据
转换, 聚集和整合数据, 以便在跟踪数据来源的同时, 为分析做好准备
保护数据以保持数据的完整性和隐私
选择存储技术以确保高性能, 可靠性, 灵活性和可扩展性与成本之间的平衡.
阅读更多 用于存储 IoT 数据的提示 .
异构数据
IoT 设备捕获的数据是以混合数据格式生成的, 包括结构化数据, 半结构化数据和非结构化数据. 这些数据可能包括离散传感器读数, 设备运行状况元数据或者图像或视频的大文件. 由于 IoT 数据并不统一, 因此存储 IoT 数据的方法并不是一成不变的.
转换数据
数据通常在设备或设备网关上进行转换以执行规范化. 如果无序地接收了事件, 那么可能需要对事件进行重新排序, 并且如果数据具有时效性, 那么可能会丢弃过期数据.
此时通常也会附加有关捕获数据的传感器的来源信息, 以及数据的位置和时间戳记. 出于调试和历史分析目的, 存储原始数据是很有用的, 但是如果数据需要多次分析, 那么存储预处理的数据将避免重复的昂贵转换.
一定要转换您的数据, 然后选择要传输和存储的数据, 以节省带宽和存储成本.
保护数据
必须安全地传输和存储数据, 以便使用安全协议和加密来保持数据完整性和隐私. 在 IBM developerWorks 上的 "通过网络保护 IoT 数据" 中了解更多信息.
数据存储技术
由于 IoT 解决方案较复杂, 因此您需要结合使用数据存储策略.
在设备和网关上处理临时存储在边缘的数据时所使用的数据存储技术需要在物理上保持强健(以经受住设备所安装在的恶劣操作环境), 而且还要快速可靠, 以便在向上游发送数据之前, 可以快速准确地执行数据的预处理. 设备数据存储可以利用下一代非易失性 RAM (NVRAM) 技术, 如 3D X Point 和 ReRAM, 速度比 NAND 闪存快达 1000 倍, 但功耗比 DRAM 低.
从生成 IoT 数据的设备传输 IoT 数据后, 就可以将 IoT 数据存储在云中, 本地或二者的混合.
数据可能用于不同的目的. 以归档而非实时分析为目的的数据可以使用不同的方法来存储, 这些方法作为分析用存储方法的补充. 数据访问必须快速, 并且支持查询离散的实时数据分析. 此数据采用的存储技术应支持并发读取和写入, 高度可用, 并且包含可进行配置以优化数据访问和查询性能的索引.
大容量的归档数据可以存储在云存储器中, 可能访问速度较慢, 但是具有成本较低且有弹性的优点, 因此将随着数据量的增加而进行扩展. 对像视频这样的大文件格式数据的访问通常是连续的, 因此可以使用对象存储器 (如 OpenStack Object Storage, 称为 Swift ) 来存储该数据, 或者直接写入 Hadoop HDFS 或 IBM GPFS 等分布式文件系统. 数据仓库工具 (如 Apache Hive ) 可以帮助管理对存储在分布式存储器上的数据进行读取, 写入和访问.
通常对 IoT 事件数据采用的数据存储技术包括 NoSQL 数据库和时间序列数据库.
NoSQL 数据库是用于分析的 IoT 数据的热门选择, 因为它们支持高吞吐量和低延迟, 并且其无模式方法很灵活, 允许动态添加新类型的数据. 用于 IoT 数据的开放式源代码 NoSQL 数据库包括 Couchbase , Apache Cassandra , Apache CouchDB , MongoDB 和 Apache HBase (用于 Hadoop 的 NoSQL 数据库). 托管的 NoSQL 云存储解决方案包括 IBM Cloudant 数据库和 AWS DynamoDB .
时间序列数据库可以是关系数据库或基于 NoSQL 方法的数据库. 它们专为对基于时间的数据建立索引和进行查询而设计, 这对于大多数 IoT 传感器数据来说是非常理想的, 而这些数据在本质上是暂时的. 用于 IoT 数据的时间序列数据库包括 InfluxDB , OpenTSB , Riak , Prometheus 和 Graphite .
在该 IBM developerWorks 教程 "设置基本 Apache Cassandra 架构" 中了解有关 Apache Cassandra 的更多信息.
分析数据
必须对 IoT 数据进行分析才能使其产生价值, 但手动处理 IoT 设备产生的大量数据是不实际的. 因此, 大多数 IoT 解决方案都依赖于自动化分析.
使用工具对 IoT 数据 (包括设备状态数据和传感器读数) 进行分析, 以生成描述性报告, 通过仪表板和数据可视化来呈现数据, 以及触发警报和操作.
可以使用许多不同的开放式源代码分析框架或 IoT 平台向您的 IoT 解决方案提供 IoT 数据处理和分析. 可以在收到数据或通过批量处理历史数据时实时执行分析. 分析方法包括分布式分析, 实时分析, 边缘分析和机器学习.
分布式分析
在 IoT 系统中, 分析大规模的数据时必需分布式分析, 特别是在处理太大而导致单个节点无法存储或处理的历史数据时. 数据可以分布在多个数据库中; 例如, 设备数据可能会在每个时间段 (例如每小时, 每天或每月) 分配到每个设备的数据库中, 如连接到存储 IoT 数据的 Cloudant NoSQL 数据库的 IBM Watson IoT Historian Service . 分析可能涉及汇总分布在多个地理位置中的结果. 您将需要采用存储驱动程序或分析框架来桥接分布式存储器和计算基础架构, 以便跨分布式数据库进行无缝查询.
处理分布式数据特别值得注意的是来自 Hadoop 社区的框架生态系统. Apache Hadoop 是一个使用 MapReduce 引擎处理分布式数据的批处理框架. 这是第一批启动大数据分析的开放式源代码框架之一. Hadoop 是与时效性无关的历史 IoT 数据分析的理想之选, 例如对整套数据执行分析并在稍后生成结果.
实时分析
针对大量 IoT 数据流的分析通常是实时执行的, 特别是如果数据流包含具有时效性的数据 (数据批处理结果生成太晚将导致该结果无用) 或任何其他需要考虑延迟的应用程序.
实时分析也是时间序列数据的理想之选, 因为与批处理不同, 实时分析工具通常支持控制时间窗口分析和计算滚动指标, 例如随时间推移跟踪每小时平均值, 而不是计算整个数据集中的单个平均值.
为实时流分析设计的框架包括 Apache Storm 和 Apache Samza (通常与 Kafka 和 Hadoop YARN 一起使用). 可用于流和批处理分析的混合引擎包括 Apache Apex , Apache Spark 和 Apache Flink . Apache Kafka 充当摄取层, 可位于 Spark,Storm 或 Hadoop 等引擎的顶部. 有关在这些开放式源代码框架之间进行选择的指南, 请阅读 为高性能且经济有效的流处理应用程序选择合适的平台 .
边缘分析
IoT 分析通常不适用于原始设备数据. 在分析之前, 对数据进行预处理以过滤掉重复数据, 或者重新排序, 汇总或规范化数据. 这种处理通常发生在采集点, IoT 设备本身或聚集数据的网关设备上, 以确定哪些数据需要向上游发送.
将在网络边缘应用的分析 (尽可能靠近生成数据的设备) 称为边缘分析. IBM Watson IoT Platform 包含 边缘分析 SDK . Apache Edgent (先前称为 Quarks)是旨在 IoT 设备和网关上使用的开放源代码的, 轻量级的嵌入式分析引擎的一个示例. 分析也在 Linux Foundation 的 EdgeX Foundry (开放式源代码 IoT 边缘计算框架)的路线图上.
边缘分析具有低延迟性, 并且减少了带宽需求, 因为不需要从设备传输太多数据. 但是, 受限设备的处理能力有限, 因此大多数 IoT 解决方案使用包括边缘分析和上游分析的混合方法.
机器学习
使用传统的数理统计模型进行分析可以提供价值, 因为它们可用于跟踪目标, 创建报告和洞察, 预测趋势以及创建用于预测和优化特定结果的模拟. 例如, 您可以预测应用特定操作的结果, 预测给定设备部分的故障时间或根据成本或性能优化 IoT 系统的配置. 但是, 当应用于包含许多随时间变化的变量的动态数据时, 以及当您不知道要查找哪些因素, 或要更改哪些变量以达到期望的结果 (如降低成本或提高效率) 时, 统计分析模型的价值将降低. 在这些情况下, 可以应用从数据中学习的机器学习算法, 而不是使用统计模型.
机器学习可以应用于历史或实时数据. 机器学习技术可用于识别模式, 识别关键变量及其之间的关系, 以自动创建和优化分析模型, 然后将这些模型用于模拟或制定决策. 机器学习方法比静态统计分析模型具有优势, 随着新数据的进入, 可以随时间推移改进模型, 从而优化结果.
机器学习方法包括:
神经网络. 神经网络是以数据为输入并生成决策或结果作为输出的节点网络. 用数据训练神经网络以生成期望的结果.
深度学习. 深度学习类似于一个神经网络, 但在输入和输出之间有更多的隐藏层.
Long Short Term Memory (LSTM). LSTM 网络使用反馈循环来包含一些内存, 以便在处理时间序列数据时为其提供一些上下文.
阅读 将 SystemML 和 Apache Spark 应用于 IoT 数据以跟踪零售客户行为和改善客户体验 这一用例.
观看 使用深度学习进行 IoT 数据分析 主旨来了解有关这些不同方法的更多信息, 或者在该 developerWorks 教程中了解有关 使用深度学习检测 IoT 时间序列数据中的异常情况 的更多信息.
针对 IoT 的独立开放式源代码深度学习框架包括 TensorFlow , PyTorch , Theano 或 Cognitive Toolkit CNTK . 还可以使用在 Apache Spark 上运行的机器学习工具, 例如 H20 和 DeepLearning4J 深度学习引擎和 SystemML .
通过应用规则来处理数据
规则引擎使用通过分析从 IoT 数据中发现的洞察, 并应用规则以生成准确且可重复的决策. 可采用各种方法对 IoT 实施规则:
决策树 . 使用树 (即, 基于分层图的结构) 表示决策点. 树结构中的每个叶子与一个决策对应.
随着可以跟踪的变量状态数量增加, 决策树呈指数增长.
数据流图 . 数据流图 (也称为管道) 用于表示功能之间的数据依赖关系和数据流. 构建在数据流图上的框架示例为 TensorFlow .
复杂事件处理 (CEP) .CEP 通常用于处理时间序列数据, 并且非常适合将规则应用于实时传感器数据.
推理引擎 实施 If-then 样式规则.
业务流程管理 . 在传统 BPM 系统的上下文中, 通常会将规则实施为决策表.
无论引擎如何实施, 规则都会对条件进行编码, 这些条件用于触发自动调整系统以解决问题, 最大限度提高性能或优化成本的操作.
开放式源代码分析和规则引擎可以自管理; 但是, 许多 IoT 平台提供基于开放式源代码产品的托管分析和规则解决方案, 如 IBM Analytics for Apache Spark .IoT 平台通常还包含定制的集成分析解决方案, 包括批处理和实时分析以及机器学习和规则. 包含这些功能的 IoT 平台的一些示例包括:
Oracle Edge Analytics 和 Stream Analytics
Azure Stream Analytics
AWS IoT
Google Cloud Dataflow
IBM Watson IoT Platform Analytics
结束语
我已经提供有关理解 IoT 数据含义的工具和方法的概述, 包括管理数据, 使用分析获取洞察以及应用规则来执行操作.
IoT 数据分析对于 互连城市 等大型复杂 IoT 系统的管理至关重要, 这些 IoT 系统使用分析进行需求预测, 并在响应中应用规则以调整服务, 如控制自适应交通信号或管理智能照明.
IoT 数据分析也会在较小型的 IoT 系统中提高效率. 例如, 对于 工业设备 或 汽车 车队的预测性维护, 安装在资产上的传感器数据用于预测何时需要维护, 这将允许在最佳时间安排维护, 提高可靠性, 避免不必要的维护开支以及减少停机时间和生产力损失.
来源: http://www.ibm.com/developerworks/cn/iot/library/iot-lp301-iot-manage-data/index.html