论文部分内容阅读
Map Reduce作为一个并行处理的计算模型,因为其高容错性,高易用性,以及高扩展性在大规模分布式数据处理中得到广泛的应用。Map Reduce可以处理关系数据库中一些操作,像是选择,聚合,和投影等。但是二元操作中,像是连接,笛卡尔乘积,和集合操作,却很难在Map Reduce中实现。Map Reduce是支持的对大规模单数据集的处理。但是,对于多数据集的处理,Map Reduce去没有提供相应的支持。因此在Map Reduce框架中,连接操作一直是没有有效的实现方式。虽然在Hadoop中提供了实现Map Reduce的连接算法,但是这些实现方式连接效率都不高。因此,对于改进基于Map Reduce连接查询处理算法成为急需解决的问题。本文首先针对基于Map Reduce Reduce Side的二路连接算法的不足提出了一种基于索引的分区改进优化算法,优化算法的思想是,在进行连接之前,将两个数据表按照连接属性进行分区,再对其中一个较小的表的分区生成一个索引文件,并存储到HDFS(Hadoop Distributed File System)上。在Map阶段读入大数据集的分片信息,通过对索引文件的搜索,可以找到与当前大数据集对应的小数据集的分区文件,并把它加载到内存中,与大数据集分片在Map端进行连接。从而提高内存的利用率。其次,通过Map Reduce多表连接的传统实现算法的缺点的分析,提出了一种改进分区的策略,使key/value对能够通过改进分区传送到多个Reduce节点,从而在满足条件的节点执行连接,来减少Map Reduce Job执行的数量。而且在分区之前,采用Bit-Map对多个表进行过滤操作,来减少传输代价,并提高多表连接的效率。最后,通过大量的实验,针对本文提出的优化方法进行了验证。通过对实验结果分析,可看出本文所提出的基于Map Reduce模型的两表及多表连接优化策略能够大量的减少shuffle阶段的开销,提高了系统执行连接任务的效率,提高了系统性能。