处理数据的方法和装置与流程

文档序号:11279343阅读:242来源:国知局
处理数据的方法和装置与流程

本发明涉及数据处理领域,并且更具体地,涉及一种处理数据的方法和装置。



背景技术:

在大数据处理的并行计算技术中,映射化简mapreduce系统具有相当重要的作用。mapreduce的数据处理流程可以划分为两个阶段:映射map阶段和化简reduce阶段。一般地,从map的输出到reduce的输入的过程为又可以称为混洗shuffle阶段。

图1是现有技术中mapreduce系统的工作原理图。如图1所示,在mapreduce系统中,一个作业(job)会被分成大量的任务并行执行。首先是map阶段,每个map任务会从分布式文件系统(hadoopdistributedfilesystem)读取一段数据(即,分片)作为输入经map函数处理后输出存储到内存缓冲区(buffer)中,每个map任务都有自己独立的buffer,并且buffer的大小已经预先定义。每个经map函数输出的中间数据在其对应的buffer中进行分区(partition)、归并(merge)、排序(sort)和溢写(spill)操作后,最终会生成一个输出文件(outputfile)和输出文件的索引文件(indexfile),其中,索引文件用于记录输出文件的存储位置信息。这样,当多个并行的map任务结束后,就会有多个输出文件和与多个输出文件一一对应的索引文件。接下来,作业执行从map阶段进入reduce阶段。

在reduce阶段,reduce任务通过索引文件从map阶段生成的多个输出文件中获取与自己的reduce任务对应的分区的位置和大小,然后通过建立超文本传输协议(hypertexttransportprotocol,http)连接完成中间数据的复制操作,将每个输出文件中与自己的reduce任务对应的分区中的中间数据进行复制。最终,reduce任务经过对中间数据的化简操作,完成整个作业。

在整个复制过程中,reduce任务与map任务建立了大量的网络连接。实际上,对于m个map任务、n个reduce任务,若每个reduce任务启用c个线程复制数据,极端情况下,建立的网络连接数量最大可以达到m·n·c。 由此可见,mapreduce系统shuffle阶段的复制过程中需要建立大量的物理网络连接。

目前的现有技术,采用了两种方案对shuffle阶段的复制过程进行优化。方案一在map任务部分完成时就将输出的中间数据推送给reduce任务,以使map任务和reduce任务的执行过程在时间上尽可能重叠,通过提前复制中间数据来消除所有map任务都完成后大量数据等待复制而导致的网络连接爆发的状况。方案二是利用软件或硬件压缩技术,对map任务输出的中间数据进行压缩来减少shuffle阶段网络的数据传输量。

显然,尽管现有技术的方案对mapreduce系统shuffle阶段的复制过程进行了优化,减少了复制过程中网络的数据传输量。但是,mapreduce系统shuffle阶段的复制过程仍需要建立大量的传输链路,网络建链开销很大。



技术实现要素:

本发明实施例提供一种处理数据的方法,能够减少处理数据过程中建立网络链路的数量,从而减小网络建链开销。

第一方面,本申请提供了一种处理数据的方法,该方法在包括至少一个计算节点和至少一个化简节点的系统中执行,在每个计算节点中配置有k个传输链路,该至少一个化简节点上运行k个化简任务,该k个传输链路与该k个化简任务一一对应,每个传输链路用于使所对应的化简任务所属的化简节点与该计算节点连接,该k个化简任务与k个数据类型一一对应,每个化简任务用于对所对应的数据类型的数据进行化简处理,k≥2,该方法包括:计算节点获取待处理数据,该待处理数据是在计算节点中运行的至少两个计算任务生成的,该待处理数据包括至少两种子数据,所述至少两种子数据的数据类型相异;计算节点根据第一子数据的数据类型,传输该第一子数据,其中,用于传输该第一子数据的第一传输链路与该第一子数据的数据类型相对应。

在本发明实施例中,通过将一个节点(即,对应本发明实施例的计算节点)上所有计算任务的输出数据根据数据类型进行分类,得到多个数据类型的数据(即,对应本发明实施例的待处理数据,每一个数据类型的数据对应本发明实施例的子数据),且使每个数据类型对应一个化简任务。在每一个计算节点上,为每一种数据类型的数据配置一条传输链路,每一条传输链路 用于将计算节点与该数据类型对应的化简节点连接,从而使得化简节点通过该传输链路获取到对应数据类型的数据,完成对该数据类型的数据的化简处理,能够减少数据处理过程中传输链路的数量,从而减小网络建链开销。

根据第一方面,在第一方面的第一种可能的实现方式中,计算节点根据第一子数据的数据类型,传输该第一子数据,包括:计算节点根据第一子数据的数据类型,确定第一传输链路;计算节点通过该第一传输链路传输该第一子数据。

根据第一方面和第一方面上述可能实现方式,在第一方面的第二种可能的实现方式中,计算节点中配置有k个分区,该k个分区与该k个数据类型一一对应,每个分区用于存储所对应的数据类型的数据,该k个传输链路与该k个分区一一对应,每个传输链路用于连接所对应的化简节点与所对应的分区,以及,计算节点根据第一子数据的数据类型,传输该第一子数据,包括:计算节点根据该第一子数据的数据类型,确定第一分区,其中,该第一分区与该第一子数据的数据类型对应;计算节点将该第一子数据保存至该第一分区;计算节点通过连接于该第一分区的第一传输链路,传输该第一子数据。

在本发明实施例中,该计算节点根据第一子数据的数据类型,传输该第一子数据,包括:该计算节点根据第一子数据所属的分区,传输该第一子数据。

即,在本发明实施例中,可以根据数据所属于的分区确定数据的数据类型。计算节点将待处理数据传输给化简节点时,可以根据第一子数据(待处理数据中的任意一种数据类型的子数据)的所属的分区(即,数据类型的一例),并通过与该第一子数据所属的分区连接的第一传输链路(即,k个传输链路中与第一分区对应的传输链路),将该第一子数据传输至对应的化简节点进行化简处理,其中,k≥2。

第二方面,本申请提供了一种处理数据的装置,该装置配置在包括至少一个化简节点的系统中,该装置配置有k个传输链路,该至少一个化简节点上运行k个化简任务,该k个传输链路与该k个化简任务一一对应,每个传输链路用于使所对应的化简任务所属的化简节点与该装置连接,该k个化简任务与k个数据类型一一对应,每个化简任务用于对所对应的数据类型的数据进行化简处理,k≥2,该装置包括:获取单元,用于获取待处理数据, 该待处理数据是在该装置中运行的至少两个计算任务生成的,该待处理数据包括至少两种子数据,该至少两种子数据的数据类型相异;传输单元,用于根据第一子数据的数据类型,传输该第一子数据,其中,用于传输该第一子数据的第一传输链路与该第一子数据的数据类型相对应。

根据第二方面,在第二方面的第一种可能的实现方式中,该装置还包括:确定单元,用于根据该第一子数据的数据类型确定该第一传输链路;该传输单元具体用于通过该第一传输链路传输该第一子数据。

根据第一方面和第一方面上述可能实现方式,在第二方面的第二种可能的实现方式中,该装置中配置有k个分区,该k个分区与该k个数据类型一一对应,每个分区用于存储所对应的数据类型的数据,该k个传输链路与该k个分区一一对应,每个传输链路用于连接所对应的化简节点与所对应的分区,该装置该包括:确定单元,具体用于根据该第一子数据的数据类型,确定第一分区,其中,该第一分区与该第一子数据的数据类型所对应;存储单元,用于将该第一子数据保存至该第一分区;该传输单元具体用于通过连接于该第一分区的第一传输链路,传输该第一子数据。

第三方面,本申请提供一种处理器,所述处理器位于包括至少一个化简节点的系统中,所述处理器通过系统总线与所述至少一个化简节点相连,所述处理器用于执行指令,当所述指令被执行时,所述处理器执行第一方面中的方法。

第四方面,本申请提供一种计算机可读存储介质,所述计算机可读存储介质用于存储处理数据的程序代码,所述程序代码包括用于执行第一方面中的方法的指令。

本申请提供了一种处理数据的方案,通过实施该方案,能够减少处理数据过程中建立的传输链路的数量,从而能够减小网络建链开销。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例中所需要使用的附图作简单地介绍,显而易见地,下面所描述的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是现有技术中mapreduce系统的工作原理示意图。

图2是适用于本发明实施例的处理数据的方法的系统的示意性框图。

图3根据本发明实施例的处理数据的方法的示意性交互图。

图4是适用于本发明实施例的处理数据的方法在mapreduce系统中的工作原理图。

图5是适用于本发明实施例的处理数据的方法的mapreduce系统的示意性架构图。

图6是本发明实施例的处理数据的方法在mapreduce系统中的执行流程与现有技术中mapreduce系统的执行流程的对比图。

图7是根据本发明实施例的处理数据的装置的示意性框图。

图8是根据本发明实施例的处理数据的设备的示意性结构图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。

本发明实施例提供的处理数据的方法,可以适用于任何对数据作并行计算的系统。本发明实施例中的分布式文件系统(distributedfilesystem,dfs),可以是hadoop分布式文件系统(hadoopdistributedfilesystem,hdfs),可以是网络文件系统(networkfilesystem,简称为nfs),可以是谷歌文件系统(googlefilesystem,gfs),也可以是其它任何分布式文件系统,本发明并不限于此。

图1示出了现有技术中mapreduce系统的工作原理示意图。如图1所示,在mapreduce系统中,一个作业(job)会被分成大量的任务并行执行。首先是map阶段,每个map任务会从hdfs读取一段数据(即,分片)作为输入经映射(map)处理后存储到内存缓冲区(buffer)中,每个map任务都有自己独立的buffer,并且buffer的大小已经预先定义。每个经map函数输出的中间数据在其对应的buffer中进行分区(partition)、归并(merge)、排序(sort)和溢写(spill)操作后,最终会生成一个输出文件(outputfile)和输出文件的索引文件(indexfile),其中,索引文件用于记录输出文件的存储位置信息。这样,当多个并行的map任务结束后,就会有多个输出文件 和与多个输出文件一一对应的索引文件。接下来,作业执行从map阶段进入reduce阶段。

在reduce阶段,reduce任务通过索引文件从map阶段生成的多个输出文件中获取与自己的reduce任务对应的分区的位置和大小,然后通过建立超文本传输协议(hypertexttransportprotocol,http)连接完成中间数据的复制操作,将每个输出文件中与自己的reduce任务对应的分区中的中间数据进行复制。最终,reduce任务经过对中间数据的化简操作,完成整个作业。

从上述过程可以看到,整个复制阶段reduce任务与map任务建立了大量的网络连接,这样会对mapreduce系统的性能造成不利的影响。一方面,网络建链开销大。在处理的数据量不变的情况下,复制阶段的reduce任务数量越多,需要建立的网络链路的数量越多,网络建链开销也越大。另一方面,影响未来光交换机场景下mapreduce系统的执行效率。由于,光交换的优点是高带宽,但缺点是光交换机网络建链开销很大,如果在光交换机应用场景中存在大量的物理链路,必然会造成光交换机效率低下。

以下结合图2至图6,对根据本发明实施例的处理数据的方法进行详细说明。

图2是适用于本发明实施例的处理数据的方法的系统。如图2所示,该系统包括一个计算节点(即,计算节点#1)和两个化简节点(即,化简节点#和化简节点#2)。其中,计算节点#1上运行着两个计算任务,分别为计算任务#1和计算任务#2,化简节点1#上运行两个化简任务,分别为化简任务#1和化简任务#2,化简节点#2上运行一个化简任务,为化简任务#3。3个化简任务分别与3个数据类型一一对应,每个化简任务用于对所对应数据类型的数据进行化简处理。例如,化简任务#1用于处理数据类型为a的数据,化简任务#2用于处理数据类型为b的数据,化简任务#3用于处理数据类型为c的数据。计算任务1和计算任务#2计算生成的待处理数据包括3个子数据,分别记作子数据#1、子数据#2和子数据#3,子数据#1、子数据#2和子数据#3对应的数据类型分别为数据类型a、数据类型b和数据类型c。计算节点#1上配置有3条传输链路,每条传输链路与一个化简任务对应,即,传输链路#1对应化简任务#1,传输链路#2对应化简任务#2,传输链路#3对应化简任务#3。其中,传输链路#1用于计算节点将子数据#1传输给化简节点#1,子数据#1的数据类型为数据类型a,化简节点#1通过运行化简任务#1对子 数据#1进行化简。类似地,传输链路#2用于计算节点将子数据#2传输给化简节点#1,子数据#2的数据类型为数据类型b,化简节点#1通过运行化简任务#2对子数据#2进行化简。传输链路#3用于计算节点将子数据#3传输给化简节点#2,子数据#3的数据类型为数据类型c,化简节点#2通过运行化简任务#3对子数据#3进行化简。

在本发明实施例中,通过将一个节点(即,对应本发明实施例的计算节点)上所有并行map任务的输出数据根据数据类型进行分类,得到多个数据类型的数据(即,对应本发明实施例的待处理数据,每一个数据类型的数据对应本发明实施例的子数据)。化简节点(可以为一个,也可以为多个)通过执行多个化简任务,使每个化简任务对一种数据类型的数据进行化简处理,这样,在每一个计算节点上,只需要为每一种数据类型的数据建立一条传输链路,将计算节点与该数据类型对应的化简节点连接起来,完成对待处理数据的化简处理。因此,根据本发明实施例的处理数据的方法,能够减少数据处理过程中传输链路的数量,从而减小网络建链开销。

应理解,在本发明实施例中,待处理数据是相对于化简节点来说的,即,计算节点从计算任务获取的需要传输给化简节点进行化简处理的数据称为待处理数据。

应理解,适用于本发明实施例的处理数据的方法的系统包括至少一个计算节点和至少一个化简节点,上述图2仅以处理数据的系统包括一个计算节点和两个化简节点为例,对适用于本发明实施例的处理数据的方法的系统进行说明,不应对本发明实施例的范围构成任何限定。

图3示出了根据本发明实施例的处理数据的方法100的示意性交互图。如图3所示,该方法100包括:

110、计算节点获取待处理数据,该待处理数据是在该计算节点上运行的至少两个计算任务生成的,该待处理数据包括至少两种子数据,该至少两种子数据的数据类型相异。

根据本发明实施例的处理数据的方法在包括至少一个计算节点和至少一个化简节点的系统中执行,每个计算节点上运行至少两个计算任务,该至少两个计算任务用于并行处理用户设备的输入数据,每个计算任务处理用户设备的输入数据的一个数据片段,其中,数据片段的大小是用户设备根据计算节点所能处理的数据块的大小定义的。

具体地说,用户设备首先将需要处理的数据(也或者说,作业)划分为多个数据片段(或者说,子作业)提交到本发明实施例的处理数据的系统。该系统会根据数据片段的数目生成相应数目的计算任务,每个计算任务处理一个数据片段。这样,就会生成多个中间数据,计算节点对这些中间数据进行合并,生成待处理数据,接下来,计算节点将待处理数据发送给化简节点进行进一步的化简处理。

需要说明的是,在本发明实施例中,计算节点对至少两个计算任务生成的中间数据进行合并时,会根据系统分配的化简任务的数目,将上述待处理数据划分为相同数目的几种类型,每一个化简任务用于处理一种数据类型的数据。为了便于理解和描述,在本发明实施例中,将一种数据类型的数据称为一个子数据。

本发明实施例的处理数据的系统包括至少一个化简节点,每个化简节点可上可以运行至少一个化简任务,每个化简任务用于处理待处理数据的一个子数据。也或者说,每个化简任务用于对一种类型数据的数据进行化简处理。

120、计算节点根据第一子数据的数据类型,传输第一子数据,其中,用于传输第一子数据的第一传输链路与第一子数据的数据类型相对应。

应理解,第一子数据为待处理数据所包括的至少两种子数据中的任意一种子数据。如前文所述,在本发明实施例中,每个计算节点上配置有k个传输链路,k个传输链路与k个化简任务一一对应,每个传输链路用于使所对应的化简任务所属的化简节点与计算节点连接。

具体地说,计算节点获取到计算任务生成的待处理数据,待处理数据包括至少两种子数据,每种子数据对应一种数据类型。计算节点根据数据类型与化简任务之间的一一对应关系,将每一种子数据传输至对应的化简任务所属的化简节点。

在本发明实施例中,一个化简节点上可以运行一个化简任务,处理一种数据类型的数据。一个化简节点上也可以运行多个化简任务,每个化简任务处理一种数据类型的数据,这样,一个化简节点也可以处理多种数据类型的数据。计算节点对至少两个计算任务生成的中间结果进行归并处理生成待处理数据时,是根据系统分配的化简任务的数目,生成相同数目的子数据,每一种子数据对应一种数据类型。

需要说明的是,在本发明实施例中,计算任务和化简任务是可以由用户 自己定义的。

130、化简节点对第一子数据作化简处理。

需要说明的是,此处的化简节点是指与第一子数据的数据类型对应的化简任务所属的化简节点。

在本发明实施例中,以计算节点为单位,根据化简任务的数目,将一个计算节点上所有的计算任务的输出数据进行分类,生成包含至少两种子数据的待处理数据,并使得每种子数据与一个化简任务相对应,每个化简任务用于处于一种数据类型的数据,能够减少数据处理过程中传输链路的数量,从而可以减小网络建链开销。

可选地,作为一个实施例,计算节点中配置有k个分区,k个分区与k个数据类型一一对应,每个分区用于存储所对应的数据类型的数据,k个传输链路与k个分区一一对应,每个传输链路用于连接所对应的化简节点与所对应的分区,以及,

计算节点根据第一子数据的数据类型,传输所述第一子数据,包括:

计算节点根据第一子数据的数据类型确定第一分区,其中,第一分区与第一子数据的数据类型所对应;

计算节点将第一子数据保存至第一分区;

计算节点通过连接于第一分区的第一传输链路,传输第一子数据。

在本发明实施例中,可以在每个计算节点上配置多个分区,每个分区对应一种数据类型,并用于存储所对应数据类型的数据。每个分区与一个传输链路相对应,每个传输链路用于连接所对应的分区与对应的化简节点。

图4是适用于本发明实施例的处理数据的方法的mapreduce系统的工作原理图。如图4所示,节点#1执行3个计算任务从hdfs分别读取用户数据(或者说,作业)的分片0、分片1和分片2,经过分区器1的分区处理,并在节点#1对应的共享内存#1中经过归并排序操作以后,节点#1上输出3个数据类型的数据。类似地,节点#2执行2个计算任务从hdfs分别读取用户数据的分片3、和分片4,经过分区器2的分区处理,并在节点#2对应的共享内存#2中经过归并排序操作以后,节点#2上输出3个数据类型的数据。接下来,mapreduce系统从映射阶段进入化简阶段。此时,节点#1、节点#2和节点#3用于执行化简任务,每个节点从映射阶段的输出数据中复制对应数据类型的数据进行化简处理,并将最终的处理结果(可对应图4中 的部分1、部分2和部分3)存入hdfs,从而完成对一个作业的处理。从图4中可以看出,节点#1和节点#2既用于执行计算任务(或者说,映射任务),在计算任务结束后,又用于执行化简任务,节点#3仅用于化简任务。即,在本发明实施例中,任何一个节点既可以执行计算任务,也可以执行化简任务,或者既执行计算任务也执行化简任务。

在现有的hadoop2.0版本的mapreduce系统中,一个作业(job)对应一个应用程序主节点(applicationmaster,am),am通过资源管理节点(resourcemanager,rm)在节点管理器(nodemanager,nm)上申请容器(container)执行map任务和reduce任务,管理作业的执行和任务的调度。

根据本发明实施例的处理数据的方法,可以通过对现有技术中mapreduce系统的架构进行改进来实现。图5是适用于本发明实施例的处理数据的方法的mapreduce系统的示意性架构图。如图5所示,系统中包括多个节点,该多个节点用于处理2个作业,即用户设备#a提交的作业#1和用户设备#b提交的作业#2。本发明实施例中,系统为每一个数据节点(datanode)创建一个应用程序内存代理(applicationmemoryagent,ama),ama用于为数据节点上属于同一个作业的所有并行执行的map任务分配一个共享内存(map-output-buffer,mob),一个数据节点上的同一个作业的所有map任务的输出数据共同使用该共享内存,并在该共享内存中进行分区(partition)和归并排序(merge&sort)操作。另外,在am上创建应用程序内存管理器(applicationmemorymanager,amm),amm负责ama的创建、删除,并且通过与ama通信,对ama运行状态进行监控。

需要说明的是,上述实施例中,仅以计算节点作计算处理,化简节点作化简处理为例对本发明实施例的计算节点和化简节点进行说明。实际上,在本发明实施例中,任何一个工作节点(可对应图5中的数据节点)既可以执行计算任务,也可以运行化简任务,也可以在完成计算任务后,进行化简任务,计算任务和化简任务的执行是系统根据每个节点(计算节点或化简节点)上任务的处理情况进行分配与调度的。

图6示出了本发明实施例的处理数据的方法在mapreduce系统中的执行流程与现有技术中mapreduce系统的执行流程对比图。

应理解,图6中的映射阶段与化简阶段可以是由同一个节点(或者说,数据节点或工作节点)执行,也可以是由不同的节点执行。

需要说明的是,cpu#1、ram和本地磁盘位于一个节点内(为了便于区别,记作节点#1),用于运行map任务,cpu#2表示不同于节点#1的一个节点或多个节点的cpu资源,用于运行reduce任务。为了便于描述,以下以cpu#2位于一个节点(为了便于区别,记作节点#2)为例,对本发明实施例的处理数据的方法在mapreduce系统的执行流程与现有技术中mapreduce作业的执行流程进行对比。

如图6所示,节点#1上运行4个map任务,该4个map任务属于同一个作业。在步骤③中,现有技术中,节点#1上的每个map任务在自己独立的内存缓冲区(buffer)中管理自己的数据。例如,在自己独立的内存缓冲区中进行分区(partition)、归并排序(merge&sort)和溢写(spill)操作等。相对应地,本发明实施例的处理数据的方法,节点#1上的所有并行的map任务(针对同一个作业而言)共同使用一个共享内存,并在该共享内存中管理自己的数据。例如,每个map任务在共享内存中进行分区(partition)、归并排序(merge&sort)和溢写(spill)操作等。在步骤④中,现有技术中,每个map任务会输出一个文件,文件的个数与运行的map任务的数目相同。而在本发明实施例中,一个节点上,所有map任务最终只输出一个文件。

更进一步地,在步骤⑤中,现有技术中,对于m个map任务、n个reduce任务,每个reduce任务启用c个线程复制数据,网络链路数目最大可以为m·n·c。而本发明实施例中,网络链路的数目为k·n·c,其中,k表示执行作业过程中使用的节点的数目。以图6为例,对于3个reduce任务从一个运行4个map任务的节点复制数据的情况下,在每个reduce任务启用的复制线程的数目为1的情况下,现有技术中,mapreduce流程建立的传输链路的数量为3×4=12个,而本发明实施例的mapreduce流程建立网络连接数量为3×1=3个。

根据本发明实施例的处理数据的方法,一方面,可以减少化简(reduce)阶段中因为读取的数据片段太多(每一个map任务一个)而造成的数据的有序性弱,数据片段多的问题。在本发明实施例中,数据片段数只与节点数有关,并且每个片段内的数据已经有序(即,shuffle阶段的归并排序操作实现),因而数据的有序性更强,从而可以减少化简阶段中归并排序操作的工作量。

另一方面,根据本发明实施例的处理数据的方法,由于单个节点上所有 并行的map任务的输出文件中的数据已经聚合,因此,一个计算节点上属于一个化简任务的数据量就是确定的,那么,可以根据一个计算节点的输出文件中占据数据量最大的分区(或者说,数据类型),将与该分区(或,数据类型)对应的化简任务分配在该计算节点上执行,从而可以减少数据的复制量。

再一方面,根据本发明实施例的处理数据的方法,可以减少映射阶段中map任务输出文件的随机输入输出(input/output,i/o)。由于现有的mapreduce系统,每个map任务输出一个文件,而文件中的一个分区对应一个reduce任务,在map任务与reduce任务的数量都很多的情况下,一个map任务输出文件中属于某个reduce任务的分区的平均大小相对就会很小,reduce任务从计算节点复制数据需要读取的小文件的个数就会很多,从而形成大量小的随机i/o。而本发明实施例提供的方案,同一个计算节点的map任务的输出数据进行了聚合,一个计算节点上只有一个输出文件,每个reduce任务相当于只读取一个大文件的一个的分区,一次连续的i/o就可以完成。

在本发明实施例中,可以通过修改现有技术中mapreduce系统的执行流程的代码,以使得每个节点上的多个map任务的输出数据使用一个共享内存。本发明实施例的处理数据的方法在mapreduce系统中的关键伪代码如下:

上述伪代码对应的注释如下:

01:任务服务器为每个map任务创建jvm,并进行初始化。

应理解,jvm表示java虚拟机(javavirtualmachine)。一个jvm可以对应一个任务(即,map任务或reduce任务)

任务服务器(tasktracker)用于执行具体的任务。hadoop中的tasktracker在gfs系统中,也可以称为worker。

02:获取每个jvm执行的map任务。

03:以创建的jvm的数量为参数,创建节点内的共享内存。

04:创建处理map任务输出的重定向方法,重定向到节点内的共享内存。

在现有技术中,每个map任务具有独立的内存缓存区,每个map任务的输出数据都通过一条独立的路径存储到自己的内存缓冲区。而在本发明实施例中,一个节点上所有的并行map任务都共同使用一个共享内存,因此,需要为每个map任务重建路径(或者说,重定向),使每个map任务重定向到节点内的共享内存,从而使得所有并行map任务的输出数据都能通过重定向路径保存到共享内存中。

应理解,在本发明实施例中,一个节点上的所有并行map任务是针对同一个作业而言的。

05:执行map任务,并使节点上并行执行的map任务的输出在共享内存中进行归并排序、分区和合并操作,最终形成一个输出文件,写到本地磁盘。

在本发明实施例中,每个map任务的归并排序(merge&sort)、溢写(spill)操作都是在共享内存中进行。

另外,在本发明实施例中,每个map任务在共享内存中可以单独使用自己的空间,也可以所有map任务共同使用共享内存的所有空间。

06:reduce任务创建并启动获取共享内存中存储的map任务输出数据 的可用状态获取线程。

07:启动fether线程组。

08:每个fether线程调用copyfromhost方法,使用httpurlconnection进行远程数据传输。

现有技术中,复制过程是以map任务的数目决定的,即,对于一个reduce任务而言,有多少个map任务,就需要启动多少个线程复制map任务的输出数据。本发明实施例的处理数据的方法,通过使一个节点上的所有并行map任务共同使用一个共享内存,从而,一个reduce任务需要启动的线程的数目只与计算节点的数目有关,即,有多少个计算节点,就至少需要启动多少个线程复制map任务的输出数据。

根据本发明实施例的处理数据的方法,一方面,可以减少数据处理过程中的建链开销,从而可以提升网络带宽。例如,对于m个map任务、n个reduce任务、每个reduce任务启用c个线程拷贝数据,网络链路的数量可以由原来的m·n·c减少为k·n·c,其中,k表示执行作业过程中使用的计算节点的数量。对于大多数商用服务器组成的集群,内存大于48gb,cpu核心数开启超线程时至少是24,对于具有大量map任务的作业来说,m大于等于24k,可见,网络链路的数量至少减少了95.8%。

需要说明的是,上述图5和图6所示的mapreduce系统是以hadoop2.0的架构为基础所作的改进,其它基于hadoop版本实现类似功能的mapreduce系统也应落入本发明实施例的保护范围之内。

以上,结合图1至图6详细说明了根据本发明实施例的处理数据的方法,以下结合图7,说明根据本发明实施例的处理数据的装置。

图7示出了根据本发明实施例的处理数据的装置200的示意性框图。如图7所示,该装置200包括:

获取单元210,用于获取待处理数据,该待处理数据是在所述装置中运行的至少两个计算任务生成的,该待处理数据包括至少两种子数据,该至少两种子数据的数据类型相异;

传输单元220,用于根据第一子数据的数据类型,传输该第一子数据,其中,用于传输该第一子数据的第一传输链路与该第一子数据的数据类型相对应。

可选地,作为一个实施例,该装置还包括:

确定单元,用于根据第一子数据的数据类型确定第一传输链路;

传输单元220具体用于通过该第一传输链路传输该第一子数据。

可选地,作为一个实施例,该装置中配置有k个分区,该k个分区与该k个数据类型一一对应,每个分区用于存储所对应的数据类型的数据,该k个传输链路与该k个分区一一对应,每个传输链路用于连接所对应的化简节点与所对应的分区,该装置还包括:

确定单元,用于根据第一子数据的数据类型确定第一分区,其中,该第一分区与该第一子数据的数据类型所对应;

存储单元,用于将该第一子数据保存至该第一分区;

该传输单元具体用于通过连接于该第一分区的第一传输链路,传输该第一子数据。

根据本发明实施例的处理数据的装置200,可对应本发明实施例的处理数据的方法中的计算节点,并且,该装置200中的各个单元的上述操作或功能分别为了实现图3中方法的相应流程,为了简洁,在此不再赘述。

图8示出了根据本发明实施例的处理数据的设备300的示意性框图。如图8所示,该设备包括处理器310、收发器320、存储器330和总线系统340,其中,处理器310、收发器320和存储器330可以通过总线系统340相连,该存储器330可以用于存储指令,该处理器310用于执行该存储器330存储的指令,

用于获取待处理的数据,该待处理的数据是在该设备中运行的至少两个计算任务生成的,该待处理数据包括至少两种子数据,该至少两种子数据的数据类型相异;

用于控制收发器320根据第一子数据的的数据类型,传输该第一子数据。

可选地,作为一个实施例,处理器310具体用于根据第一子数据的数据类型,确定该第一传输链路;

收发器320具体用于通过该第一传输链路传输该第一子数据。

可选地,作为一个实施例,该设备中配置有k个分区,该k个分区与k个数据类型一一对应,每个分区用于存储所对应的数据类型的数据,该k个传输链路与该k个分区一一对应,每个传输链路用于使所对应的化简任务所属的化简节点与对应的分区连接,该处理器310具体用于根据第一子数据的数据类型确定第一分区,其中,该第一分区与该第一子数据的数据类型对应;

该存储器330具体用于将该第一子数据保存至第一分区;该收发器320具体用于通过连接于该第一分区的第一传输链路,传输该第一子数据。

根据本发明实施例的处理数据的设备300,可对应本发明实施例的处理数据的方法中的计算节点,并且,该设备300中的各个单元的上述操作或功能分别为了实现图3中方法的相应流程,为了简洁,在此不再赘述。

应理解,在本发明实施例中,处理器310可以是中央处理单元(centralprocessingunit,简称为“cpu”),处理器310还可以是其它通用处理器、数字信号处理器(dsp)、专用集成电路(asic)、现成可编程门阵列(fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。

存储器330可以包括只读存储器和随机存取存储器,并向处理器310提供指令和数据。处理器310的一部分还可以包括非易失性随机存取存储器。例如,处理器310还可以存储设备类型的信息。

总线系统340除包括数据总线之外,还可以包括电源总线、控制总线和状态信号总线等。但是为了清楚说明起见,在图中将各种总线都标为总线系统340。

在实现过程中,上述方法的各步骤可以通过处理器310中的硬件的集成逻辑电路或者软件形式的指令完成。结合本发明实施例所公开的处理数据的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器330,处理器310读取存储器330中的信息,结合其硬件完成上述方法的步骤。为避免重复,这里不再详细描述。

根据本发明实施例的处理数据的设备300可对应于根据本发明实施例的处理数据的方法中的计算节点,并且,该设备300中的各单元和上述其它操作和/或功能分别为了实现图3中由计算节点执行的相应流程,为了简洁,在此不再赘述。

应理解,在本发明的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。

本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各 示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例的技术方案。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。

所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-onlymemory,ram)、随机存取存储器(randomaccessmemory,rom)、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限 于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1