分布式数据接收方法、系统和用于分布式数据接收的装置与流程

文档序号:16997895发布日期:2019-03-02 01:31阅读:254来源:国知局
分布式数据接收方法、系统和用于分布式数据接收的装置与流程

本发明涉及大数据处理领域,特别涉及一种分布式数据接收方法、系统和用于分布式数据接收的装置。



背景技术:

对每天tb(terabyte,太字节)级别甚至到pb(petabyte,拍字节)级别的大量的数据进行分析、汇总和落地(即持久化存储数据)是一个非常值得挑战的工程。通常地,在对如此大的数据量进行比较复杂的分析时,需要使用实时处理能力较强、吞吐量较高的流式处理工具,例如可以使用中间件集群作为汇总落地与分发的管道。

在实施过程中,可以根据不同的目标路径归纳数据,以将数据保存到分布式文件系统集群的指定路径下。

以运营商将各个省份的数据进行落地为例,目前,在进行数据接收和落地时,主要采用以下两种方式。

第一种方式为,令不同的省份数据对应指定的数据接收节点。即,将每个省份的数据都发送到同一个数据接收节点。

这种方式会造成数据倾斜的后果,比如数据量较大的省份对应的数据接收节点压力太大,而数据量较小的省份对应的数据接收节点压力较小,从而会影响数据接收节点的处理性能。

第二种方式为,令所有数据随机发送到各个数据接收节点。

这种方式会加大网络负载。设数据源节点有2000个,数据接收节点有20个,则网络中很可能同时有2000*20=40000个tcp-ip链接,造成网络拥塞。并且,每个数据接收节点的连接压力也会增大,极大地降低了性能。



技术实现要素:

本发明实施例所要解决的一个技术问题是:如何降低分布式数据接收节点的压力。

根据本发明实施例的第一个方面,提供一种分布式数据接收方法,包括:获取单位时间内每个数据单位的数据量,其中,每个数据单位具有一个或多个数据源节点;根据每个数据单位的数据量占总数据量的比值,在第一打分区间中为每个数据单位分配具有相应比例的子区间;获取第二打分区间中每个数据接收节点对应的子区间;基于第一打分区间中的子区间覆盖范围以及第二打分区间中的子区间的覆盖范围,确定每个数据单位的数据源节点所对应的数据接收节点;将每个数据源节点的数据发送给相应的数据接收节点。

在一个实施例中,基于第一打分区间中的子区间覆盖数值以及第二打分区间中的子区间的覆盖数值,确定数据单位的数据源节点所对应的数据接收节点包括:生成数据源节点对应的随机数,其中,随机数的数值在对应的数据源节点所属的数据单位对应的第一打分区间的子区间的覆盖范围内;确定随机数在第二打分区间中所属的子区间,将确定的子区间对应的数据接收节点确定为数据源节点所对应的数据接收节点;其中,第一打分区间和第二打分区间具有相同的起始点。

在一个实施例中,在数据源节点发送每个数据之前,在数据源节点所属的数据单位对应的第一打分区间中的子区间内生成随机数;将随机数在第二打分区间中所属的子区间对应的数据接收节点确定为数据源节点的数据所对应的数据接收节点。

在一个实施例中,根据每个数据接收节点的处理速率和/或负载,在第二打分区间中为每个数据单位分配具有相应比例的子区间。

在一个实施例中,分布式数据接收方法还包括:当某个数据接收节点发生故障时,重新为未发生故障的数据接收节点分配第二打分区间中的子区间。

根据本发明实施例的第二个方面,提供一种用于分布式数据接收的装置,包括:数据量统计模块,被配置为获取单位时间内每个数据单位的数据量,其中,每个数据单位具有一个或多个数据源节点;第一打分区间分配模块,被配置为根据每个数据单位的数据量占总数据量的比值,在第一打分区间中为每个数据单位分配具有相应比例的子区间;第二打分区间获取模块,被配置为获取第二打分区间中每个数据接收节点对应的子区间;收发关系确定模块,被配置为基于第一打分区间中的子区间覆盖范围以及第二打分区间中的子区间的覆盖范围,确定每个数据单位的数据源节点所对应的数据接收节点;发送指示模块,被配置为将每个数据源节点的数据发送给相应的数据接收节点。

在一个实施例中,收发关系确定模块进一步被配置为:生成数据源节点对应的随机数,其中,随机数的数值在对应的数据源节点所属的数据单位对应的第一打分区间的子区间的覆盖范围内;确定随机数在第二打分区间中所属的子区间,将确定的子区间对应的数据接收节点确定为数据源节点所对应的数据接收节点;其中,第一打分区间和第二打分区间具有相同的起始点。

在一个实施例中,收发关系确定模块进一步被配置为:在数据源节点发送每个数据之前,在数据源节点所属的数据单位对应的第一打分区间中的子区间内生成随机数;将随机数在第二打分区间中所属的子区间对应的数据接收节点确定为数据源节点的数据所对应的数据接收节点。

在一个实施例中,第二打分区间获取模块进一步被配置为根据每个数据接收节点的处理速率和/或负载,在第二打分区间中为每个数据单位分配具有相应比例的子区间。

在一个实施例中,第二打分区间获取模块进一步被配置为当某个数据接收节点发生故障时,重新为未发生故障的数据接收节点分配第二打分区间中的子区间。

根据本发明实施例的第三个方面,提供一种分布式数据接收系统,包括:前述任意一种用于分布式数据接收的装置;若干数据源节点,用于根据用于分布式数据接收的装置的指示将数据发送给相应的数据接收节点;若干数据接收节点,用于数据源节点发送的数据,并将数据存储到分布式文件系统中;和分布式文件系统。

根据本发明实施例的第四个方面,提供一种用于分布式数据接收的装置,包括:存储器;以及耦接至存储器的处理器,处理器被配置为基于存储在存储器中的指令,执行前述任意一种分布式数据接收方法。

根据本发明实施例的第五个方面,提供一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现前述任意一种分布式数据接收方法。

上述发明中的一个实施例具有如下优点或有益效果:本发明能够通过划分打分区间的方法将数据单位的数据源节点与具有相应处理能力的数据接收节点进行匹配,从而使数据接收节点能够均匀地处理数据,避免单一数据接收节点的压力过大,提高了数据接收的效率。

通过以下参照附图对本发明的示例性实施例的详细描述,本发明的其它特征及其优点将会变得清楚。

附图说明

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

图1为本发明分布式数据接收方法一个实施例的应用场景图。

图2为本发明分布式数据接收方法的一个实施例的流程图。

图3为第一打分区间和第二打分区间的划分结果示意图。

图4为本发明用于分布式数据接收的装置的一个实施例的结构图。

图5为本发明用于分布式数据接收的装置的另一个实施例的结构图。

图6为本发明用于分布式数据接收的装置的又一个实施例的结构图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。以下对至少一个示例性实施例的描述实际上仅仅是说明性的,决不作为对本发明及其应用或使用的任何限制。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对布置、数字表达式和数值不限制本发明的范围。

同时,应当明白,为了便于描述,附图中所示出的各个部分的尺寸并不是按照实际的比例关系绘制的。

对于相关领域普通技术人员已知的技术、方法和设备可能不作详细讨论,但在适当情况下,所述技术、方法和设备应当被视为授权说明书的一部分。

在这里示出和讨论的所有示例中,任何具体值应被解释为仅仅是示例性的,而不是作为限制。因此,示例性实施例的其它示例可以具有不同的值。

应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步讨论。

图1为本发明分布式数据接收方法一个实施例的应用场景图。如图1所示,在该实施例的应用场景中,包括:若干数据源节点111、112…11n,若干数据接收节点121、122…12m,以及分布式文件系统13和用于分布式数据接收的装置14。

数据源节点111、112…11n根据用于分布式数据接收的装置14的指示,将数据发送给相应的数据接收节点121、122…12m。数据接收节点121、122…12m在接收到数据后,将数据交由分布式文件系统13进行持久化存储。

分布式文件系统13中可以包括一个或多个设备,还可以包括一个或多个存储位置、存储目录等等,接收的数据可以根据需要存储在分布式文件系统13中的不同位置,这里不再赘述。

可以搭建分布式系统基础架构hadoop集群来实现分布式文件系统13。该分布式系统基础架构实现了一个分布式文件系统(hadoopdistributedfilesystem,简称:hdfs),具有高容错性、高吞吐量的特点,适合拥有超大数据集的应用程序。

目前业内主要使用开源的分布式发布订阅消息系统kafka集群作为下游数据的数据总线(datahub)。但是由于这种分布式发布订阅消息系统的数据操作伴随着大量的磁盘操作,导致其很难处理更大量的实时数据流;并且,也无法根据文件名进行数据落地。

而如果直接通过流式处理框架sparkstreaming程序将数据保存到hdfs,会由于这种框架分布式微批处理的特性而导致在一个目录下生成很多小文件的情况。

本发明可以选择搭建日志收集系统flume集群来实现数据的中间处理。在使用该日志收集系统时,可以预先将文件路径和文件名加入头文件(header),日志收集系统通过解析头文件来判断数据应该生成到哪一个文件,从而数据就可以保存到分布式文件系统的指定路径下。该日志收集系统中,以代理为最小的独立运行单位,该代理即可以为本申请中的数据接收节点121、122…12m。

目前,该日志收集系统主要用于日志的收集,而本发明将其应用于数据落地、即接收数据并持久化存储的应用场景,以更好地实现数据落地场景中的数据接收。

下面参考图2描述本发明一个实施例的分布式数据接收方法。

图2为本发明分布式数据接收方法的一个实施例的流程图。如图2所示,该实施例的分布式数据接收方法包括步骤s202~s210。

在步骤s202中,获取单位时间内每个数据单位的数据量,其中,每个数据单位具有一个或多个数据源节点。

数据单位可以指数据的供应方、或者数据的类型等等。例如,当对运营商的各个省份的数据进行接收时,每个省份可以视为一个数据单位;当对网站的数据进行接收时,用户数据、日志数据、访问数据可以分别视为一个数据单位。本领域技术人员可以根据需要进行设置。

每个数据单位通过一个或多个数据源节点发送数据。

在步骤s204中,根据每个数据单位的数据量占总数据量的比值,在第一打分区间中为每个数据单位分配具有相应比例的子区间。

第一打分区间描述了数据源侧各个数据单位的数据分布情况。

可以将某个固定长度的区间划分为与数据单位的数量相等的子区间,每个子区间的长度等于每个数据单位的数据量占总数据量的比值与该固定长度的乘积。即,每个数据单位分配的子区间的长度与每个数据单位的数据量占总数据量的比值成正比。

在步骤s206中,获取第二打分区间中每个数据接收节点对应的子区间。

第二打分区间描述了数据接收侧各个数据接收节点的数据处理能力。

在一个实施例中,可以根据每个数据接收节点的处理速率和/或负载,在第二打分区间中为每个数据单位分配具有相应比例的子区间。即,数据接收节点的子区间长度与其处理速率和/或负载成正比。

这种方法可以根据数据接收节点的处理速率和负载的变化实时地调整子区间的长度,比较灵活。

在一个实施例中,可以将第二打分区间按照数据接收节点的数量进行平均划分,并分配给各个数据接收节点。

由于在某些应用场景下,不同数据处理节点之间的处理能力相差不大,因此也可以不采用动态调整的方式,而采用上述平均分配的方式,以简化处理流程。

在步骤s208中,基于第一打分区间中的子区间覆盖范围以及第二打分区间中的子区间的覆盖范围,确定每个数据单位的数据源节点所对应的数据接收节点。

可以将第一打分区间中的子区间与第二打分区间中的子区间进行对应,覆盖范围有重叠的两种子区间分别对应的数据源节点和数据接收节点可以视为相应的节点。

图3为第一打分区间和第二打分区间的划分结果示意图。在图3中,位于上方的坐标轴表示第一打分区间,即对数据单位的子区间的分配结果;位于下方的坐标轴表示第二打分区间,即对数据接收节点的子区间的分配结果。为了便于查看,每个坐标轴上方的、位于每个子区间中的数字代表相应的数据单位或数据接收节点的标识,每个坐标轴下方的、位于每个子区间的端点的数字表示每个子区间的端点数值。

如图3所示,在第一打分区间中,数据单位1~10的子区间的覆盖范围依次为[0,100)、[100,150)、[150,250)、[250,400)、[400,450)、[450,580)、[580,720)、[720,800)、[800,950)、[950,1000];在第二打分区间中,数据接收节点1~5的子区间的覆盖范围依次为[0,220)、[220,300)、[300,500)、[500,800)、[800,1000]。

由图3可知,数据单位1~3的子区间均与数据接收节点1的子区间的覆盖范围有交集,从而,可以令数据单位1~3的数据源节点将数据发送给数据接收节点1。数据单位3的子区间与数据接收节点2的子区间的覆盖范围也有交集,因此数据单位3还可以与数据接收节点2相对应。

为了便于说明,图3所示的第一打分区间和第二打分区间具有相同的起始点,均为从0至1000。本领域技术人员应当清楚,根据需要,第一打分区间和第二打分区间还可以具有不同的起始点、不同的覆盖长度,在确定相应的子区间时,可以根据起始点的数值、将两个打分区间中的点进行映射,或者将其中一个打分区间进行缩放和平移处理,这里不再赘述。

在步骤s210中,将每个数据源节点的数据发送给相应的数据接收节点。

通过上述实施例的方法,能够通过划分打分区间的方法将数据单位的数据源节点与具有相应处理能力的数据接收节点进行匹配,从而使数据接收节点能够均匀地处理数据,避免单一数据接收节点的压力过大,提高了数据接收的效率。

并且,由于数据源节点仅与特定的数据接收节点对应,因此数据源节点能够将数据根据要求连续地发送给特定的数据接收节点,使相同数据单位的数据不是完全随机发送到下游的所有数据接收节点的,而是以连续的方式发送给一个或多个相邻的数据接收节点,从而进一步增强了实施过程中的可用性,提高了数据接收和处理的效率。

可以采用多种方式确定数据单位的数据源节点对应的数据接收节点以及发送数据。下面仍参考图3进行描述。

第一种方式为,令某个数据单位的子区间与一个或多个数据接收节点的子区间有交集,则令该数据单位的数据源节点与这一个或多个数据接收节点对应。

以图3为例,数据单位3的子区间为[150,250),与数据接收节点1的子区间[0,220)和数据接收节点2的子区间[220,300)有交集,则可以令数据单位3的数据源节点与数据接收节点1和2对应。

在一个实施例中,可以令数据单位的数据源节点随机地将数据发送给相应的一个或多个数据接收节点。

例如,在图3的应用场景下,可以令数据单位3的数据源节点随机地将数据发送给数据接收节点1或2。

在一个实施例中,也可以令数据单位的数据源节点平均地将数据发送给相应的一个或多个数据接收节点。

例如,在图3的应用场景下,可以令数据单位3的数据源节点平均地将数据发送给数据接收节点1或2。

在一个实施例中,还可以令数据单位的数据源节点按照交集的比例,令数据单位的数据源节点将数据发送给相应的一个或多个数据接收节点。

例如,数据单位3的子区间与数据接收节点1的子区间的交集区间长度为70、与数据接收节点2的子区间的交集区间长度为30,则可以令数据单位3的数据源节点将70%的数据发送给数据接收节点1、将30%的数据发送给数据接收节点2。

第二种方式为,可以生成数据源节点对应的随机数,其中,随机数的数值在对应的数据源节点所属的数据单位对应的第一打分区间的子区间的覆盖范围内;确定所述随机数在第二打分区间中所属的子区间,将确定的子区间对应的数据接收节点确定为数据源节点所对应的数据接收节点;其中,第一打分区间和第二打分区间具有相同的起始点。

仍以图3为例,数据单位3的源数据节点在发送数据之前,可以基于数据单位3的子区间[150,250)生成数值在[150,250)内的随机数。例如,当生成的随机数为183时,检测到183属于数据接收节点1的子区间[0,220),则令数据单位3的数据源节点将数据发送给数据接收节点1;当生成的随机数为241时,检测到241属于数据接收节点2的子区间[220,300),则令数据单位3的数据源节点将数据发送给数据接收节点2。

在一个实施例中,可以在数据源节点发送每个数据之前,在数据源节点所属的数据单位对应的第一打分区间中的子区间内生成随机数,并将随机数在第二打分区间中所属的子区间对应的数据接收节点确定为数据源节点的数据所对应的数据接收节点。

根据需要,也可以每隔预设的时间采用上述方式生成一次随机数,并在预设时间内将数据发送给随机数对应的数据接收节点。

本实施例还能够应对数据接收节点发生故障的情况。

在一个实施例中,当某个数据接收节点发生故障时,重新为未发生故障的数据接收节点分配第二打分区间中的子区间。

例如,当采用平均分配的方式时,为数据接收节点1~10分配长度为1000的第二打分区间,即,每个数据接收节点的子区间的长度为100。当检测到其中一个数据接收节点10发生故障时,重新为数据接收节点1~9平均分配长度为1000的第二打分区间,即,每个数据接收节点的子区间长度为1000/9。

当然,该方法也适用于对数据接收节点的子区间进行动态分配的情况,在这种情况下,可以根据数据接收节点1~9的处理速率、负载等指标对长度为1000的第二打分区间进行划分,这里不再赘述。

从而,即使部分数据接收节点发生故障,本发明的实施例的方法也能够进行快速的调整,使进行调整后,数据接收节点仍然能够具有较小的处理压力,保障了数据接收的效率。

下面参考图4描述本发明一个实施例的用于分布式数据接收的装置。

图4为本发明用于分布式数据接收的装置的一个实施例的结构图。如图4所示,该实施例的用于分布式数据接收的装置包括:数据量统计模块41,被配置为获取单位时间内每个数据单位的数据量,其中,每个数据单位具有一个或多个数据源节点;第一打分区间分配模块42,被配置为根据每个数据单位的数据量占总数据量的比值,在第一打分区间中为每个数据单位分配具有相应比例的子区间;第二打分区间获取模块43,被配置为获取第二打分区间中每个数据接收节点对应的子区间;收发关系确定模块44,被配置为基于第一打分区间中的子区间覆盖范围以及第二打分区间中的子区间的覆盖范围,确定每个数据单位的数据源节点所对应的数据接收节点;发送指示模块45,被配置为将每个数据源节点的数据发送给相应的数据接收节点。

在一个实施例中,收发关系确定模块44进一步被配置为:生成数据源节点对应的随机数,其中,随机数的数值在对应的数据源节点所属的数据单位对应的第一打分区间的子区间的覆盖范围内;确定所述随机数在第二打分区间中所属的子区间,将确定的子区间对应的数据接收节点确定为数据源节点所对应的数据接收节点;其中,第一打分区间和第二打分区间具有相同的起始点。

在一个实施例中,收发关系确定模块44进一步被配置为:在数据源节点发送每个数据之前,在数据源节点所属的数据单位对应的第一打分区间中的子区间内生成随机数;将所述随机数在第二打分区间中所属的子区间对应的数据接收节点确定为数据源节点的数据所对应的数据接收节点。

在一个实施例中,第二打分区间获取模块43可以进一步被配置为根据每个数据接收节点的处理速率和/或负载,在第二打分区间中为每个数据单位分配具有相应比例的子区间。

在一个实施例中,第二打分区间获取模块43可以进一步被配置为当某个数据接收节点发生故障时,重新为未发生故障的数据接收节点分配第二打分区间中的子区间。

图5为本发明用于分布式数据接收的装置的另一个实施例的结构图。如图5所示,该实施例的装置500包括:存储器510以及耦接至该存储器510的处理器520,处理器520被配置为基于存储在存储器510中的指令,执行前述任意一个实施例中的分布式数据接收方法。

其中,存储器510例如可以包括系统存储器、固定非易失性存储介质等。系统存储器例如存储有操作系统、应用程序、引导装载程序(bootloader)以及其他程序等。

图6为本发明用于分布式数据接收的装置的又一个实施例的结构图。如图6所示,该实施例的装置600包括:存储器610以及处理器620,还可以包括输入输出接口630、网络接口640、存储接口650等。这些接口630,640,650以及存储器610和处理器620之间例如可以通过总线660连接。其中,输入输出接口630为显示器、鼠标、键盘、触摸屏等输入输出设备提供连接接口。网络接口640为各种联网设备提供连接接口。存储接口650为sd卡、u盘等外置存储设备提供连接接口。

本发明的实施例还提供一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现前述任意一种分布式数据接收方法。

本领域内的技术人员应当明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用非瞬时性存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解为可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

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