论文部分内容阅读
MapReduce是Google开发的一种并行分布式计算模型,已在搜索和处理海量数据领域得到了广泛的应用,Hadoop是它的开源实现。MapReduce编程模型因为其良好的可扩展性、高可用性以及容错性而被广泛地运用于不同的领域,并且都获得很多好评。但是,由于MapReduce分布式编程框架自身的局限性,使得该模型进行表连接任务特别是多表连接任务时存在一定的不足。本文首先针对基于MapReduce框架的通用二路连接算法RSJ的不足提出了一种基于DistributedCache的改进优化算法。优化算法的思想是在进行RSJ算法进行表关联之前,将其中一个表的连接属性的值提取出来并且经过Bit-map压缩成较小的“背景”数据存放到一个小的文件中,然后经由DistributedCache机制传输到各个节点上。再进行RSJ算法实现二个表连接时,在Map阶段可以通过读取“背景”数据来过滤掉另一表中不满足连接条件的元组,从而减少mapper输出的数据来达到优化的效果。之后,为了解决多路连接过程中频繁出现中间结果集而带来巨大的I/O开销,本文采用了一种新的重定向mapper端输出策略——“一对多分区”策略,该策略的好处是:能够使得多个连接数据集中满足连接条件的元素都可以一次性发送到同一个reducer进行连接处理,从而实现一个MapReduce作业就能够完成多表连接操作。并且基于该思想对原MapReduce框架进行了改进。最后,在搭建的Hadoop并行计算平台上进行试验,以验证上述两种优化方案相对于之前的是否提高连接任务的执行效率。