更新时间:2022-01-22 23:26:34
无论是工业界还是学术界,都已经广泛使用高级集群编程模型来处理日益增长的数据,如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)。
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;近线的处理时间一般为分钟级或者是小时级,对处理模型并没有特别的要求,可以根据需求灵活选择,但在实际中多采用批处理模式。
流处理的基本理念是数据的价值会随着时间的流逝而不断减少,因此尽可能快地对最新的数据作出分析并给出结果是所有流数据处理模式的共同目标。需要采用流数据处理的大数据应用场景主要有网页点击数的实时统计、传感器网络和金融中的高频交易等。