一种适合迭代计算的MapReduce优化方法

文档序号:6520372阅读:448来源:国知局
一种适合迭代计算的MapReduce优化方法
【专利摘要】本发明公开了一种适合迭代计算的MapReduce优化方法,是应用在一种Hadoop集群系统中,该集群系统包括一个主节点以及多个从节点,所述方法包括:主节点接收用户提交的多个Hadoop作业,主节点的作业服务进程将作业放入作业队列中,并等待主节点的作业调度器进行作业调度,主节点等待从节点发来的任务请求,并在接收到任务请求后,主节点的作业调度器优先调度本地化任务,如果在发出任务请求的从节点上没有本地化任务,则根据Hadoop作业的任务类型进行预测调度。本发明能够支持传统数据密集型应用,又能够透明高效地支持迭代计算,并分别从动态数据和静态数据两个方面进行研究并实现数据传输量的减少。
【专利说明】一种适合迭代计算的MapReduce优化方法
【技术领域】
[0001]本发明属于并行计算和海量数据处理领域,更具体地,涉及一种适合迭代计算的MapReduce优化方法。
【背景技术】
[0002]进入到21世纪,数据的处理规模越来越大,TB级别的规模越来越常见,甚至出现了 PB级别的规模。这种级别的数据规模远远超出了个人电脑的处理能力。正是这种处理能力的需求促进了并行或分布式计算模型的发展。这种情况下,Google的MapReduce模型应运而生,它是一种流行的大集群环境下数据密集型计算模型。
[0003]MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。概念“Map(映射)”和“Reduce(化简)”,和他们的主要思想,都是从函数式编程语言里借来的,还有从矢量编程语言里借来的特性。他极大地方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上。在这个模型中,所有数据的组织形式是一种〈key ,value)对。编程时,程序员需要做的只是实现Map和Reduce函数。Map函数处理输入〈key, value〉对并输出零个或者若干个键值对,Reduce函数读取Map的中间输出,最终得到零个或若干个结果。MapReduce模型结构遵循相对独立原则,即Map或Reduce之间不存在数据依赖关系O
[0004]MapReduce模型的设计思路让它善于进行批处理模式的计算,譬如日志分析和文本处理等。然而除了这些批处理方式的应用,还存在着基于机器学习或模式识别的应用,典型的有计算机视觉和数据挖掘应用等。在这些应用中,核心算法是基于迭代方式设计的。然而目前的Hadoop (MapReduce模型开源实现)不能透明高效地支持迭代计算,甚至Hadoop的某些特性不适合迭代计算。随着社交网络、计算机视觉、数据挖掘等的发展,这类应用的数据处理规模越来越大。能够有效支持这类应用的并行计算模型的需求越来越大。

【发明内容】

[0005]针对现有技术的以上缺陷或改进需求,本发明提供了 一种适合迭代计算的MapReduce优化方法,其目的在于,在Hadoop的基础上加以改进,既能够支持传统数据密集型应用,又能够透明高效地支持迭代计算,并分别从动态数据和静态数据两个方面进行研究并实现数据传输量的减少。
[0006]为实现上述目的,按照本发明的一个方面,提供了 一种适合迭代计算的MapReduce优化方法,是应用在一种Hadoop集群系统中,该集群系统包括一个主节点以及多个从节点,所述方法包括以下步骤:
[0007](I)主节点接收用户提交的多个Hadoop作业,主节点的作业服务进程将作业放入作业队列中,并等待主节点的作业调度器进行作业调度;
[0008](2)主节点等待从节点发来的任务请求,并在接收到任务请求后,主节点的作业调度器优先调度本地化任务,如果在发出任务请求的从节点上没有本地化任务,则根据Hadoop作业的任务类型进行预测调度,针对计算型任务直接对该Hadoop作业进行调度,针对传输型任务则延迟一定间隔,当总延迟时间间隔达到延迟阈值时才对该Hadoop作业进行调度;
[0009](3)从节点在接收到主节点调度的Hadoop作业的任务后,判断Hadoop作业类型进行不同处理,作业类型分为迭代型和非迭代型两种,针对非迭代型作业按照Hadoop的常规处理方式进行处理,针对迭代型作业,在Map阶段之前增加Map端混洗过程,用于为Map任务读取动态数据,在Reduce阶段,将动态数据进行本地缓存并交由从节点的动态数据缓存组件管理,并在作业处理完毕后将最终的处理结果保存在HDFS中。
[0010]优选地,步骤(2)具体包括以下子步骤:
[0011](2-1)主节点上的作业服务进程监控并等待从节点上的任务服务进程发送来的心跳信息,该心跳信息包括当前从节点的运行信息,具体包括总槽数和当前正在运行的槽数;
[0012](2-2)主节点在接收到从节点发来的心跳信息后,根据该心跳信息计算当前从节点的空闲槽数和整个Hadoop集群系统的平均运行槽数,根据计算的结果判断是否需要向当前从节点分配该作业的任务,如果不需要分配任务,则返回步骤(2-1),否则执行步骤(2-3);
[0013](2-3)设置计数器i=0 ;
[0014](2-4)判断第i个Hadoop作业是否在当前从节点有本地化任务,即当前从节点是否存储有第i个Hadoop作业的输入数据分片(Split),若没有则转入步骤(2-5),若有则转入步骤(2-11);
[0015](2-5)设置i=i+l,并判断i是否等于Hadoop作业的个数,若等于则进入步骤(2-7),否则返回步骤(2-4);
[0016](2-6)设置计数器j=0 ;
[0017](2-7)判断第j个Hadoop作业的任务类型是计算型任务还是传输型任务,若为计算型任务,则进入步骤(2-11),若为传输型任务,则进入步骤(2-8 );
[0018](2-8)将第j个Hadoop作业的任务调度延迟一个心跳时间;
[0019](2-9)判断第j个Hadoop作业任务调度的总延迟时间是否达到一个阈值,若达到,则转入步骤(2-11),否则转入步骤(2-10);
[0020](2-10)设置j=j+l,并判断j是否等于Hadoop作业的个数,若等于则进入步骤(2-12),否则返回步骤(2-1);
[0021](2-11)将第i个Hadoop作业的本地化任务调度到当前从节点,然后过程结束;
[0022](2-12)对第j个Hadoop作业的任务调度到当前从节点,然后过程结束。
[0023]优选地,步骤(2-2)具体为,当前从节点的空闲槽数等于总槽数减去当前正在运行的槽数,整个Hadoop集群系统的平均运行槽数为跟踪进程监控到的所有从节点正在运行的槽数的和除以所有从节点的槽数,如果当前节点的空闲槽数等于0,则不需要分配任务,同时如果当前从节点正在运行的槽数大于整个Hadoop集群系统的平均运行槽数,则不需要分配任务。
[0024]优选地,步骤(3)具体包括以下子步骤:
[0025](3-1)接收主节点调度的Hadoop作业的任务;[0026](3-2)判断任务的作业类型是迭代型作业还是非迭代型作业,如果是迭代型作业则转入步骤(3-3 ),如果是非迭代型作业则转入步骤(3-4 );
[0027](3-3)判断该迭代型作业的任务类型是Map任务还是Reduce任务,如果是Map任务则转入步骤(3-5),如果是Reduce任务则转入步骤(3_9);
[0028](3-4)判断该非迭代型作业的任务类型是Map任务还是Reduce任务,如果是Map任务则转入步骤(3-8),如果是Reduce任务则转入步骤(3_9);
[0029](3-5)判断该迭代型作业是否是第一次运行,如果不是则转入步骤(3-6),如果是则转入步骤(3-7);
[0030](3-6) Map任务进程(Mapper)所在从节点的任务服务进程启动多个数据拷贝线程,通过HTTP方式请求Reduce任务进程所在从节点获取Reduce任务进程计算得到的动态数据文件,然后转入步骤(3-8);
[0031](3-7) Map任务进程读取动态数据初始化值,然后转入步骤(3_8);
[0032](3-8) Hadoop集群系统将作业的输入文件分解成一个个的分片,Map任务进程对分片进行处理,然后转入步骤(3-14);
[0033](3-9)从节点上的Reducer任务进程启动数据拷贝线程,通过HTTP方式请求Map任务进程所在从节点获取Map任务进程的中间输出文件,中间输出文件存储在从节点的本地磁盘中,拷贝过来的文件会先放在内存缓冲区中,多个拷贝文件会根据会合并成最终的大文件,这个大文件按照key排序,然后转入步骤(3-10);
[0034](3-10) Reduce任务进程从得到的大文件中以〈key, iterator〉形式读取记录,并执行Reduce O方法,然后转入步骤(3_11);
[0035](3-11)判断作业类型是迭代型还是非迭代型,如果是迭代型作业,则转入步骤(3-12),如果是非迭代型作业,则转入步骤(3-13);
[0036](3-12)从节点的动态数据缓存组件将Reduce任务进程执行后的结果缓存在内存当中,当缓冲区满时溢出到本地磁盘文件中,然后转入步骤(3-14);
[0037](3-13) Reduce任务进程将执行后的结果写入到HDFS中,然后转入步骤(3_14);
[0038](3-14)任务执行结束,然后返回步骤(3-1)。
[0039]优选地,步骤(3-6)中的动态数据文件由从节点的动态数据缓存组件管理,保存在内存和本地磁盘中;拷贝过来的动态数据也由动态数据缓存组件来管理,同一从节点的多个Map任务进程从从节点本地请求动态数据文件,这些数据将作为Map任务进程需要的动态数据输入。
[0040]优选地,步骤(3-8)中,分片的大小默认为HDFS块大小,块大小通过配置文件配置,Map任务进程将分片分解成Map任务进程需要的〈key, value)形式的记录,执行Map O方法,将执行的结果缓存在内存当中,当缓冲区满时会溢出到磁盘当中,溢出的文件会记录分区的信息,单个溢出文件首先按照分区排序,然后按照key排序;如果有多个溢出文件需要合并成一个大文件,这个过程对多个溢出文件进行归并排序。
[0041]总体而言,通过本发明所构思的以上技术方案与现有技术相比,能够取得下列有益效果:
[0042]( I)任务的数据本地性更好:由于采用了步骤(2),本发明中提出的调度策略相较于延迟调度策略,更好地平衡了任务本地化需求和任务延迟开销,即将Hadoop中的任务(task)概念划分为计算密集型和传输密集型两类,并结合集群网络的负载信息实时地预测延迟时间。这样既能达到提高任务本地化比例,又能有效地降低作业的整体延迟开销。因此本发明有明显的优势。
[0043](2)动态数据传输开销更小:由于采用了步骤(3),本发明提出的动态数据缓存策略极大地降低了读写动态数据带来的集群网络传输开销。理论证明并实验验证,迭代型作业的动态数据传输总量只与任务所在节点数目成正比,并有确切上限,即集群节点数目。因此本发明有明显的优势。
[0044](3)集群在多作业和多用户使用环境下效能更高:在多作业和多用户环境下,集群的网络资源成为集群效率的瓶颈,将会极大地限制集群的使用效能。本发明通过优化Hadoop的网络数据流,降低集群网络传输开销,有效地缓解集群网络负载,减小用户之间及作业之间的网络资源竞争,提高了在多作业和多用户下的集群使用效能。因此本发明有明显的优势。
[0045](4)高效透明地支持迭代计算。相较于传统的Hadoop,本发明既可以支持传统的批处理作业,又可以更好地支持迭代型作业,所以本发明的使用领域更广泛,例如社交网络、计算机视觉、数据挖掘等。因此本发明有明显的优势。
【专利附图】

【附图说明】
[0046]图1是本发明适合迭代计算的MapReduce优化方法的流程图。
[0047]图2是本发明步骤(2)的细化流程图。
[0048]图3是本发明步骤(3)的细化流程图。
【具体实施方式】
[0049]为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
[0050]以下首先对本发明的技术术语进行解释和说明:
[0051]动态数据:迭代计算问题中,一个直接或间接地不断由旧值递推出新值的变量。
[0052]静态数据:迭代计算问题中,不会有任何的改变的数据,一般为算法的原始输入数据。
[0053]计算型任务:任务的计算时间在Map任务的全部处理过程里占主要部分的任务。
[0054]传输型任务:任务的数据传输时间在Map任务的全部处理过程中占主要部分的任务。
[0055]本地化任务:在从节点本地存储有输入数据分片的Map任务。
[0056]延迟调度策略:一种延迟非本地化任务调度的策略。
[0057]本发明的整体思路在于,着眼于多用户和多作业集群环境,通过优化静态数据流和共享数据流来减小集群的网络传输负载。针对静态数据流的优化,本发明主要贡献了一个预测调度算法;针对共享数据流的优化,本发明通过数据缓存策略和增加Map端的shuffle过程来达到目的。[0058]本发明适合迭代计算的MapReduce优化方法是应用在一种Hadoop集群系统中,该集群系统包括一个主(Master )节点以及多个从(Slave)节点,该方法包括以下步骤(如图1所示):
[0059](I)主节点接收用户提交的多个Hadoop作业,主节点的作业服务进程(JobTracker)将作业放入作业队列中,并等待主节点的作业调度器进行作业调度;
[0060](2)主节点等待从节点发来的任务请求,并在接收到任务请求后,主节点的作业调度器优先调度本地化任务,如果在发出任务请求的从节点上没有本地化任务,则根据Hadoop作业的任务类型进行预测调度,针对计算型任务直接对该Hadoop作业进行调度,针对传输型任务则延迟一定间隔,当总延迟时间间隔达到延迟阈值时才对该Hadoop作业进行调度。具体包括以下子步骤(如图2所示):
[0061](2-1)主节点上的作业服务进程监控并等待从节点上的任务服务进程(TaskTracker)发送来的心跳信息,该心跳信息包括当前从节点的运行信息,具体包括总槽(slot)数和当前正在运行的槽数等;
[0062](2-2)主节点在接收到从节点发来的心跳信息后,根据该心跳信息计算当前从节点的空闲槽数和整个Hadoop集群系统的平均运行槽数,根据计算的结果判断是否需要向当前从节点分配该作业的任务,如果不需要分配任务,则返回步骤(2-1),否则执行步骤(2-3);具体而言,当前从节点的空闲槽数等于总槽数减去当前正在运行的槽数,整个Hadoop集群系统的平均运行槽数为跟踪进程监控到的所有从节点正在运行的槽数的和除以所有从节点的槽数;如果当前节点的空闲槽数等于0,则不需要分配任务,同时如果当前从节点正在运行的槽数大于整个Hadoop集群系统的平均运行槽数,则不需要分配任务;
[0063]( 2-3)设置计数器i=0 ;
[0064](2-4)判断第i个Hadoop作业是否在当前从节点有本地化任务,即当前从节点是否存储有第i个Hadoop作业的输入数据分片(Split),若没有则转入步骤(2-5),若有则转入步骤(2-11);
[0065](2-5)设置i=i+l,并判断i是否等于Hadoop作业的个数,若等于则进入步骤(2-7),否则返回步骤(2-4);
[0066](2-6)设置计数器j=0 ;
[0067](2-7)判断第j个Hadoop作业的任务类型是计算型任务还是传输型任务,若为计算型任务,则进入步骤(2-11),若为传输型任务,则进入步骤(2-8 );
[0068](2-8)将第j个Hadoop作业的任务调度延迟一个心跳时间;具体而言,心跳时间为从节点发送心跳信息的时间间隔,具体为3秒;
[0069](2-9)判断第j个Hadoop作业任务调度的总延迟时间是否达到一个阈值,若达到,则转入步骤(2-11),否则转入步骤(2-10);阈值的取值可由集群管理员配置,配置的依据是:当阈值越大,任务的本地化率会越大,但是延迟的开销也会越大;阈值越小,本地化率相对越小,但是延迟的开销也会越小,阈值默认为3分钟;
[0070](2-10)设置j=j+l,并判断j是否等于Hadoop作业的个数,若等于则进入步骤(2-12),否则返回步骤(2-1);
[0071](2-11)将第i个Hadoop作业的本地化任务调度到当前从节点,然后过程结束;
[0072](2-12)对第j个Hadoop作业的任务调度到当前从节点,然后过程结束。[0073]本步骤的优点在于:将任务进行分类,对计算型任务使用默认的方式进行调度,对传输型任务进行预测调度。这样可以既可以提高任务的本地化比例,又可以减小延迟带来的开销。
[0074](3)从节点在接收到主节点调度的Hadoop作业的任务后,判断Hadoop作业类型进行不同处理,作业类型分为迭代型和非迭代型两种,针对非迭代型作业按照Hadoop的常规处理方式进行处理,针对迭代型作业,在Map阶段之前增加了一个Map端混洗(shuffle)过程,用于为Map阶段的任务(即Map任务)读取动态数据,在Reduce阶段,将动态数据进行本地缓存并交由从节点的动态数据缓存组件管理,并在作业处理完毕后将最终的处理结果保存在Hadoop分布式文件系统(Hadoop Distributed File System,简称HDFS)中;本步骤具体包括以下子步骤(如图3所示):
[0075](3-1)接收主节点调度的Hadoop作业的任务;
[0076](3-2)判断任务的作业类型是迭代型作业还是非迭代型作业,如果是迭代型作业则转入步骤(3-3 ),如果是非迭代型作业则转入步骤(3-4 );
[0077](3-3)判断该迭代型作业的任务类型是Map任务还是Reduce任务,如果是Map任务则转入步骤(3-5),如果是Reduce任务则转入步骤(3_9);
[0078](3-4)判断该非迭代型作业的任务类型是Map任务还是Reduce任务,如果是Map任务则转入步骤(3-8),如果是Reduce任务则转入步骤(3_9);
[0079](3-5)判断该迭代型作业是否是第一次运行,如果不是则转入步骤(3-6),如果是则转入步骤(3-7);
[0080](3-6) Map任务进程(Mapper)所在从节点的任务服务进程启动多个数据拷贝线程,通过HTTP方式请求Reduce任务进程(Reducer)所在从节点获取Reduce任务进程计算得到的动态数据文件,然后转入步骤(3-8);这些动态数据文件由从节点的动态数据缓存组件管理,保存在内存和本地磁盘中;拷贝过来的动态数据也由动态数据缓存组件来管理,同一从节点的多个Map任务进程从从节点本地请求动态数据文件,这些数据将作为Map任务进程需要的动态数据输入;
[0081]本子步骤的优点在于:1,Reduce阶段后的动态数据保存在本次,减少了写入到HDFS带来的开销;2,由Map任务进程所在的从节点请求Reduce阶段后的动态数据,并保存在Map任务进程的从节点的本地,Map任务进程从从节点本地请求数据,这样大大地减少了动态数据的网络传输量。
[0082](3-7) Map任务进程读取动态数据初始化值,然后转入步骤(3_8);简单而言,迭代型作业需要并产生一些动态数据,这个数据在第一次作业执行时是需要由用户提供该动态数据的初始化值;
[0083](3-8) Hadoop集群系统将作业的输入文件分解成一个个的分片,Map任务进程对分片进行处理,然后转入步骤(3-14);具体而言,分片的大小默认为HDFS块大小,块大小通过配置文件配置,Map任务进程将分片分解成Map任务进程需要的〈key, value)形式的记录,执行Map O方法,将执行的结果缓存在内存当中,当缓冲区满时会溢出到磁盘当中;溢出的文件会记录分区的信息,单个溢出文件首先按照分区排序,然后按照key排序;如果有多个溢出文件需要合并成一个大文件,这个过程对多个溢出文件进行归并排序;
[0084](3-9)从节点上的Reducer任务进程启动数据拷贝线程,通过HTTP方式请求Map任务进程所在从节点获取Map任务进程的中间输出文件,中间输出文件存储在从节点的本地磁盘中,拷贝过来的文件会先放在内存缓冲区中,多个拷贝文件会根据会合并成最终的大文件,这个大文件按照key排序,然后转入步骤(3-10);
[0085](3-10) Reduce任务进程从得到的大文件中以〈key, iterator〉形式读取记录,并执行Reduce O方法,然后转入步骤(3_11);
[0086](3-11)判断作业类型是迭代型还是非迭代型,如果是迭代型作业,则转入步骤(3-12),如果是非迭代型作业,则转入步骤(3-13);
[0087](3-12)从节点的动态数据缓存组件将Reduce任务进程执行后的结果缓存在内存当中,当缓冲区满时溢出到本地磁盘文件中,然后转入步骤(3-14);
[0088](3-13) Reduce任务进程将执行后的结果写入到HDFS中,然后转入步骤(3_14);
[0089](3-14)任务执行结束,然后返回步骤(3-1)。
[0090]实例:
[0091]为了验证本发明的可行性和有效性,在下列表1所示的实验配置环境下执行编写的计算机程序,对发明进行测试,测试结果如下列表2和表3所示:
[0092]表1:实验配置环境
【权利要求】
1.一种适合迭代计算的MapReduce优化方法,是应用在一种Hadoop集群系统中,该集群系统包括一个主节点以及多个从节点,其特征在于,所述方法包括以下步骤: (1)主节点接收用户提交的多个Hadoop作业,主节点的作业服务进程将作业放入作业队列中,并等待主节点的作业调度器进行作业调度; (2)主节点等待从节点发来的任务请求,并在接收到任务请求后,主节点的作业调度器优先调度本地化任务,如果在发出任务请求的从节点上没有本地化任务,则根据Hadoop作业的任务类型进行预测调度,针对计算型任务直接对该Hadoop作业进行调度,针对传输型任务则延迟一定间隔,当总延迟时间间隔达到延迟阈值时才对该Hadoop作业进行调度; (3)从节点在接收到主节点调度的Hadoop作业的任务后,判断Hadoop作业类型进行不同处理,作业类型分为迭代型和非迭代型两种,针对非迭代型作业按照Hadoop的常规处理方式进行处理,针对迭代型作业,在Map阶段之前增加Map端混洗过程,用于为Map任务读取动态数据,在Reduce阶段,将动态数据进行本地缓存并交由从节点的动态数据缓存组件管理,并在作业处理完毕后将最终的处理结果保存在HDFS中。
2.根据权利要求1所述的MapReduce优化方法,其特征在于,步骤(2)具体包括以下子步骤: (2-1)主节点上的作业服务进程监控并等待从节点上的任务服务进程发送来的心跳信息,该心跳信息包括当前从节点的运行信息,具体包括总槽数和当前正在运行的槽数; (2-2)主节点在接收到从节点发来的心跳信息后,根据该心跳信息计算当前从节点的空闲槽数和整个Hadoop集群系统的平均运行槽数,根据计算的结果判断是否需要向当前从节点分配该作业的任务,如果不需要分配任务,则返回步骤(2-1),否则执行步骤(2-3); (2-3)设置计数器i=0; (2-4)判断第i个Hadoop作业是否在当前从节点有本地化任务,即当前从节点是否存储有第i个Hadoop作业的输入数据分片(Split),若没有则转入步骤(2-5),若有则转入步骤(2-11); (2-5)设置i=i+l,并判断i是否等于Hadoop作业的个数,若等于则进入步骤(2_7),否则返回步骤(2-4); (2-6)设置计数器j=0; (2-7)判断第j个Hadoop作业的任务类型是计算型任务还是传输型任务,若为计算型任务,则进入步骤(2-11),若为传输型任务,则进入步骤(2-8 ); (2-8)将第j个Hadoop作业的任务调度延迟一个心跳时间; (2-9)判断第j个Hadoop作业任务调度的总延迟时间是否达到一个阈值,若达到,则转入步骤(2-11),否则转入步骤(2-10); (2-10)设置j=j+l,并判断j是否等于Hadoop作业的个数,若等于则进入步骤(2_12),否则返回步骤(2-1); (2-11)将第i个Hadoop作业的本地化任务调度到当前从节点,然后过程结束; (2-12)对第j个Hadoop作业的任务调度到当前从节点,然后过程结束。
3.根据权利要求2所述的MapReduce优化方法,其特征在于,步骤(2_2)具体为,当前从节点的空闲槽数等于总槽数减去当前正在运行的槽数,整个Hadoop集群系统的平均运行槽数为跟踪进程监控到的所有从节点正在运行的槽数的和除以所有从节点的槽数,如果当前节点的空闲槽数等于O,则不需要分配任务,同时如果当前从节点正在运行的槽数大于整个Hadoop集群系统的平均运行槽数,则不需要分配任务。
4.根据权利要求1所述的MapReduce优化方法,其特征在于,步骤(3)具体包括以下子步骤: (3-1)接收主节点调度的Hadoop作业的任务; (3-2)判断任务的作业类型是迭代型作业还是非迭代型作业,如果是迭代型作业则转入步骤(3-3 ),如果是非迭代型作业则转入步骤(3-4); (3-3)判断该迭代型作业的任务类型是Map任务还是Reduce任务,如果是Map任务则转入步骤(3-5),如果是Reduce任务则转入步骤(3-9); (3-4)判断该非迭代型作业的任务类型是Map任务还是Reduce任务,如果是Map任务则转入步骤(3-8),如果是Reduce任务则转入步骤(3_9); (3-5)判断该迭代型作业是否是第一次运行,如果不是则转入步骤(3-6),如果是则转入步骤(3-7); (3-6) Map任务进程(Mapper)所在从节点的任务服务进程启动多个数据拷贝线程,通过HTTP方式请求Reduce任务进程所在从节点获取Reduce任务进程计算得到的动态数据文件,然后转入步骤(3-8); (3-7) Map任务进程读取动态数据初始化值,然后转入步骤(3-8); (3-8) Hadoop集群系统将作业的输入文件分解成一个个的分片,Map任务进程对分片进行处理,然后转入步骤(3-14); (3-9)从节点上的Reducer任务进程启动数据拷贝线程,通过HTTP方式请求Map任务进程所在从节点获取Map任务进程的中间输出文件,中间输出文件存储在从节点的本地磁盘中,拷贝过来的文件会先放在内存缓冲区中,多个拷贝文件会根据会合并成最终的大文件,这个大文件按照key排序,然后转入步骤(3-10); (3-10) Reduce任务进程从得到的大文件中以〈key, iterator〉形式读取记录,并执行Reduce ()方法,然后转入步骤(3-11); (3-11)判断作业类型是迭代型还是非迭代型,如果是迭代型作业,则转入步骤(3-12),如果是非迭代型作业,则转入步骤(3-13); (3-12)从节点的动态数据缓存组件将Reduce任务进程执行后的结果缓存在内存当中,当缓冲区满时溢出到本地磁盘文件中,然后转入步骤(3-14); (3-13) Reduce任务进程将执行后的结果写入到HDFS中,然后转入步骤(3_14); (3-14)任务执行结束,然后返回步骤(3-1)。
5.根据权利要求4所述的MapReduce优化方法,其特征在于,步骤(3_6)中的动态数据文件由从节点的动态数据缓存组件管理,保存在内存和本地磁盘中;拷贝过来的动态数据也由动态数据缓存组件来管理,同一从节点的多个Map任务进程从从节点本地请求动态数据文件,这些数据将作为Map任务进程需要的动态数据输入。
6.根据权利要求4所述的MapReduce优化方法,其特征在于,步骤(3-8)中,分片的大小默认为HDFS块大小,块大小通过配置文件配置,Map任务进程将分片分解成Map任务进程需要的〈key,value)形式的记录,执行MapO方法,将执行的结果缓存在内存当中,当缓冲区满时会溢出到磁盘当中,溢出的文件会记录分区的信息,单个溢出文件首先按照分区排序,然后按照key排序; 如果有多个溢出文件需要合并成一个大文件,这个过程对多个溢出文件进行归并排序。
【文档编号】G06F9/50GK103617087SQ201310600745
【公开日】2014年3月5日 申请日期:2013年11月25日 优先权日:2013年11月25日
【发明者】金海 , 郑然 , 余根茂, 章勤, 朱磊 申请人:华中科技大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1