物联网与大数据(四)大数据技术 & 物联网操作系统
前言
关于物联网与大数据的分享已经迎来最后一期,回顾之前的内容:我们在物联网与大数据(一)中介绍了物联网与大数据的含义、背景;在从物联网看大数据中探讨了物联网形成大数据的主要环节;在从大数据看物联网中了解了物联网如何促进大数据的发展与深入。
今天我们走进最后一期,在本章中我们将为大家讲解大数据最核心的两方面技术:存储和计算;同时基于上述几章节的分析基础,我们还将分析从物联网的小数据形成大数据,以及如何通过一个物联网操作系统发挥每个阶段数据价值。
大数据技术
大数据技术是指对于大规模数据具备处理能力的各种数据相关的技术。它们都以分布式计算为基础,具备横向扩展能力,以应对大规模数据量的处理需求。图1是一个简化的大数据架构图。
图1 大数据参考架构图
各种来源的数据,包括结构化数据和非结构化数据(以及半结构化数据),形成大数据仓库,并对常用数据建立索引;而大数据计算涉及到实时计算、离线计算和流式计算,以及相应的算法库;大数据运营主要包括数据质量管理、元数据管理(也称为数据字典)和主数据管理,往往也会涉及到数据安全管理。
大数据的存储形式包括分布式文件系统,关系型数据库集群,以及key-value存储等。大数据可以为企业信息系统、业务系统提供数据能力,还可以为企业或组织提供决策支持或者大屏展示等独特的功能。本节接下来介绍大数据最核心的两方面技术:存储和计算。
4.1大数据存储
在现代计算机系统中,最基础的存储抽象是内存和文件系统。单机上的内存和文件系统,受限于单机硬件和操作系统的限制,比如32位总线的系统受限于232=4GB内存空间,而64位系统的空间则大了很多。当前主流的服务器,内存配置8GB、16GB、32GB、64GB不等,硬盘配置从几百GB到8TB不等。普通量级的数据存储,用单机可以完成,但对于大数据,需要通过集群的方式,利用分布式存储技术来完成。
在用于大数据的存储系统中,首先是分布式文件系统,基本的思路是,用主从结构的模式,将文件系统建立在多台机器上。文件系统对外通过主节点(Master Node)暴露管理功能和接口能力,真正存储的数据在数据节点(Data Node)上;客户读写数据可以直接与数据节点进行网络通信,避免主节点成为网络瓶颈,但所有的读写操作都通过主节点来调度和安排。文件系统的数据可以有多备份,以避免单个节点失效以后造成数据丢失(容错性),同时多备份也可以用于在节点之间进行负载均衡。图2(a)显示了分布式文件系统架构示意图。
大数据的访问模式,往往在一侧大量地持续添加数据,另一侧以数据流的方式顺序地读取数据进行解析,少量地有随机读写的需求。像搜索引擎、日志、物联网上传数据,都符合这种特征。因此,这种主从结构的分布式文件系统,有较大的优化空间。这也是当前大数据领域主要使用的文件系统存储技术。并且,这一类技术可以应用在当前市场上相对廉价的PC服务器上,成为大数据存储的主流。比较典型的有Google的GFS(Google File System)、Hadoop HDFS(Hadoop Distributed File System),后者是用Java语言编写的开源软件,其适应性和使用极为广泛。
图2 基础的大数据存储技术
另一类大数据存储是关系型数据库集群。传统的关系型数据库系统包含了存储引擎和SQL(Structured Query Language,结构化查询语言)服务两个最重要的部分,其中存储引擎负责数据的存储和读取,SQL服务包括SQL解析、缓存、索引计算等。单机版本的关系型数据库受限于单机存储空间的大小,而集群版本的关系型数据库则可以处理大规模的数据集。存储引擎是突破单机存储能力的关键,它可支持多数据备份,可以在多个SQL服务实例之间共享数据等。图2(b)显示了关系型数据库集群的架构示意图。典型的集群数据库有Oracle RAC和MySQL Cluster,后者是开源软件,可支持PC服务器的多种操作传统版本。
除了文件系统和关系型数据库这两种经典的存储形式以外,大数据往往还包含各种NoSQL形式的数据(对应于非结构化或半结构化数据),以下是一些常用的存储形式:
1、列存储,列存储保存的也是表状数据,但与关系型数据库不同的是,列存储按列进行存储,适合于稀疏的大表或者半结构化的数据,比较典型的是Google的BigTable和Hadoop HBase,其中HBase也是开源的,实际的数据存储在HDFS中。
2、Key-value存储,key和value成对存储,可通过key快速地获取到value。典型的Key-value数据库是MongoDB和Redis。MongoDB是一个以(key, value)作为基本元素的开源数据库,支持类似于关系型数据的索引和查询语言。Redis是一个基于内存来存储key和value的开源软件,也支持将数据持久化到磁盘中。
3、文档存储,针对非结构化或半结构化数据类型的数据库。可以对某些字段建立索引,实现类似于关系型数据库的能力。典型的是MongoDB,将文档或对象当作key-value中的value来存储,不限类型;MongoDB支持集群部署:副本集Replica Set模式支持高可用性和故障恢复;分片sharding模式支持水平扩展和负载均衡。
最后,特别值得一提的是时序数据库,这是指专门用于处理带时间戳信息的数据,譬如日志数据和物联网设备产生的数据。这一类时序数据的特点是:每条记录带有时间戳;基本上都是插入操作,不需要更新操作;数据量大,每秒钟成千上万条记录,甚至更多。数据处理模式也有特点:对最新的数据有查询需求,比如查询一个设备最新的状态;按时间区间进行统计,比如每分钟/每小时/每天的平均值、最大值、最小值等;获取某一时间段的数据,特别是异常点附近的数据。在功能上,用关系型数据库是可以完成这些操作的,但性能和成本并不合适,甚至很差。而时序数据库专门针对这样的数据和应用场景来设计,可以很好地符合性能和容量的需求。比较典型的时序数据库有InfluxDB和TimescaleDB、OpenTSDB等。
4.2大数据计算
对于大数据的计算,粗略地可以分为三类:离线计算、实时计算和流式计算。离线计算是指在已入库的数据上进行的计算,比如对于每天订单和商品的多维度分析;实时计算是指,根据客户端的请求,该请求往往带有一组参数信息,系统接到请求后,结合已有的数据,进行实时计算,并将结果返回给客户;流式计算是针对数据流的计算,以近乎实时的方式进行,并将结果反应到业务中。流式计算也可以看作是实时计算的一种。
在大数据基础上的分布式计算,有一个基本的理念是,让计算的代码靠近数据,甚至在同一台机器上,而不是让代码集中在一批机器上,再通过网络拉数据。可以想象,一个计算任务,其代码在数据集群中走了一圈,就得到计算结果了,所以,流动的是代码和中间结果,原始数据尽量不流动。在大数据计算领域,当前广泛使用的一个计算架构是Google提出来的MapReduce,其原理如图3所示。
图3 MapReduce原理示意图
分散在集群中的数据通过一个map函数先参与第一阶段的计算,得到中间结果,并存放在本地磁盘上,然后第二阶段执行reduce函数,将这些结果合并到一个或多个输出文件中。Map-Reduce是一种分布式计算的抽象,Google用这种抽象架构不仅实现了搜索引擎中的分析和计算任务,而且也用于Google的各种业务计算任务,包括图计算、机器学习、聚类问题等。并且,随着Hadoop在HDFS存储的基础上提供了MapReduce开源实现,MapReduce当前已被广泛应用于大数据集的各种分析计算中,成为大数据计算的一个利器。
这里简单介绍一下Hadoop开源项目,它包含HDFS和MapReduce:一个用于大数据存储,另一个针对大数据的计算。在此基础上,Hadoop还有一些子项目,譬如前面提到过的用于列存储的HBase。另一个值得一提的子项目是Hive,它是一个数据仓库工具,建立在HDFS和MapReduce基础上,将SQL语句转化为MapReduce任务来运行,从而使得在大数据集上进行查询和分析变得极为方便。Hive最初由Facebook开发,后来归到Apache软件基金会。
除了Hadoop MapReduce,Apache Spark也是一个专为处理大规模数据而设计的通用计算引擎。与MapReduce相比,Spark更为高效,它通过内存来保存中间结果,并且不依赖于HDFS。Spark可以完成各种计算任务,包括SQL查询、图计算和机器学习等。
以上介绍的这些计算引擎针对的是离线计算,即对于已经存储在分布式系统中的数据所做的计算。相对应地,实时计算依赖于一个请求本身所携带的数据,再加上少量已经处理过的数据,结合起来进行实时计算再返回结果。实时计算涉及的数据规模一般较小,通常在一台机器的内存中就可以进行。然而,它可能要引用一些分散的数据,比如HDFS集群中的数据,或者关系型数据库中的记录,等等。为了实时性,对这些数据的引用,需要通过索引,或者专门的索引集群,以及缓存技术/内存数据库等,来达到快速获取数据的目的。图4显示了离线计算、实时计算(以及流式计算)示意图。
图4 离线计算、实时计算、流式计算示意图
ElasticSearch是一个开源的分布式全文检索引擎,它可以近乎实时地存储、检索数据,可扩展到上百台服务器,实现PB级别的结构化或非结构化数据的快速检索。它提供RESTful API来隐藏内部集群检索过程的复杂性,用起来简单高效。Github、*、SoundCloud等使用ElasticSearch来实现大数据量的搜索服务。
除了离线计算和实时计算,还有流式计算(见图4),它针对的是持续产生的数据,比如不断生成的订单、网站或App的持续的用户访问数据,需要以近乎实时的方式进行分析,并反应到当前的业务逻辑中。比如智能推荐模型可以迅速地捕捉到用户的行为偏好、对业务订单进行监控等。常见的提供流式计算能力的开源软件有Spark streaming、Storm、Kafka等。与流式计算相对应,离线计算也被称为批量计算。
最后介绍一种特殊的大数据处理——视频数据结构化,即,将视频数据中的结构信息提取出来。通过时空分割、对象识别、深度学习等算法,对视频内容进行分析,提取出视频中有意义的信息,以方便进行检索。当前比较有用的结构信息,包括与人相关的特征(比如面部精确特征、戴口罩、衣服、性别等)、与车辆相关的特征(车牌号码、车身颜色、车辆类型、品牌等)、人骑车的特征(戴头盔、车上人数、车牌、颜色等),甚至目标人或车的行动轨迹等。有了这些结构信息,一方面可以长期在线存储这些关键信息(其数据量比原始视频数据小很多);另一方面,利用结构化或半结构化的大数据技术,可以满足很多业务需求,比如安防和交通管理,从而更好地发挥视频数据的价值。视频数据及结构化所用到的技术,可采用云+边+端的多级架构,并结合AIoT、边缘计算以及GPU集群等计算能力,这样可形成完整的视频大数据方案。
小数据与大数据:物联网操作系统
正如图5所示,从物联网设备到大数据之间通常有一个小数据节点,这符合大多数物联网场景中的数据流逻辑。即使物联网设备直连云服务平台,也有一个数据聚少成多的环节,所以,首先要解决物联网设备数据汇聚的技术方案。小数据与大数据虽然在数据量级、业务价值、场景关联性方面有一些显著的差异,但是所用到的数据技术原理类似,并且许多技术组件是相通的。
潘爱民,公众号:指令集智能科技小数据 vs. 大数据
图5 物联网数据模型
指令集智能物联网操作系统(iSysCore OS)正是针对物联网场景的系统软件,它可以作为一个支撑小数据节点的数据平台,将物联网设备产生的异构数据汇聚起来,形成一个数据仓库。图6是指令集智能操作系统的数据架构图。
图6 iSysCore-OS数据架构图
指令集iSysCore OS内含的数据仓库,包含了来自于物联网设备的数据,以及业务相关的数据,有结构化数据和非结构化数据,存放在关系型数据库、时序数据库、key-value数据库和文件系统中。对应用层有三个功能组件:智能分析套件提供了便捷的数据处理能力,可实现快速的可视化展示;数据资产管控平台,可处理跨业务系统的数据整合;通用数据管理平台,提供元数据、指标库、数据规范、数据同步、数据质量等常用的数据能力。
在iSysCore OS中,物联网数据通过驱动进入到ISC-TWIN模块,然后提交给数据仓库,或者直接供上层模块使用;业务系统或信息系统中的数据通过ETL模块进入到主数据中,供上层模块使用。特别值得一提的是,在通用数据管理平台中有一个同步服务,它可以将物联网数据或者主数据的全部或部分,同步到大数据平台,实现从小数据到大数据的汇集过程。
在实际场景中,物联网设备并不会直接连接到大数据平台。合理的模式是,物联网设备首先连接到一个基础业务系统,经过初步的业务处理以后,相关的数据才有可能进入到大数据平台。图7显示了两个典型的从物联网设备形成大数据的场景:(a)设备先连接到通过iSysCore OS提供的云服务系统,相关的数据再通过iSysCore OS的数据同步服务到达大数据平台;(b)iSysCore OS部署在本地环境中,多个实例将数据汇聚到云端的大数据平台。图7(b)这种架构适合应用于大型园区场景或者智慧城市场景。
图7 从iSysCore OS到大数据
在小数据环节,物联网设备产生的数据往往有较强的业务含义(或者说,与场景关联性较强),所以,iSysCore OS提供的数据管理能力以及针对上层应用的数据处理能力尤其重要。而一旦汇聚到大数据平台以后,则可以通过统计、挖掘等算法形成更高层次的大数据价值。因此,从物联网设备到大数据之间隔着一个或多个小数据节点,若从系统实现的角度而言,从物联网设备到大数据平台之间隔着一个物联网操作系统。
结束语
物联网与大数据是两个既相对独立,又有关联的技术领域。回顾整个物联网与大数据的分享:
我们首先分析多种不同类型的物联网设备,以及它们产生数据的情形,以此来理解从物联网设备如何形成大数据。其次,阐述了大数据的概念,并且从数据模型的角度来深入理解物联网的价值。然后介绍了大数据最核心的两方面技术:存储和计算。最后,分析了从物联网的小数据,到形成大数据,通过一个物联网操作系统可以很好地发挥每个阶段的数据价值。
希望本系列的文章,能够让你对物联网、大数据有一个系统化的理解。