- 图解物联网
- NTT DATA集团 (日)河村雅人等
- 2099字
- 2020-08-29 01:56:24
2.4 处理数据
2.4.1 处理服务器的作用
很显然,处理服务器就是处理接收到的数据的地方。“处理”是一个抽象的词语,例如保存数据,以及转换数据以使其看上去更易懂,还有从多台传感器的数据中发现新的数据,这些都是处理。使用者的目的不同,处理服务器的内容也各异。不过说到数据的处理方法,它可以归纳成以下4种:数据分析、数据加工、数据保存以及向设备发出指令(图2.20)。
图2.20 数据的处理
关于数据的分析和加工,有两种典型的处理方式,分别叫作“批处理”和“流处理”。首先就来说说这个“批处理”和“流处理”。
2.4.2 批处理
批处理的方法是隔一段时间就分批处理一次积攒的数据。一般情况下是先把数据存入数据库里,隔一段时间就从数据库获取数据,执行处理。批处理的重点在于要在规定时间内处理所有数据。因此,数据的数量越多,执行处理的机器性能就得越好。
今后设备的数量将会增加,这一点在第一章已经解释过了。人们需要处理从数量庞大的设备发来的传感器数据和图像等大型数据,这被称为“大数据”。不过,通过使用一种叫作分布式处理平台的平台软件,就能高效地处理数兆、数千兆这种大型数据了。具有代表性的分布式处理平台包括Hadoop和Spark。
Apache Hadoop
Apache Hadoop是一个对大规模数据进行分布式处理的开源框架。Hadoop有一种叫作MapReduce的机制,用来高效处理数据。MapReduce是一种专门用于在分布式环境下高效处理数据的机制,它基本由Map、Shuffle、Reduce这3种处理构成(图2.21)。
图2.21 通过Hadoop MapReduce执行批处理
Hadoop对于每个被称为节点的服务器执行MapReduce,并统计结果。首先是分割数据,这里的数据指的是各个服务器的处理对象。最初负责分割数据的是Map。Map对于每条数据反复执行同一项处理,通过Map而发生变更的数据会被移送到下一项处理,即Shuffle。Shuffle会跨Hadoop的节点来把同种类的数据进行分类。最后,Reduce把分类好的数据汇总。
也就是说,MapReduce是一种类似于收集硬币,按种类给硬币分类后再点数的方法。用Hadoop执行处理的时候,为了能用MapReduce实现处理内容,使用者需要下一番工夫。
另外,Hadoop还有一种叫分布式文件系统(HDFS)的机制,用于在分布式环境下运行Hadoop。HDFS把数据分割并存入多个磁盘里,读取数据时,就从多个磁盘里同时读取分割好的数据。这样一来,跟从一台磁盘里读出巨大的文件相比,这种方法更能高速地进行读取。如上所述,如果使用MapReduce和HDFS这两种机制,Hadoop就能高速处理巨型数据。
Apache Spark
Apache Spark也和Hadoop一样,是一个分布式处理大规模数据的开源框架。Spark用一种叫作RDD(Resilient Distributed Dataset,弹性分布数据集)的数据结构来处理数据(图2.22)。
图2.22 通过Spark执行批处理
RDD能够把数据放在内存上,不经过磁盘访问也能处理数据。而且RDD使用的内存不能被写入,所以要在新的内存上展开处理结果。通过保持内存之间的关系,就能从必要的时间点开始计算,即使再次计算也不用从头算起。根据这些条件,Spark在反复处理同一数据时(如机器学习等),就能非常高速地运行了。
对物联网而言,传输的数据都是一些像传感器数据、语音、图像这种比较大的数据。批处理能够存储这些数据,然后导出当天的设备使用情况,以及通过图像处理从拍摄的图像来调查环境的变化。随着设备的增加,想必今后这样的大型数据会越来越多。因此,重要的是学会在批处理中使用我们介绍的分布式处理平台。
2.4.3 流处理
批处理是把数据攒起来,一次性进行处理的方法。相对而言,流处理是不保存数据,按照到达处理服务器的顺序对数据依次进行处理。
想实时对数据做出反应时,流处理是一个很有效的处理方法。因为批处理是把数据积攒之后隔一段时间进行处理,所以从数据到达之后到处理完毕为止,会出现时间延迟。因此,流处理这种把到达的数据逐次进行处理的思路就变得很重要了。此外,流处理基本上是不会保存数据的。只要是被使用过的数据,如果没必要保存,就会直接丢弃。
举个例子,假设有个系统,这个系统会对道路上行驶的车辆的当前位置和车辆雨刷的运转情况进行搜集。
仅凭搜集那些雨刷正在运转的车辆的当前位置,就能够实时确定哪片地区正在下雨。此时,使用者可能想保存下过雨的地区的数据,这时候只要保存处理结果就好,所以原来的传感器数据可以丢掉不要,流处理正适用于这种情况。用流处理平台就能实现流处理。
流处理和批处理一样,也准备了框架。在这里就给大家介绍一下Apache Spark和Apache Storm这两个框架。
Spark Streaming
Spark Streaming是作为Apache Spark(在“批处理”部分介绍过)的库被公开的。通过Spark Streaming,就能够把Apache Spark拿到流处理中来使用(图2.23)。
图2.23 通过Spark Streaming执行流处理
Spark Streaming是用RDD分割数据行的,它通过对分割的数据执行小批量的批处理来实现流处理。输入的数据会被转换成一种叫作DStream的细且连续的RDD。先对一个RDD执行Spark的批处理,将其转换成别的RDD,然后按顺序对所有RDD反复执行上述处理来实现流处理。
Apache Storm
Apache Storm是用于实现流处理的框架,结构如图2.24所示。
图2.24 Apache Storm的结构
用Storm处理的数据叫作Tuple,这个Tuple的流程叫作Streams。
Storm的处理过程由Spout和Bolts两项处理构成,这种结构叫作Topology。Spout从其他处理接收到数据的时候,Storm处理就开始了。Spout把接收到的数据分割成Tuple,然后将其流入Topology来生成Streams,这就形成了流处理的入口。接下来,Bolts接收Spout以及从其他Bolts输出的Streams,并以Tuple为单位处理收到的Streams,然后将其作为新的Streams输出。可以自由组合Bolts之间的连接,也可以根据想执行的处理自由组合Topology,还可以随意决定Tuple使用的数据类型,以及使用JSON等数据格式。