数据密集型可扩展计算:数据库前瞻 DISC: A DB perspective

时间:2010-04-12   来源:   网友评论:0   人气: 310 作者:

随着web2.0技术和数据托管服务的迅猛发展,生活中的各个领域,包括航空影像、医疗记录、在线交易、社会网络等产生的大量数据为现有的数据密集型计算带来了全新的问题和挑战。存储于磁盘列阵中的数据以年均60%的速率增长 [1] 。2006年全球数据存储需求为1610亿GB,预计2010年将达到9880亿GB。如何有效的管理和存储如此巨额的数据为学术界和工业界都带来了巨大的挑战。随着过去一段时间内对并行计算的研究,传统的并行计算模型使得系统的架构和实现都变得更为复杂。例如,一个简单的字数统计程序也需要运用成熟的分布式机制去处理调度、合作、失败恢复等问题。因此,传统的并行机制是不太可能满足现有的数据应用需求的。我们也能很明显的看到,传统的数据处理和计算方式成本高,效率低,从而无法适应目前一些应用的动态需求,如处理不断变化的数据集以及数据密集型计算等。

        目前工业界使用的一个比较理想的方法是建立一个大规模的计算机系统,它由成千上万个甚至上百万个低端计算机(称之为节点)连接局域网组成。通过这种途径,无论是数据并行(将数据拆分到大量的节点中处理)还是计算并行(并行的处理一系列的操作)都可以满足现有用户和应用的需要。在这种环境下,资源可以动态的扩展和分配,数据也会被相应的重新分配到扩展的硬件资源中处理,从而使得计算框架变得简单有效。

        MapReduce [3] 作为一种全新的软件构架,用于处理计算机群中的大规模数据集。MapReduce被证实是一种强大的技术,因为它简化了大规模分布式计算的实现和配置,同时它使用了更加简单的容错机制,并保证了企业网络中大量分布式计算的一致性。它通过各节点的并行计算有效的处理大规模的数据集。在MapReduce中,程序员需要提供他们自己的map和reduce函数。尽管它的结构简单,但现实世界中的很多问题其实都是可以用模型表示出来的,例如建立倒排索引和计算PageRank(网页级别)。事实上,这种通过将巨额数据在成千上万个节点并行运算以达到大型运算能力的方式已经对现有的系统设计原理和传统的系统经济带来挑战。

        对于一个典型的操作,MapReduce处理存储于DFS(分布式文件系统)中的数据,例如Google的GFS(Google文件系统)和Yahoo的HDFS(Hadoop分布式文件系统)[2]。在DFS中,数据被分割成同等大小的数据块(通常是128M),并且这些数据快被分布到计算机群中的不同的节点中。对于某个特定的任务,MapReduce创建一系列的mapper和reducer。Mapper处理本地数据块并产生一系列的键-值对(key-value pair)。这些键-值对接着被reducer进一步处理。Reducer将属于同一个键的值结合起来并产生最终的结果。虽然Map-reduce的思路是简单的,但它已经解决了大量的现实问题,例如建立倒排索引和计算网页级别。MapReduce一开始被设计为处理非结构化的数据。为了将它应用于关系型数据,它需要有效的支持关系型操作,如联结(join)操作。将这种结构应用于关系型数据的研究最早在 [4] 中被提出,它定义了一个merge函数去实现数据库中的关系操作。

        解决联结操作的一个直接的方法是模拟排序合并联结算法(sort-merge join)。对于数据表R联结S,mapper从DFS中同时装载两个数据表中的数据,并根据联结属性排序。然螅葑频絩educer中。当mapping这个过程结束之后,每一个reducer处理R和S的子数据集并使用本地的联结算法(如nestedloop join)对这两个表的子集进行联结操作。对于每个大的数据基表,将数据从mapper传到reducer会产生大量的开销,从而增加了数据处理的成本。根据 [4] 的研究,减小从mapper到reducer的中间数据集的大小会极大的提高性能。因此,减少网络开销(mapper到reducer的数据传输开销),可以提高联结操作的效率。目前的问题是我们如何能将研究的“优化策略”加入到现有的MapReduce架构中并且不影响其结构的简单性,在今后我们将会看到更多的研究成果。


 

文章评论