基于MapReduce的多表数据处理方法及系统与流程

文档序号:12364125阅读:316来源:国知局
基于MapReduce的多表数据处理方法及系统与流程

本发明实施例涉及数据处理技术领域,尤其涉及一种基于MapReduce的多表数据处理方法及系统。



背景技术:

MapReduce是一种软件架构,用于大规模数据集(大于1TB)的并行运算。在MapReduce中,当涉及多表数据连接时,需要执行多轮的MapReduce过程。每一轮结束后,都得将结果缓存至分布式文件系统HDFS中,然后被下一轮的MapReduce任务读出并处理。在整个过程中,映射Map节点和规约Reduce节点之间的数据传输量是很大的,读取HDFS以及Map和Reduce节点之间的数据传输都是较为耗时耗力的,数据处理效率较低。



技术实现要素:

本发明实施例提供一种基于MapReduce的多表数据处理方法及系统,用以降低map节点和reduce节点之间的数据传输量,提高MapReduce的数据处理效率。

本发明实施例第一方面提供一种基于MapReduce的多表数据处理方法,该方法包括:

根据数据集的分片数与数据集的大小以及reduce节点数量之间的映射关系,确定数据库中各数据集的分片数;

根据各数据集的分片数,为各数据集进行分片处理,生成各数据集的分片数据;

根据数据集的分片数据和reduce节点之间的分配映射关系,确定各数据集的分片数据对应的reduce节点;

将各数据集的分片数据分配到对应的reduce节点,以使所述reduce节点对接收到的分片数据进行处理。

本发明实施例第二方面提供一种基于MapReduce的多表数据处理系统,该系统包括:

第一确定模块,用于根据数据集的分片数与数据集的大小以及reduce节点数量之间的映射关系,确定数据库中各数据集的分片数;

处理模块,用于根据各数据集的分片数,为各数据集进行分片处理,生成各数据集的分片数据;

第二确定模块,用于根据数据集的分片数据和reduce节点之间的分配映射关系,确定各数据集的分片数据对应的reduce节点;

分配模块,用于将各数据集的分片数据分配到对应的reduce节点,以使所述reduce节点对接收到的分片数据进行处理。

本发明实施例,根据数据集的分片数与数据集的大小以及reduce节点数量之间的映射关系,确定数据库中各数据集的分片数,并按照各数据集的分片数为各数据集进行分片,使得map节点和reduce节点之间的数据传输量最小,再根据数据集和reduce节点之间的分配映射关系,通过将各数据集的分片数据发送至对应的reduce节点进行处理,从而使得数据集之间的连接操作可以单独在一个reduce节点上完成,而不需要多轮的串行操作,提高了MapReduce的数据处理效率。

附图说明

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

图1为本发明实施例一提供的基于MapReduce的多表数据处理方法的流程示意图;

图2为本发明实施例二提供的基于MapReduce的多表数据处理方法的流程示意图;

图3为本发明实施例三提供的基于MapReduce的多表数据处理系统的结构示意图。

具体实施方式

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

本发明的说明书和权利要求书的术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤的过程或结构的装置不必限于清楚地列出的那些结构或步骤而是可包括没有清楚地列出的或对于这些过程或装置固有的其它步骤或结构。

图1为本发明实施例一提供的基于MapReduce的多表数据处理方法的流程示意图,该方法可以通过一基于MapReduce的多表数据处理系统来执行。如图1所示,本实施例提供的方法包括如下步骤:

步骤S101、根据数据集的分片数与数据集的大小以及reduce节点数量之间的映射关系,确定数据库中各数据集的分片数。

本实施例中,数据集的分片数与数据集的大小以及reduce节点数量之间的映射关系,可以具体被体现为数据集的分片数与数据集大小的取值范围以及reduce节点数量的取值范围之间的对应关系,比如,当数据集的大小在(1TB,3TB)的范围内,且reduce节点的数量在(100,150)个的范围内时,可以将数据集对应的分片数设置为100,当然此处仅为举例说明,而不是进行唯一性限定。

特别的,数据集的分片数与数据集的大小以及reduce节点数量之间的映射关系,还可以被体现为,数据集的分片数与数据集的大小以及reduce节点数量之间的函数关系,即设置一以数据集的分片数为输出量,以数据集的大小和reduce节点的数量为输入量的函数,根据该函数计算各数据集的分片数。该函数的具体表现形式可以根据具体需要具体设定,只要能够达到减少map节点与reduce节点之间的数据传输量即可。

以两个数据集为例,假设数据库中有两个数据集R和S,且R和S中均包含b元素,MapReduce中有k个reduce节点。将数据集R分成m个不相交的部分(即m个分片数据)R=R1∪R2…∪Rm,S分为了n个不相交的部分S=S1∪S2…∪Sn。并且满足k=m×n。接下来需要把R和S的各个子部分分配至reduce节点上,并且保证每个R子部分中的b元素能和S子部分中的所有b元素进行值的比对。反之亦然。

因此,可以采用如下分配方案进行分配:

將k个reduce节点进行编号,依次为

reduce(1,1),reduce(1,2),………,reduce(1,n)

reduce(2,1),reduce(2,2),………,reduce(2,n)

………

reduce(m,1),reduce(m,2),………,reduce(m,n)

其中,Ri分配给所有的reduce(i,*)节点,即将Ri分配编号为reduce(i,j)节点,j=1,2,…,n,共计n份,n为正整数。

Si分配给所有的reduce(*,i)节点,即将Si分配编号为reduce(j,i)节点,j=1,2,…,m,共计m份,m为正整数。

在上述这种方案中,map节点与reduce节点之间的数据传输量为:

Cost=n*r+m*s (1)

其中,r和s分别为R和S的数据量,Cost为数据传输量。

为了尽可能地减少map节点和reduce节点之间传输的数据量,即使得公式(1)中的cost最小。

<mrow> <mi>cos</mi> <mi>t</mi> <mo>=</mo> <mi>n</mi> <mo>*</mo> <mi>r</mi> <mo>+</mo> <mi>m</mi> <mo>*</mo> <mi>s</mi> <mo>&GreaterEqual;</mo> <mn>2</mn> <msqrt> <mrow> <mi>n</mi> <mo>*</mo> <mi>r</mi> <mo>*</mo> <mi>m</mi> <mo>*</mo> <mi>s</mi> </mrow> </msqrt> <mo>=</mo> <mn>2</mn> <msqrt> <mrow> <mi>k</mi> <mo>*</mo> <mi>r</mi> <mo>*</mo> <mi>s</mi> </mrow> </msqrt> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>2</mn> <mo>)</mo> </mrow> </mrow>

公式(2)中,当且仅当n*r=m*s成立时,cost最小,等于此时,可得到数据集R和S的分片数分别为:

<mrow> <mi>m</mi> <mo>=</mo> <msqrt> <mfrac> <mrow> <mi>r</mi> <mi>k</mi> </mrow> <mi>s</mi> </mfrac> </msqrt> <mo>,</mo> <mi>n</mi> <mo>=</mo> <msqrt> <mfrac> <mrow> <mi>s</mi> <mi>k</mi> </mrow> <mi>r</mi> </mfrac> </msqrt> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>3</mn> <mo>)</mo> </mrow> </mrow>

更一般的,数据集中存在多个数据集时,各数据集的分片数的确定方法,也可以参照两个数据集时的确定方法获得,例如当数据库中存在t个数据集,MapReduce中有k个reduce节点时,根据上述方法可以推倒获得数据集的分片数计算模型为

<mrow> <msub> <mi>S</mi> <mi>i</mi> </msub> <mo>=</mo> <msub> <mi>r</mi> <mi>i</mi> </msub> <mo>*</mo> <mroot> <mfrac> <mi>k</mi> <mrow> <munderover> <mo>&Pi;</mo> <mrow> <mi>j</mi> <mo>=</mo> <mn>1</mn> </mrow> <mi>t</mi> </munderover> <msub> <mi>r</mi> <mi>j</mi> </msub> </mrow> </mfrac> <mi>t</mi> </mroot> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>4</mn> <mo>)</mo> </mrow> </mrow>

其中,Si为数据集i的分片数,ri为数据集i的大小,j为大于或等于1,且小于或等于t的正整数。

这里需要说明的是,根据公式(4)计算获得的分片数可能不是一个整数,此时可以根据预设的策略将数据集的分片数确定为与计算值最接近的整数值。

步骤S102、根据各数据集的分片数,为各数据集进行分片处理,生成各数据集的分片数据。

实际应用中,在确定数据库中每个数据集的分片数后,即可以按照各数据集的分片个数,将各数据集的数据划分对应个数个数据块(即分片数据)。其具体的划分方法本实施例中不做具体限定,只要分片数满足步骤101中确定的分片数即可。

步骤S103、根据数据集的分片数据和reduce节点之间的分配映射关系,确定各数据集的分片数据对应的reduce节点。

本实施例中,数据集的分片数据和reduce节点之间的分配映射关系,可以被具体为,数据集的各分片数据与reduce节点的节点编号之间的对应关系。该对应关系可以根据具体需要具体设定,本实施例中不做限定。

以两个数据集为例,假设数据库中有两个数据集R和S,且R和S中均包含b元素,MapReduce中有k个reduce节点。将数据集R分成m个不相交的部分(即m个分片数据)R=R1∪R2…∪Rm,S分为了n个不相交的部分S=S1∪S2…∪Sn。并且满足k=m×n。则将R和S的各个子部分分配至reduce节点上,并且保证每个R子部分中的b元素能和S子部分中的所有b元素进行值的比对,可以采用如下方案:

將k个reduce节点进行编号,依次为

reduce(1,1),reduce(1,2),………,reduce(1,n)

reduce(2,1),reduce(2,2),………,reduce(2,n)

………

reduce(m,1),reduce(m,2),………,reduce(m,n)

其中,Ri分配给所有的reduce(i,*),即将Ri分配编号为reduce(i,j),j=1,2,…,n,共计n份,n为正整数。

Si分配给所有的reduce(*,i),即将Si分配编号为reduce(j,i),j=1,2,…,m,共计m份,m为正整数。

更一般的,当数据库中有多个数据集时,也可以采用与上述两个数据集时的分配方法类似的方法,来确定数据集中各分片数据对应的reduce节点。例如,当数据库中存在多个数据集时,可以将数据集R的第j个分片数据,分配至节点编号为的节点上,其中,t为数据集数量。当然上述仅为举例说明,而不是对其进行的具体限定。

步骤S104、将各数据集的分片数据分配到对应的reduce节点,以使所述reduce节点对接收到的分片数据进行处理。

实际应用中,当各数据集将各分片数据发送至对应的reduce节点后,各reduce节点会根据接收的分片数据所属的数据集的不同,为分片数据划分不同的队列,并依次对各队列的数据进行处理。

本实施例,根据数据集的分片数与数据集的大小以及reduce节点数量之间的映射关系,确定数据库中各数据集的分片数,并按照各数据集的分片数为各数据集进行分片,使得map节点和reduce节点之间的数据传输量最小,再根据数据集和reduce节点之间的分配映射关系,通过将各数据集的分片数据发送至对应的reduce节点进行处理,从而使得数据集之间的连接操作可以单独在一个reduce节点上完成,而不需要多轮的串行操作,提高了MapReduce的数据处理效率。

图2为本发明实施例二提供的基于MapReduce的多表数据处理方法的流程示意图,如图2所示,本实施例在图1所示方法的基础上包括如下步骤:

步骤S201、根据数据集的分片数与数据集的大小以及reduce节点数量之间的映射关系,确定数据库中各数据集的分片数。

步骤S202、根据各数据集的分片数,将各数据集划分为所述分片数个,数据量相等的分片数据。

举例来说,假设有数据集R,经过步骤201后确定其对应的分片数为100,则将数据R的数据量划分为100份数据量大小相等的数据块,即100份数据量大小相等的分片数据。

步骤S203、根据数据集的分片数据和reduce节点之间的分配映射关系,确定各数据集的分片数据对应的reduce节点。

以两个数据集为例,假设数据库中有两个数据集R和S,且R和S中均包含b元素,MapReduce中有k个reduce节点。将数据集R分成m个不相交的部分(即m个分片数据)R=R1∪R2…∪Rm,S分为了n个不相交的部分S=S1∪S2…∪Sn。并且满足k=m×n。则将R和S的各个子部分分配至reduce节点上,并且保证每个R子部分中的b元素能和S子部分中的所有b元素进行值的比对,可以采用如下方案:

將k个reduce节点进行编号,依次为

reduce(1,1),reduce(1,2),………,reduce(1,n)

reduce(2,1),reduce(2,2),………,reduce(2,n)

………

reduce(m,1),reduce(m,2),………,reduce(m,n)

其中,Ri分配给所有的reduce(i,*),即将Ri分配编号为reduce(i,j),j=1,2,…,n,共计n份,n为正整数。

Si分配给所有的reduce(*,i),即将Si分配编号为reduce(j,i),j=1,2,…,m,共计m份,m为正整数。

更一般的,当数据库中有多个数据集时,也可以采用与上述两个数据集时的分配方法类似的方法,来确定数据集中各分片数据对应的reduce节点。例如,当数据库中存在多个数据集时,可以将数据集R的第j个分片数据,分配至节点编号为的节点上,即数据集的分片数据与reduce节点的对应关系可以表示为数据集的分片数据与reduce节点编号之间的映射关系,此映射关系可表示为:

<mrow> <mi>f</mi> <mrow> <mo>(</mo> <mi>r</mi> <mi>e</mi> <mi>d</mi> <mi>u</mi> <mi>c</mi> <mi>e</mi> <mo>(</mo> <mrow> <msub> <mi>c</mi> <mn>1</mn> </msub> <mo>,</mo> <msub> <mi>c</mi> <mn>2</mn> </msub> <mo>,</mo> <mo>...</mo> <mo>,</mo> <msub> <mi>c</mi> <mi>t</mi> </msub> </mrow> <mo>)</mo> <mo>)</mo> </mrow> <mo>=</mo> <munderover> <mo>&Sigma;</mo> <mrow> <mi>i</mi> <mo>=</mo> <mn>1</mn> </mrow> <mrow> <mi>t</mi> <mo>-</mo> <mn>1</mn> </mrow> </munderover> <mrow> <mo>(</mo> <msub> <mi>c</mi> <mi>i</mi> </msub> <mo>-</mo> <mn>1</mn> <mo>)</mo> </mrow> <munderover> <mo>&Pi;</mo> <mrow> <mi>j</mi> <mo>=</mo> <mi>i</mi> <mo>+</mo> <mn>1</mn> </mrow> <mi>t</mi> </munderover> <msub> <mi>S</mi> <mi>j</mi> </msub> <mo>+</mo> <msub> <mi>c</mi> <mi>t</mi> </msub> </mrow>

其中,f(reduce(c1,c2,...,ct))为数据集的分片数据对应的reduce节点的编号,ci为数据集的第i个分片,Sj为数据集i的分片数,t为数据库中数据集的个数。

步骤S204、将各数据集的分片数据分配到对应的reduce节点,以使所述reduce节点对接收到的分片数据进行处理。

本实施例,根据数据集的分片数与数据集的大小以及reduce节点数量之间的映射关系,确定数据库中各数据集的分片数,并按照各数据集的分片数为各数据集进行分片,使得map节点和reduce节点之间的数据传输量最小,再根据数据集和reduce节点之间的分配映射关系,通过将各数据集的分片数据发送至对应的reduce节点进行处理,从而使得数据集之间的连接操作可以单独在一个reduce节点上完成,而不需要多轮的串行操作,提高了MapReduce的数据处理效率。

图3为本发明实施例三提供的基于MapReduce的多表数据处理系统的结构示意图,如图3所示,本实施例提供的系统包括:

第一确定模块11,用于根据数据集的分片数与数据集的大小以及reduce节点数量之间的映射关系,确定数据库中各数据集的分片数;

处理模块12,用于根据各数据集的分片数,为各数据集进行分片处理,生成各数据集的分片数据;

第二确定模块13,用于根据数据集的分片数据和reduce节点之间的分配映射关系,确定各数据集的分片数据对应的reduce节点;

分配模块14,用于将各数据集的分片数据分配到对应的reduce节点,以使所述reduce节点对接收到的分片数据进行处理。

其中,所述第一确定模块11,具体用于:

根据公式

<mrow> <msub> <mi>S</mi> <mi>i</mi> </msub> <mo>=</mo> <msub> <mi>r</mi> <mi>i</mi> </msub> <mo>*</mo> <mroot> <mfrac> <mi>k</mi> <mrow> <munderover> <mo>&Pi;</mo> <mrow> <mi>j</mi> <mo>=</mo> <mn>1</mn> </mrow> <mi>t</mi> </munderover> <msub> <mi>r</mi> <mi>j</mi> </msub> </mrow> </mfrac> <mi>t</mi> </mroot> </mrow>

确定数据库中各数据集的分片数;

其中,Si为数据集i的分片数,ri为数据集i的大小,k为MapReduce中reduce节点的数量,t为数据库中数据集的个数,j为大于或等于1,且小于或等于t的正整数。

所述处理模块12,具体用于:

根据各数据集的分片数,将各数据集划分为所述分片数个数据量相等的分片数据。

所述第二确定模块13,具体用于:

根据公式

<mrow> <mi>f</mi> <mrow> <mo>(</mo> <mi>r</mi> <mi>e</mi> <mi>d</mi> <mi>u</mi> <mi>c</mi> <mi>e</mi> <mo>(</mo> <mrow> <msub> <mi>c</mi> <mn>1</mn> </msub> <mo>,</mo> <msub> <mi>c</mi> <mn>2</mn> </msub> <mo>,</mo> <mo>...</mo> <mo>,</mo> <msub> <mi>c</mi> <mi>t</mi> </msub> </mrow> <mo>)</mo> <mo>)</mo> </mrow> <mo>=</mo> <munderover> <mo>&Sigma;</mo> <mrow> <mi>i</mi> <mo>=</mo> <mn>1</mn> </mrow> <mrow> <mi>t</mi> <mo>-</mo> <mn>1</mn> </mrow> </munderover> <mrow> <mo>(</mo> <msub> <mi>c</mi> <mi>i</mi> </msub> <mo>-</mo> <mn>1</mn> <mo>)</mo> </mrow> <munderover> <mo>&Pi;</mo> <mrow> <mi>j</mi> <mo>=</mo> <mi>i</mi> <mo>+</mo> <mn>1</mn> </mrow> <mi>t</mi> </munderover> <msub> <mi>S</mi> <mi>j</mi> </msub> <mo>+</mo> <msub> <mi>c</mi> <mi>t</mi> </msub> </mrow>

确定各数据集的分片数据对应的reduce节点;

其中,f(reduce(c1,c2,...,ct))为数据集的分片数据对应的reduce节点的编号,ci为数据集的第i个分片,Sj为数据集i的分片数,t为数据库中数据集的个数。

本实施例提供的系统,能够用于执行如图1或图2所示的方法,其具体的执行方式和有益效果与图1或图2所示实施例类似,在这里不再赘述。

最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。

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