本节书摘来自华章出版社《大数据管理概论》一书中的第1章,第1.4节,作者 孟小峰,更多章节内容可以访问“华章计算机”公众号查看
1.4 大数据的处理模式
无论是工业界还是学术界,都已经广泛使用高级集群编程模型来处理日益增长的数据,如MapReduce。这些系统将分布式编程简化为自动提供位置感知(locality-aware)调度、容错以及负载均衡,使得大量用户能够在商用集群上分析庞大的数据集。
大多数现有的集群计算系统都是基于非循环数据流模型(acyclic data f?low model),从稳定的物理存储(如分布式文件系统)中加载记录,一组确定性操作构成一个有向无环图(Directed Acyclic Graph,DAG),记录被传入这个DAG,然后写回稳定存储。通过这个DAG数据流图,运行时自动完成调度工作及故障恢复。
尽管非循环数据流是一种很强大的抽象方法,但有些应用仍然无法使用这种方式描述,包括:①机器学习和图应用中常用的迭代算法(每一步对数据执行相似的函数);②交互式数据挖掘工具(用户反复查询一个数据子集)。此外基于数据流的架构也不明确支持这种处理,所以需要将数据输出到磁盘,然后在每次查询时重新加载,从而带来较大的开销。
当前大数据分析处理系统的发展趋势主要有两个方向:一种是以Hadoop和MapReduce为代表的批处理(batch processing)系统,另一种是为各种特定应用开发的流处理(stream processing)系统,批处理是先存储后处理(store-then-process),而流处理则是直接处理(straight-through processing)。
1.4.1 批处理
Google公司于2004年提出的MapReduce编程模型是最具代表性的批处理模式。一个完整的MapReduce过程如图1-2所示。
MapReduce模型首先将用户的原始数据源进行分块,然后分别交给不同的Map任务去处理。Map任务从输入中解析出键/值对集合,然后对这些集合执行用户自行定义的Map函数得到中间结果,并将该结果写入本地硬盘。Reduce任务从硬盘上读取数据之后,会根据key值进行排序,将具有相同key值的数据组织在一起。最后用户自定义的Reduce函数会作用于这些排好序的结果并输出最终结果。
从MapReduce的处理过程我们可以看出,MapReduce的核心设计思想在于:①将问题分而治之;②把计算推至数据而不是把数据推至计算,有效避免数据传输过程中产生的大量通信开销。MapReduce模型简单,且现实中很多问题都可用MapReduce模型来表示。因此该模型公开后立刻受到极大的关注,并在生物信息学、文本挖掘等领域得到广泛应用。
无论是批处理还是流处理,都是大数据处理的可行思路。大数据的应用类型很多,在实际的大数据处理中,常常并不是简单地只使用其中的某一种,而是将二者结合起来。互联网是大数据最重要的来源之一,很多互联网公司根据处理时间的要求将自己的业务划分为在线(online)、近线(nearline)和离线(off?line),比如著名的职业社交网站LinkedIn。这种划分方式是按处理所耗时间来划分的。其中在线的处理时间一般为秒级,甚至是毫秒级,因此通常采用上面所说的流处理;离线的处理时间可以以天为基本单位,基本采用批处理方式,这种方式可以最大限度地利用系统
I/O;近线的处理时间一般为分钟级或者是小时级,对处理模型并没有特别的要求,可以根据需求灵活选择,但在实际中多采用批处理模式。
1.4.2 流处理
流处理的基本理念是数据的价值会随着时间的流逝而不断减少,因此尽可能快地对最新的数据作出分析并给出结果是所有流数据处理模式的共同目标。需要采用流数据处理的大数据应用场景主要有网页点击数的实时统计、传感器网络和金融中的高频交易等。
流处理的处理模式将数据视为流,源源不断的数据组成了数据流。当新的数据到来时就立刻处理并返回所需的结果。图1-3是流处理中基本的数据流模型。
数据的实时处理是一个极具挑战性的工作,数据流本身具有持续达到、速度快且规模巨大等特点。为了确保分布式数据流的实时处理,需要对数据流的传输和模型进行说明。①数据流传输。为保证实时、完整且稳定地将数据流传输到处理系统,一般可通过消息队列和网络Socket传输等方法完成,以保证将数据发送至每个物理节点,为数据处理提供保障。利用消息队列的方式进行数据采集和传输是较为常用的一种方法,常见的消息队列产品有Facebook的Scribe、LinkedIn的Kafka和Cloudera的Flume等。
②数据流模型。在查询处理过程中,由于数据流的来源不同,需要针对不同的数据源制订不同的数据样式。一般来讲,通用的数据流管理系统支持关系型数据模型,数据定义语言是基于关系型的原子类型,便于以属性和元组的形式划分和发送数据;针对特殊领域的数据流管理系统,可根据领域数据的特点设计基于对象类型的复合数据类型。