基于MapReduce框架重分区连接优化研究.docVIP

基于MapReduce框架重分区连接优化研究.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于MapReduce框架重分区连接优化研究

基于MapReduce框架重分区连接优化研究   摘 要: 重分区连接查询是基于传统MapReduce框架的最常用的连接查询算法之一。在讨论基于传统MapReduce框架的标准重分区连接算法及减小数据缓存的改进算法的基础上,提出了在数据文件分块阶段进行预筛选以精简MapReduce框架中处理的数据量的方法。该方法能有效减少框架内部各个阶段处理的数据总量,进一步压缩缓存的使用空间并降低不同阶段之间数据传输的网络开销。   关键词: MapReduce; 连接查询; 重分区连接; 预筛选   中图分类号:TP312 文献标志码:A 文章编号:1006-8228(2016)04-09-03   0 引言   近年来,随着移动互联网、电子商务及社交媒体快速发展,网络的数据信息量呈指数型增长。为了能更快更好地分析处理这些庞大的数据信息,很多企业选择将数据迁移到价格相对低廉且容错性能较强的云环境[1]中进行处理。MapReduce框架[2]是云计算最为核心的技术之一。作为海量数据的并行处理平台,MapReduce编程模型[3]简单,隐藏了并发、容错、分布式计算和负载平衡等复杂繁琐的细节,并具有较高的可扩展性和容错性,现已广泛应用于海量数据的分析和处理领域。   但在MapReduce框架中,连接查询运算仍然过程复杂、工序繁琐,同时面临数据倾斜、分布式环境数据传输等问题,效率较低。如果能提高MapReduce的连接查询效率,则可进一步提高数据分析效率和用户体验满意度。   本文就现有的基于传统MapReduce框架的重分区连接查询方法进行深入探讨和研究,并进一步讨论可能的优化策略。   1 传统MapReduce框架实现机制   传统MapReduce框架将所有面向海量数据的计算划分成两个阶段:Map阶段和Reduce阶段,每个阶段可由用户自行定义其处理函数,且都以(K,V)二元组的形式进行输入和输出。但由于大部分Mapper与Reducer并非执行在相同节点上,因此MapReduce框架需要一个介于Map函数和Reduce函数之间的Shuffle过程来实现它们之间的数据整理和传输。以下是传统MapReduce框架的具体工作步骤[4]。   ⑴ 准备工作   MapReduce框架将大量输入数据分割成M个大小固定的块。   ⑵ Map阶段   Mapper读取分配给它的块信息,并从中分离出各条记录。   Mapper从每条记录中抽象出二元组(K1,V1),并传递给用户自定义的Map函数执行生成二元组(K1,V1)。由此块信息经由Map阶段处理得到一个输出序列{(K1,V1),(K2,V2),…,(Kn,Vn)},同时这些数据将被存入缓存。   ⑶ MapReduce框架的Shuffle过程   (a) 为了使Reduce函数获得有序的输入信息,Shuffle过程负责将Map阶段的输出序列进行排序分组归并,使得具有相同键值K的数据V集中在一起,形成(K,list(V)),且list(V)中的值按V进行排序。因为数据量巨大,所以该阶段可能使用外部排序。   (b) 将处理好的(K,list(V))发送给Reduce函数。   ⑷ Reduce阶段   执行Reduce函数,生成最终的执行结果(K,V),并作为输出结果写入文件。   2 重分区连接查询算法及其优化探讨   在数据爆炸的今天,有些大型的互联网公司每天需要利用高达TB甚至PB级别的日志信息来分析数据,以获取有利于其发展的统计信息。但其中大部分操作都是对巨型数据表(例如用户表User和日志表Log)进行连接查询操作:   SELECT User.Col1, User.Col2, …, User.Coln,   Log.Col1, Log.Col2, …, Log.Colm   FROM User, Log   WHERE User.UserID=Log.UserID AND CUser AND CLog   其中CUser表示仅和表User相关的筛选条件,CLog表示仅和表Log相关的筛选条件,User.Col1,User.Col2,…,User.Coln表示表User中的n个列(表User的列数≥n),Log.Col1,Log.Col2,…,Log.Colm表示表Log中的m个列(表Log的列数≥m)。假设若表User 共有mU行,每行的数据量为lenU字节;表Log共有mL行,每行的数据量为lenL字节,则执行该连接查询将面临为(mU×lenU)×(mL×lenL)级别的巨大数据量。   在此我们讨论基于传统MapReduce框架的最常用的连接查询算法之一――重分区连接查询算法[5]。该算法类似于并发数据库管理系统中的分块归并

文档评论(0)

317960162 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档