基于Hadoop系统的MapReduce数据流优化

  1 Hadoop管道改进思想

  在Hadoop系统的实现中,Map端的输出数据首先被溢写入本地磁盘,当本机任务完成后通知JobTracker,然后Reduce端在得到 JobTracker的通知后会发出HTTP请求,利用复制的方式从相应的Map端拉回其输出。这样的方式只能等该Map任务完成后才能开始执行 Reduce任务,并且Map任务和Reduce任务的执行是分离的。

  我们的改进思想是使Map任务和Reduce任务能够以管道的方式执行,即Map任务开始产生输出后直接发送给相应的Reduce任务,这需要在用户提交作业后JobTracker就分配相应的Map任务和Reduce任务,并将每个Map任务的位置发送给Reduce任务。每个Reduce任务启动后就联系每个任务并打开一个Socket。当每个Map输出一产生后Mapper便决定发送的分区(Reduce任务)并通过适合的Socket直接发送。

  Reduce任务接收从每个Map任务收到的管道数据并将其存储在内存缓冲区中,在需要时将已排好序的缓冲区内容写到磁盘。一旦Reduce任务得知每个 Map任务均已完成,它执行已排序内容的最终合并,然后调用用户自定义的Reduce函数,将输出写入HDFS。

  2 面临问题及解决方法

  在以上的改进思想中面临以下几个实际问题,我们将对其进行分析并提出解决方法。

  (1) Hadoop系统可能没有最够可用任务槽来调度作业的每个任务。

  由于任务槽的限制,可能部分Reduce还没有被调度,则Map输出无法直接发送给它。改进方法为将这部分Map的输出写入磁盘,当Reduce任务被分配任务槽后,就像Hadoop系统一样从Map任务复制数据。

  (2) 打开每个Map任务和Reduce任务之间的Socket需要大量的TCP连接。

  大量的TCP将占用过多的网络带宽,容易造成网络堵塞。为了减少并发TCP连接数,每个Reducer可以被配置为从有限数量的Mapper以管道方式传送数据,其余的数据按Hadoop系统的传统方式从Mapper拉回。

  (3) 调用Map函数和将输出写入管道Socket使用相同的线程。

  这可能将导致如下情况,由于Reducer过度使用而造成网络I/O堵塞,则Mapper也无法做有用的工作。改进方法为以单独线程运行Map函数,将其输出存储到内存缓冲区,然后由另一线程定期发送缓冲区内容到管道Reducer端。

  (4) Map任务急切发送产生的数据,阻止了Combiner的使用,并将一些排序工作从Mapper移动到Reducer。

  Map任务一产生数据便使用管道方式传送给对应的Reduce而没有机会应用Combiner函数,会增大网络流量。同时Map的排序过程更多的转移到 Reduce任务会Reduce的响应时间并带来很大的系统开销,因为通常Map任务的数量远远大于Reduce任务。改进方法为修改内存缓冲区设计,不直接发送缓冲区内容给Reducer,而是等到缓冲区增长到阈值大小后应用Combiner函数,按分区和key值进行排序后将内容溢写入磁盘。第二个线程监测溢写文件并将其以管道方式发送给Reducer。如果Reducer能够赶上Mapper并且网络不是瓶颈,则溢写文件在产生后马上发送给 Reducer。否则溢写文件将逐渐增加,Mapper定期对其应用Combiner函数将多个溢写文件合并成一个单一的大型文件。

  3 改进系统的实现

  UC Berkeley的Tyson Condie等人基于MapReduce Online论文实现了Hadoop Online Prototype(HOP)[13]系统,它除了能够实现作业内Mapper到Reducer的管道之外,还利用“快照”技术实现了作业间 Reducer到Mapper的管道执行。HOP还支持连续查询,这使得MapReduce程序能够被用于事件监测和流处理的等实时应用。同时,HOP保留了Hadoop的容错特性,并能够运行未修改的用户定义的MapReduce程序。

  HOP实现的数据流与Hadoop系统的对比如下图所示:

  在Hadoop-0.19.2中,org.apache.hadoop.mapred包实现了Hadoop MapReduce思想,HOP增加了org.apache.hadoop.mapred.bufmanager包来管理Map和Reduce任务的输入和输出。其中主要包含的类如下表所示:

  使用HOP系统在伪分布式上能够成功运行MapReduce作业,但是在集群中部署后执行WordCount应用程序时,当Map阶段完成后Reduce阶段完成25%时,作业长时间停滞无法继续执行,显示如下图所示的错误:

  我们参考HOP程序对Hadoop-0.19.2进行修改,并使用Ant编译,成功后执行情况与HOP相同,同样在集群情况下执行 MapReduce作业过程中停滞。分析原因,如果HOP系统本身的实现不存在问题,那可能是实验集群的配置或者网络存在问题,但是具体原因一直没有发现并解决。

  基于Hadoop系统优化的测试实验使用HOP系统进行,能够使Map过程和Reduce过程管道执行。根据MapReduce Online论文中所示,作者在Amazon EC2上使用60节点集群执行了性能测试实验,对从维基百科提取的5.5GB数据进行排序,结果如下图所示:

  实验结果显示HOP比Hadoop更有优势,大大减少了作业完成时间,具有更高的系统利用率。

  但是由于在集群中执行HOP出现错误,为了验证其优化效果,使用伪分布式执行WordCount程序,通过与Hadoop系统上执行原始程序进行对比,得到两者的执行时间分别为314秒(HOP)和266秒(Hadoop),两者的Map过程和Reduce过程分别如下图1和下图2所示。通过对比可以发现,HOP系统确实实现了Map过程和Reduce过程的管道执行,但是在作业执行时间上HOP系统更长,这于上图的对比分析图有差异。具体可能由 HOP 系统实现、集群数量及配置、处理数据量等多方面原因导致。但是HOP这种改进思想还是很值得学习和借鉴。

  

【推荐阅读】:1.在云中使用 MapReduce 和负载平衡

2.Hadoop技术中心

时间: 2024-08-03 16:25:48

基于Hadoop系统的MapReduce数据流优化的相关文章

陈冠诚:Hadoop系统的软硬件协同优化

文章讲的是陈冠诚:Hadoop系统的软硬件协同优化,2013年11月22-23日,作为国内唯一专注于Hadoop技术与应用分享的大规模行业盛会,2013 Hadoop中国技术峰会(China Hadoop Summit 2013)于北京福朋喜来登集团酒店隆重举行.来自国内外各行业领域的近千名CIO.CTO.架构师.IT经理.咨询顾问.工程师.Hadoop技术爱好者,以及从事Hadoop研究与推广的IT厂商和技术专家将共襄盛举. ▲IT168专题报道:http://www.it168.com/re

解读:基于Hadoop的大规模数据处理系统

Hadoop的组成部分 Hadoop是Google的MapReduce一个Java实现.MapReduce是一种简化的分布式编程模式,让程序自动分布到一个由普通机器组成的超大集群上并发执行. Hadoop主要由HDFS.MapReduce和HBase等组成.具体的组成如下图: Hadoop的组成图 1. Hadoop HDFS是Google GFS存储系统的开源实现,主要应用场景是作为并行计算环境(MapReduce)的基础组件,同时也是BigTable(如HBase. HyperTable)的

基于Hadoop的云盘系统客户端技术难点之一 上传和下载效率优化

作者:张子良  声明:版权所有,转载请注明出处 一.概述 基于任何平台实现的云盘系统,面临的首要的技术问题就是客户端上传和下载效率优化问题.基于Hadoop实现的云盘系统,受到Hadoop文件读写机制的影响,采用Hadoop提供的API进行HDFS文件系统访问,文件读取时默认是顺序.逐block读取:写入时是顺序写入. 二.读写机制 首先来看文件读取机制:尽管DataNode实现了文件存储空间的水平扩展和多副本机制,但是针对单个具体文件的读取,Hadoop默认的API接口并没有提供多DataNo

基于Hadoop MapReduce的分布式数据流聚类算法研究

基于Hadoop MapReduce的分布式数据流聚类算法研究 蔡斌雷 任家东 朱世伟 郭芹 随着数据流规模的持续增大,现有基于网格的聚类算法对数据流的聚类效果不好,不能实时发现任意形状的簇,也不能及时删除数据流中的噪声点.文章提出了一种Hadoop平台环境下基于网格密度的分布式数据流聚类算法(PGDC-Stream),利于基于Hadoop的MapReduce框架对数据流进行阶段化的并行聚类分析,实时发现数据流中任意形状的簇,定义检测周期和密度阈值函数并及时删除数据流中的噪声点.算法基于网格密度

基于Hadoop云盘系统1:上传和下载效率优化

 一.读写机制 首先来看文件读取机制:尽管DataNode实现了文件存储空间的水平扩展和多副本机制,但是针对单个具体文件的读取,Hadoop默认的API接口并没有提供多DataNode的并行读取机制.基于Hadoop提供的API接口实现的云盘客户端也自然面临同样的问题.Hadoop的文件读取流程如下图所示: 使用HDFS提供的客户端开发库,向远程的Namenode发起RPC请求: Namenode会视情况返回文件的部分或者全部block列表,对于每个block,Namenode都会返回有该blo

《Hadoop MapReduce性能优化》一导读

前 言 Hadoop MapReduce性能优化 MapReduce是一个重要的并行处理模型,用于大规模.数据密集型应用,比如数据挖掘和Web索引.Hadoop作为MapReduce的一个开源实现,广泛用于支持对响应时间要求很严苛的集群计算作业. 多数MapReduce程序的开发是以数据分析为目的的,这通常需要花费很长的时间.许多公司正在用Hadoop在更大的数据集上做更高级的数据分析,当然这更加需要运行时间的保障.运行效率,尤其是MapReduce的I/O开销,仍然是需要解决的问题.经验表明,

基于Hadoop开发网络云盘系统客户端界面设计初稿

前言: 本文是<基于Hadoop开发网络云盘系统架构设计方案>的第二篇,针对界面原型原本考虑有两个方案:1.类windows模式,文件夹.文件方式,操作习惯完全按照Windows方式进行,提供右键菜单管理命令.2.浏览列表式,提供常规界面按钮式命令.本文采用的方式是文件清单列表式,至于第一种方式,另列专题进行说明. 一.界面原型 二.设计说明 连接管理:建立连接.断开连接.设置连接参数 文件操作:浏览文件.上传文件.下载文件.删除文件.导入文件(批量).刷新列表 用户管理:查看用户信息.修改用

《Hadoop MapReduce性能优化》一2.4 用Apache Ambari监测Hadoop

2.4 用Apache Ambari监测Hadoop Hadoop MapReduce性能优化 Apache Ambari项目 简化了Hadoop管理和集群监测,其主要目标是在多实例环境下简化Hadoop集群的部署与管理. Ambari提供了一组直观.易用的监测Hadoop集群的工具,隐藏了Hadoop框架的复杂性.它通过向管理员暴露RESTful API来允许与其他系统集成.而且,Ambari依赖Ganglia和Nagios的度量结果,在需要时(如节点故障.磁盘空间不足等)使用报警系统发送电子

《Hadoop MapReduce性能优化》一2.1 研究Hadoop参数

2.1 研究Hadoop参数 Hadoop MapReduce性能优化 正如第1章中提到的那样,有很多因素会对Hadoop MapReduce性能产生影响.一般说来,与工作负载相关的Hadoop性能优化需要关注以下3个主要方面:系统硬件.系统软件,以及Hadoop基础设施组件的配置和调优/优化. 需要指出的是,Hadoop被归类为高扩展性解决方案,但却不足以归类为高性能集群解决方案.系统管理员可以通过各种配置选项来配置和调优Hadoop集群.性能配置参数主要关注CPU利用率.内存占用情况.磁盘I