数据处理方法、装置、设备和存储介质与流程

文档序号:31051667发布日期:2022-08-06 07:37阅读:70来源:国知局
数据处理方法、装置、设备和存储介质与流程

1.本技术涉及数据处理技术领域,具体而言,涉及一种数据处理方法、装置、设备和存储介质。


背景技术:

2.当前数据抽取服务为了克服传统集中式系统导致的中心主机资源紧张与性能瓶颈的缺陷,会采用分布式系统设计,使用并行技术保障高效的性能,通常的方式为任务并行和数据并行。比如不同的主机节点执行不同的抽取任务即为任务并行,任务拆分后由所有节点共同完成即为数据并行。
3.但是现有的并行技术中,笼统的将数据抽取任务采取并行方式执行,并没有充分考虑集群中各个节点资源的实际承受能力,造成资源的分配不均,产生资源浪费,未能充分发挥分布式集群的计算性能。
4.上述两种方式在数据抽取的过程中都会存在资源利用率低下的缺陷,因此,如何解决数据抽取过程中节点的资源分配调度不均的问题,以高效利用集群的资源,成为一个亟待解决的技术问题。


技术实现要素:

5.本技术实施例的目的在于提供一种数据处理方法、装置、设备和存储介质,可以解决数据抽取过程中节点的资源分配调度不均的问题,以高效利用集群的资源,提高分布式集群的资源利用率。
6.本技术实施例第一方面提供了一种数据处理方法,包括:获取待处理数据的数据总量,所述待处理数据对应于当前数据处理任务;根据所述待处理数据的数据总量,确定所述待处理数据对应的内存占用总量;基于所述内存占用总量、预设内存阈值和分布式集群中当前可用内存资源量,为所述数据处理任务分配对应的节点资源和执行方案。
7.于一实施例中,所述根据所述待处理数据的数据总量,确定所述待处理数据对应的内存占用总量,包括:根据所述待处理数据的数据总量,确定样本量;根据所述样本量和分层特征对所述待处理数据进行抽样,得到抽样数据;根据所述抽样数据,确定所述待处理数据中每条数据对应的平均内存占用量;根据所述平均内存占用量和所述数据总量确定所述待处理数据对应的所述内存占用总量。
8.于一实施例中,还包括:采用如下公式确定所述样本量:
[0009][0010]
其中,n为所述当前数据处理任务对应的待处理数据需要的样本量,z为置信水平对应的置信度,α为显著水平,p为相关属性比例,e为误差幅度。
[0011]
于一实施例中,所述根据所述抽样数据,确定所述待处理数据中每条数据对应的平均内存占用量,包括:对所述抽样数据进行有效性分析,从中提取所述抽样数据的有效响
应体;根据所述有效响应体确定所述待处理数据中每条数据对应的平均内存占用量。
[0012]
于一实施例中,所述基于所述内存占用总量、预设内存阈值和分布式集群中当前可用内存资源量,为所述数据处理任务分配对应的节点资源和执行方案,包括:判断所述内存占用总量是否大于所述当前可用内存资源量;当所述内存占用总量小于或等于所述当前可用内存资源量时,判断所述内存占用总量是否大于所述预设内存阈值;当所述内存占用总量大于所述预设内存阈值时,按照预期并行度将所述数据处理任务拆分成多个子任务;基于所述分布式集群中各个节点对应的当前可用内存资源比例,为所述多个子任务分配对应的第一目标节点,并确定所述执行方案为多个子任务并行执行。
[0013]
于一实施例中,所述基于所述分布式集群中各个节点对应的当前可用内存资源比例,为所述多个子任务分配对应的第一目标节点,包括:从所述分布式集群中选出多个第一候选节点,所述第一候选节点的当前可用资源量大于或等于每个所述子任务需要的内存占用量;基于所述多个第一候选节点中各个节点对应的当前可用内存资源比例,为所述多个子任务依次分配第一目标节点,所述第一目标节点为所述多个第一候选节点中所述当前可用内存资源占比最大的节点。
[0014]
于一实施例中,所述基于所述内存占用总量、预设内存阈值和分布式集群中当前可用内存资源量,为所述数据处理任务分配对应的节点资源和执行方案,还包括:当所述内存占用总量小于或等于所述预设内存阈值时,基于所述分布式集群中各个节点对应的当前可用内存资源比例,为所述数据处理任务分配对应的第二目标节点,确定所述执行方案为按照并行度为1执行所述数据处理任务分。
[0015]
于一实施例中,所述基于所述分布式集群中各个节点对应的当前可用内存资源比例,为所述数据处理任务分配对应的第二目标节点,包括:从所述分布式集群中选出多个第二候选节点,所述第二候选节点的当前可用资源量大于或等于每个数据处理任务需要的内存占用量;基于所述多个第二候选节点中各个节点对应的当前可用内存资源比例,为所述数据处理任务分配第二目标节点,所述第二目标节点为所述多个第二候选节点中所述当前可用内存资源占比最大的节点。
[0016]
于一实施例中,所述基于所述内存占用总量、预设内存阈值和分布式集群中当前可用内存资源量,为所述数据处理任务分配对应的节点资源和执行方案,还包括:当所述内存占用总量大于所述当前可用内存资源量时,按照所述预期并行度将所述数据处理任务拆分成多个子任务;基于所述分布式集群中各个节点对应的当前可用内存资源比例,为所述多个子任务分配对应的第三目标节点,并确定所述执行方案为同一个所述第三目标节点上的多个所述子任务串行执行,不同的所述第三目标节点之间的所述子任务并行执行。
[0017]
于一实施例中,所述基于所述分布式集群中各个节点对应的当前可用内存资源比例,为所述多个子任务分配对应的第三目标节点,包括:从所述分布式集群中选出多个第三候选节点,所述第三候选节点的当前可用资源量大于或等于每个所述子任务需要的内存占用量;基于所述多个第三候选节点中各个节点对应的当前可用内存资源比例,为所述多个子任务依次分配第三目标节点,所述第三目标节点为所述多个第三候选节点中所述当前可用内存资源占比最大的节点。
[0018]
于一实施例中,在所述基于所述内存占用总量、预设内存阈值和分布式集群中当前可用内存资源量,为所述数据处理任务分配对应的节点资源和执行方案之后,还包括:按
照节点资源分配结果和所述执行方案执行所述数据处理任务。
[0019]
于一实施例中,所述按照节点资源分配结果和所述执行方案执行所述数据处理任务,包括:按照所述节点资源分配结果,将对应的处理任务或子任务下发至对应的目标节点;通过所述目标节点申请内存资源,并按照所述执行方案执行所述处理任务或子任务。
[0020]
于一实施例中,在所述按照节点资源分配结果和所述执行方案执行所述数据处理任务之后,还包括:动态释放对应的节点资源。
[0021]
于一实施例中,所述获取待处理数据的数据总量,所述待处理数据对应于当前数据处理任务,包括:提取所述当前数据处理任务中的任务描述,所述任务描述中包括:待抽取的目标数据源的定义和待抽取数据集的定义;根据所述目标数据源的定义和所述待抽取数据集的定义,从所述目标数据源中查询所述待抽取数据集的所述数据总量。
[0022]
本技术实施例第二方面提供了一种数据处理装置,包括:获取模块,用于获取待处理数据的数据总量,所述待处理数据对应于当前数据处理任务;确定模块,用于根据所述待处理数据的数据总量,确定所述待处理数据对应的内存占用总量;分配模块,用于基于所述内存占用总量、预设内存阈值和分布式集群中当前可用内存资源量,为所述数据处理任务分配对应的节点资源和执行方案。
[0023]
于一实施例中,所述确定模块用于:根据所述待处理数据的数据总量,确定样本量;根据所述样本量和分层特征对所述待处理数据进行抽样,得到抽样数据;根据所述抽样数据,确定所述待处理数据中每条数据对应的平均内存占用量;根据所述平均内存占用量和所述数据总量确定所述待处理数据对应的所述内存占用总量。
[0024]
于一实施例中,所述确定模块用于:采用如下公式确定所述样本量:
[0025][0026]
其中,n为所述当前数据处理任务对应的待处理数据需要的样本量,z为置信水平对应的置信度,α为显著水平,p为相关属性比例,e为误差幅度。
[0027]
于一实施例中,所述确定模块用于:对所述抽样数据进行有效性分析,从中提取所述抽样数据的有效响应体;根据所述有效响应体确定所述待处理数据中每条数据对应的平均内存占用量。
[0028]
于一实施例中,所述分配模块用于:判断所述内存占用总量是否大于所述当前可用内存资源量;当所述内存占用总量小于或等于所述当前可用内存资源量时,判断所述内存占用总量是否大于所述预设内存阈值;当所述内存占用总量大于所述预设内存阈值时,按照预期并行度将所述数据处理任务拆分成多个子任务;基于所述分布式集群中各个节点对应的当前可用内存资源比例,为所述多个子任务分配对应的第一目标节点,并确定所述执行方案为多个子任务并行执行。
[0029]
于一实施例中,所述分配模块用于:从所述分布式集群中选出多个第一候选节点,所述第一候选节点的当前可用资源量大于或等于每个所述子任务需要的内存占用量;基于所述多个第一候选节点中各个节点对应的当前可用内存资源比例,为所述多个子任务依次分配第一目标节点,所述第一目标节点为所述多个第一候选节点中所述当前可用内存资源占比最大的节点。
[0030]
于一实施例中,所述分配模块用于:当所述内存占用总量小于或等于所述预设内
存阈值时,基于所述分布式集群中各个节点对应的当前可用内存资源比例,为所述数据处理任务分配对应的第二目标节点,确定所述执行方案为按照并行度为1执行所述数据处理任务分。
[0031]
于一实施例中,所述分配模块用于:从所述分布式集群中选出多个第二候选节点,所述第二候选节点的当前可用资源量大于或等于每个数据处理任务需要的内存占用量;基于所述多个第二候选节点中各个节点对应的当前可用内存资源比例,为所述数据处理任务分配第二目标节点,所述第二目标节点为所述多个第二候选节点中所述当前可用内存资源占比最大的节点。
[0032]
于一实施例中,所述分配模块用于:当所述内存占用总量大于所述当前可用内存资源量时,按照所述预期并行度将所述数据处理任务拆分成多个子任务;基于所述分布式集群中各个节点对应的当前可用内存资源比例,为所述多个子任务分配对应的第三目标节点,并确定所述执行方案为同一个所述第三目标节点上的多个所述子任务串行执行,不同的所述第三目标节点之间的所述子任务并行执行。
[0033]
于一实施例中,所述分配模块还用于:从所述分布式集群中选出多个第三候选节点,所述第三候选节点的当前可用资源量大于或等于每个所述子任务需要的内存占用量;基于所述多个第三候选节点中各个节点对应的当前可用内存资源比例,为所述多个子任务依次分配第三目标节点,所述第三目标节点为所述多个第三候选节点中所述当前可用内存资源占比最大的节点。
[0034]
于一实施例中,还包括:执行模块,用于在所述基于所述内存占用总量、预设内存阈值和分布式集群中当前可用内存资源量,为所述数据处理任务分配对应的节点资源和执行方案之后,按照节点资源分配结果和所述执行方案执行所述数据处理任务。
[0035]
于一实施例中,所述获取模块用于:提取所述当前数据处理任务中的任务描述,所述任务描述中包括:待抽取的目标数据源的定义和待抽取数据集的定义;根据所述目标数据源的定义和所述待抽取数据集的定义,从所述目标数据源中查询所述待抽取数据集的所述数据总量。
[0036]
于一实施例中,所述执行模块用于:按照所述节点资源分配结果,将对应的处理任务或子任务下发至对应的目标节点;通过所述目标节点申请内存资源,并按照所述执行方案执行所述处理任务或子任务。
[0037]
于一实施例中,还包括:释放模块,用于在所述按照节点资源分配结果和所述执行方案执行所述数据处理任务之后,动态释放对应的节点资源。
[0038]
本技术实施例第三方面提供了一种电子设备,包括:存储器,用以存储计算机程序;处理器,用以执行所述计算机程序,以实现本技术实施例第一方面及其任一实施例的方法。
[0039]
本技术实施例第四方面提供了一种非暂态电子设备可读存储介质,包括:程序,当其藉由电子设备运行时,使得所述电子设备执行本技术实施例第一方面及其任一实施例的方法。
[0040]
本技术提供的数据处理方法、装置、设备和存储介质,通过在数据处理量任务下发之前,根据待处理数据的数据总量预估需要的内存占用总量,然后基于内存占用总量、预设内存阈值和当前可用内存资源量分配执行策略,其中引入预设内存阈值来判别单个数据处
理任务是否需要进行拆分,可以充分考虑实际可用资源与数据处理任务的数据量,来适应性的分配资源,有效解决数据抽取过程中节点的资源分配调度不均的问题,,提高分布式集群的资源利用率。
附图说明
[0041]
为了更清楚地说明本技术实施例的技术方案,下面将对本技术实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本技术的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
[0042]
图1为本技术一实施例的电子设备的结构示意图;
[0043]
图2为本技术一实施例的数据处理方法的流程示意图;
[0044]
图3为本技术一实施例的数据处理方法的流程示意图;
[0045]
图4本技术一实施例的数据处理装置的结构示意图。
具体实施方式
[0046]
下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行描述。在本技术的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
[0047]
如图1所示,本实施例提供一种电子设备1,包括:至少一个处理器11和存储器12,图1中以一个处理器为例。处理器11和存储器12通过总线10连接。存储器12存储有可被处理器11执行的指令,指令被处理器11执行,以使电子设备1可执行下述的实施例中方法的全部或部分流程,以实现缓解分布式集群中数据处理任务执行过程中资源分配不均的问题,提高分布式集群的资源利用率。
[0048]
于一实施例中,电子设备1可以是手机、平板电脑、笔记本电脑、台式计算机或者多个计算机设备组成大型运算系统等设备。在实际场景中,数据处理任务可以是数据抽取任务或者数据运算任务,此处。当前数据抽取服务为了克服传统集中式系统导致的中心主机资源紧张与性能瓶颈的缺陷,会采用分布式系统设计,使用并行技术保障高效的性能,通常的方式为任务并行和数据并行。
[0049]
任务并行的方式,由于每个任务抽取的数据量大小不同,可能会产生严重的数据倾斜,比如当大数据量的任务被分配到同一个节点,导致该节点的资源占用可能满负载,拉低性能,严重时甚至导致节点宕机,如果有故障转移的机制,会产生雪崩效应,给数据抽取服务的稳定性带来极大挑战;同时其他的集群节点资源空闲,造成资源的分配不均,产生资源浪费。
[0050]
数据并行的方式,由于数据被拆分后分发到所有节点共同完成,可以避免任务并行方式带来的数据热点和集群资源利用率的问题,但所有节点都参与任务执行,集群的能力受到木桶效应限制,比如集群的物理节点资源不均,那集群的能力受限于资源最少的节点,无法完全利用高性能节点的资源;同时为了管理任务的整体执行进度,各个节点之间会有大量的网络通信,对于数据量比较小的任务而言,这些网络io(input/output,输入/输出)通信也是一种资源的浪费。
[0051]
以rpa(robotic process automation,机器人流程自动化)数据业务系统中的数据抽取为例,在rpa数据业务系统中,当需要通过api接口抽取rpa执行数据来做数据可视化分析时,这类待处理数据包含多种维度,有些数据量会随着机器人和流程的增多呈线性增长趋势,比如机器人任务的执行数据等。有些数据量比较少且增长稳定,比如设备数据。这种场景下的数据抽取任务往往要求保证稳定高效,然而现有的数据抽取任务执行方式,往往因为节点的资源分配调度不均而导致数据抽取异常。
[0052]
为了解决上述问题,本技术提供一种数据处理方法,以避免因为节点的资源分配调度不均而导致数据抽取异常。下面结合图文详细描述本技术的数据处理方法。
[0053]
请参看图2,其为本技术一实施例的数据处理方法,该方法可由图1所示的电子设备1来执行,并可以应用于上述rpa数据业务系统中,以缓解分布式集群中数据处理任务执行过程中资源分配不均的问题,提高分布式集群的资源利用率。该方法包括如下步骤:
[0054]
步骤201:获取待处理数据的数据总量。在本步骤中,待处理数据为当前数据处理任务需要处理的数据,每个数据处理任务都会包含任务描述,任务描述可以定义待处理数据的来源。
[0055]
于一实施例中,步骤201具体可以包括:提取所述当前数据处理任务中的任务描述,所述任务描述中包括:待抽取的数据源的定义和待抽取数据集的定义;根据所述数据源的定义和所述待抽取数据集的定义,从所述数据源中查询所述待抽取数据集的所述数据总量。
[0056]
以数据抽取任务为例,每个数据抽取任务的任务描述包含但不限于:待抽取的数据源的定义和待抽取数据集的定义。其中数据源可以是待抽取数据所在的数据库,则数据源的定义可以是待抽取数据所在的数据库的名称或者连接到目标数据源的api(application programming interface,应用程序接口)接口等信息。假设数据源为a数据库,则待抽取数据集可以是a数据库中的一个数据集合,比如一个表格或者文档,待抽取数据集的定义比如可以是a数据库中t表的名称,或者假设数据源为某个数据系统的api接口,则待抽取数据集的定义可以是该api接口的定义,比如该api接口的名称以及该接口参数等信息。。
[0057]
于一实施例中,数据抽取任务的任务描述还可以包含预期并行度,预期并行度可以是该数据抽取任务被配置的子任务并行数量,比如期望有3个子任务并行执行,那么预期并行度就是3。
[0058]
于一实施例中,数据抽取任务的任务描述还可以包含目标数据源,目标数据源用来存放抽取出来的数据,也就是说待抽取数据集从数据源抽取出来后,会放在目标数据源中,该目标数据源比如可以是clickhouse(一个用于联机分析的列式数据库管理系统)数据库、kafka(一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据。)数据库等。
[0059]
实际场景中,可以根据数据抽取任务中描述的待抽取的数据源的定义和待抽取数据集的定义,获取该数据抽取任务需要抽取的数据总量大小。比如上述在rpa数据业务系统中抽取数据的场景中,以上述rpa数据业务系统作为数据源,数据抽取任务的任务描述中,数据源的定义为api接口,表示通过api接口的方式连接到rpa数据业务系统,待抽取数据集的定义为:具体api接口的名称b,接口参数为分页条件查询明细数据和数据总量,表示通过
api接口b以分页的方式在rpa数据业务系统中查询每页的明细数据,并返回数据总量。可以先基于上述接口参数调用一次api接口b,来获取到该数据抽取任务的数据总量。
[0060]
步骤202:根据待处理数据的数据总量,确定待处理数据对应的内存占用总量。
[0061]
在本步骤中,在获取到待处理数据的数据总量大小后,即可确定出在执行当前数据处理任务时,待处理数据需要的内存占用总量。由于待处理数据可能是非常庞大的,为了节省运算成本,可以采用抽样的方式,获取到待处理数据的抽样数据,依据抽样数据来预估待处理数据需要的内存占用总量。
[0062]
于一实施例中,步骤202具体可以包括:根据待处理数据的数据总量,确定样本量。根据样本量和分层特征对待处理数据进行抽样,得到抽样数据。根据抽样数据,确定待处理数据中每条数据对应的平均内存占用量。根据平均内存占用量和数据总量确定待处理数据对应的内存占用总量。
[0063]
在本步骤中,首先计算抽样的样本量,可以采用cochran(科克伦定理)公式来计算样本量n:
[0064][0065]
其中,n为当前数据处理任务对应的待处理数据需要的样本量,z为置信水平对应的置信度,一般概率为90%、95%、99%时,对应的置信度分别为1.645、1.96、2.575,实际场景中可以根据rpa数据业务系统的特性和待处理数据的数据总量计算得到合适的置信度。α为显著水平,p为待处理数据中的相关属性比例,即待处理数据中某种属性占总体的比例,可以基于经验数据统计得到p的取值,本实施例中p(1-p)优选最大值为0.25。e为误差幅度,实际场景中,误差幅度小于或等于1.5%,当前数据处理任务的数据量越大,误差幅度的越小。
[0066]
本实施例采用分层抽样的方式,分层抽样是从一个可以分成不同子总体(或称为层)的总体中,按规定的比例从不同层中随机抽取样品(个体)的方法,这种方法的优点是,样本的代表性比较好,抽样误差比较小。分层抽样需要确定分层特征,分层特征一般基于待处理数据的属性进行确定。一般以数据中的非业务属性字段作为分层特征,因为一批数据中一般所属的业务属性是相同的,业务属性无法让待处理数据的不同层区分开来,因此分层特征的选择一般与数据自身业务无关。可以选取反映数据大小周期性变化的分层特征,比如数据的创建时间。
[0067]
以上述在rpa数据业务系统中抽取机器人运行数据的场景为例,由于实际中对机器人运行数据进行分析时,往往需要知道机器人运行数据大小随着时间的周期性变化,因此可以将数据创建时间作为分层特征。首先确定分层特征的离散区间,离散区间是指相邻两层分层特征之间的距离,比如分层特征是数据创建时间,则离散区间是指相邻两层分层特征之间的时间距离。比如基于数据创建时间确定的离散区间为2小时,则可以将待处理数据中每2个小时内创建的数据作为一层,如此可以将待处理数据划分为多个层。然后根据分层特征查询各个分层的数据量,执行stratified sampling(分层抽样),若某个分层特征对应的样本量偏大或偏小,可调整分层特征的离散区间,得到抽样数据。
[0068]
于一实施例中,如果某个分层特征对应的样本数据量过大,会导致其他分层特征对应的样本量占比较小,此时可以将样本量占比较小的临近的分层整合,再以整合后的分
层特征的数据量的比例,确定样本的分布区间,然后基于新确定的样本的分布区间执行抽样,得到样本数据。比如待处理数据为1天的数据,按照2小时一层将待处理数据分为12层,假设第一层内2个小时内的样本数据量、以及第二层内2个小时内的样本数据量都远小于第三层内2个小时内的样本数据量,说明第三层内2个小时内的样本数据量占比过大,第一层和第一层的样本数据量占比较小,假设前4小时(前两层)内的样本数据量加在一起与第三层内2个小时内的样本数据量相差不大,说明第一层和第二层的样本数据其实一次就可以抽取出来,没有必要分成两层,分成两层反而增加工作量,因此可以进行分层特征的整合重新确定样本分布空间。可以将前两层的数据合并为一个层,再进行抽样处理,如此,原本的两个层变成一个层,减少了一次抽样操作,可以提高计算效率。
[0069]
于一实施例中,由于实际场景中一条待处理数据一般都是多维度的,可能包含数据头部描述、尾部描述以及数据体data,只有data部分的数据对于内存占用预估是有效的,因此为了简化运算量,可以对于分层抽样返回的抽样数据进行有效性分析,从中提取抽样数据的有效响应体(比如data数据),用于计算待处理数据中每条数据对应的平均内存占用量。
[0070]
于一实施例中,可以首先确定出抽样数据中各个数据的平均内存占用量,然后以抽样来代表全体,将抽样的平均内存占用代表整体的平均内存占用量。具体地,可以计算抽样数据的平均大小,换算成平均内存占用量。换算方式可以是直接计算每一条抽样数据的字节大小,然后计算出所有抽样数据的总字节大小,将所有抽样数据的总字节大小除以抽样数据的总条数,可以求取平均值,将该平均值作为平均内存占用量。也可以基于抽样数据中对象的占用内存大小,求取每条抽样数据的内存占用大小,然后计算出所有抽样数据的总内存占用大小,将所有抽样数据的总内存占用大小除以抽样数据的总条数,得到平均值,将该平均值作为平均内存占用量。
[0071]
然后计算平均内存占用量和数据总量的乘积,得到该待处理数据对应的内存占用总量。
[0072]
步骤203:基于内存占用总量、预设内存阈值和分布式集群中当前可用内存资源量,为数据处理任务分配对应的节点资源和执行方案。
[0073]
在本步骤中,分布式集群一般包括多个计算机节点,每个节点具备相同或者不同的内存资源。当一个新的数据处理任务到来时,分布式集群的一些节点可能正在处理其他的任务,因此并不是所有的节点资源都是空闲的。因此在为当前的数据处理任务分配对应的节点资源和执行方案时,要先获取分布式集群中当前可用内存资源量,分配结果要在当前可用内存资源量的承受范围内,以避免数据阻塞造成系统崩溃。
[0074]
其中预设内存阈值为判别单个数据处理任务是否需要拆分时的门限内存量也就是说当一个数据处理任务需要的内存占用总量超过预设内存阈值时,是不允许这个数据处理任务由某一个节点单独处理的。也就不存在大数据量的任务集中在一个节点上的情况了。而预设内存阈值可以基于分布式集群中各个节点的可用资源进行设定。如此,根据集群当前可用内存资源量、内存占用总量和预设内存阈值,计算实际的并行度,生成执行方案和资源分配方案。充分考虑实际可用资源与数据处理任务的数据量,来适应性的分配资源,提高资源利用率。
[0075]
该预设内存阈值可以是默认设置的固定值,比如64m。也可以基于实际需求修改,
比如可以先采用如下公式确定初步内存阈值d:
[0076][0077]
其中,d为初步内存阈值,q为分布式集群中所有节点的内存资源总量,s为分布式集群中预期的同一时间最大并行任务数。比如分布式集群中包括3台服务器,每台内存资源为32g,则内存资源总量q=96g。预期的同一时间最大并行任务数s是1024,采用上述公式可以得到初步内存阈值d为48m,然后48m向下取32m(即取2的n次方)作为最终确定的预设内存阈值为32m。其中,内存资源总量q
×
0.5的含义是同一时间最大并行任务的资源占用量最大只能占到内存资源总量q的一半。内存资源总量q另外的50%中,有20%可以分给系统和堆外内存,有30%可以分给数据同步的服务。
[0078]
步骤204:按照节点资源分配结果和执行方案执行数据处理任务。
[0079]
在本步骤中,根据上一步生成的资源分配方案,将任务发送到各个目标节点,通过目标节点申请所需的内存资源,并可以通过线程亲和性绑定cpu,在同一核心上绑定的线程按照执行时长和资源使用量设置优先级。各节点资源分配完成后,任务即开始执行。
[0080]
步骤205:动态释放对应的节点资源。
[0081]
在本步骤中,任务执行完成后,释放资源,将空余的cpu资源动态调整给其他任务。若出现僵尸进程或资源占用时间超过最大占用时长阈值,则可以终止任务,避免其占用内存资源,提高集群的资源利用率。
[0082]
上述数据处理方法,通过在数据处理量任务下发之前,根据待处理数据的数据总量预估需要的内存占用总量,然后基于内存占用总量、预设内存阈值和当前可用内存资源量分配执行策略,其中引入预设内存阈值来判别单个数据处理任务是否需要进行拆分,可以充分考虑实际可用资源与数据处理任务的数据量,来适应性的分配资源,有效解决数据抽取过程中节点的资源分配调度不均的问题,,提高分布式集群的资源利用率。
[0083]
请参看图3,其为本技术一实施例的数据处理方法,该方法可由图1所示的电子设备1来执行,并可以应用于上述rpa数据业务系统中,以缓解分布式集群中数据处理任务执行过程中资源分配不均的问题,提高分布式集群的资源利用率。该方法包括如下步骤:
[0084]
步骤301:获取待处理数据的数据总量,待处理数据对应于当前数据处理任务。详细参见上述实施例中对步骤201的描述。
[0085]
步骤302:根据待处理数据的数据总量,确定待处理数据对应的内存占用总量。详细参见上述实施例中对步骤202的描述。
[0086]
步骤303:判断内存占用总量是否大于当前可用内存资源量。若是,进入步骤308,否则进入步骤304。
[0087]
在本步骤中,分布式集群一般包括多个计算机节点,每个节点具备相同或者不同的内存资源。当一个新的数据处理任务到来时,分布式集群的一些节点可能正在处理其他的任务,因此并不是所有的节点资源都是空闲的。因此在为当前的数据处理任务分配对应的节点资源和执行方案时,要判断当前需要的内存占用总量是否大于分布式集群中当前可用内存资源量,如果是,进入步骤308,否则进入步骤304。
[0088]
步骤304:判断内存占用总量是否大于预设内存阈值。若是,进入步骤305,否则进入步骤307。
[0089]
在本步骤中,资源分配结果要在当前可用内存资源量的承受范围内,如果内存占用总量小于或等于当前可用内存资源量时,说明集群中各节点剩余的可用资源充足,则进一步比较该数据处理任务所需要的内存占用总量是否大于预设内存阈值,若是,进入步骤305,否则进入步骤307。
[0090]
步骤305:按照预期并行度将数据处理任务拆分成多个子任务。然后进入步骤306。
[0091]
在本步骤中,当集群中剩余的节点资源充足,并且内存占用总量大于预设内存阈值时,说明该数据处理任务所需要的内存占用总量超过了该集群单个数据处理任务允许分配的最大内存量,为了避免这个大数据量任务集中在同一个节点中处理带来的资源利用不均问题,可以将该大数据量的抽取任务以数据并行的方式执行,即按照该数据处理任务中携带的预期并行度将数据处理任务拆分成多个子任务,如此,每个子任务将内存占用总量分散,合理利用集群中的节点资源。于一实施例中,任务拆分时,拆分的不均匀,仍然会出现大量数据集中在同一个节点的问题。因此任务拆分方式可以采用均分的方式。通过把大数据量的任务近乎等分成一个个的数据段,各个数据段形成多个子任务,分给目标节点执行,可以缓解集群的木桶效应问题。
[0092]
于一实施例中,在任务拆分时,可以将预设内存阈值考虑进去,保证大数据量的任务拆分后的单个子任务需要的内存占用量,只会大于或等于预设内存阈值,不会低于预设内存阈值,如此可以避免拆分后的子任务过小,浪费节点资源。
[0093]
于一实施例中,假设一个大数据量的数据处理任务被配置的预期并行度为1,此时预期并行度小于集群中节点数量,由于该任务按照预期并行度1拆分后的子任务所需的内存占用量远大于预设内存阈值,这种情况下仍然会造成集群中资源利用不均的问题。比如该任务所需的存占用总量已经达到了当前可用内存资源量的以上,此时该任务的数据量过大,是需要拆分成多个子任务的,而用户设定的预期并行度为1,此时不能预期并行度为1来拆分该任务,则可以发出提示信息,提示用户预期并行度设定不合适,以便于用户基于提示信息修改预期并行度设定。如此这个大数据量的任务就不会被某一个节点单独处理,也就避免了该大数据量的任务集中在一个节点上的情况。
[0094]
于一实施例中,当一个大数据量的数据处理任务被配置的预期并行度为1,由于该任务按照预期并行度1拆分后的子任务所需的内存占用量远大于预设内存阈值,为了避免大数据量的任务集中在一个节点上的情况,此时也可以按照系统中设定的与该任务的数据量匹配的并行度来拆分该任务,匹配的并行度可以保证拆分后的多个子任务是均匀的,并且可以避免拆分后的子任务过小,以实现合理利用集群中的节点资源的目的。
[0095]
步骤306:基于分布式集群中各个节点对应的当前可用内存资源比例,为多个子任务分配对应的第一目标节点,并确定执行方案为多个子任务并行执行。然后进入步骤310。
[0096]
在本步骤中,以集群中各个节点的当前可用内存资源比例为权重,将所有的子任务,轮询指派到第一候选节点中合适的第一目标节点上。即优先将子任务分配到可用资源越多的节点上,通过多个第一目标节点并行执行多个子任务。
[0097]
于一实施例中,步骤306具体可以包括:从所述分布式集群中选出多个第一候选节点,所述第一候选节点的当前可用资源量大于或等于每个所述子任务需要的内存占用量;基于所述多个第一候选节点中各个节点对应的当前可用内存资源比例,为所述多个子任务
依次分配第一目标节点,所述第一目标节点为所述多个第一候选节点中所述当前可用内存资源占比最大的节点。
[0098]
假设一个大数据量的任务按照预期并行度被拆分成100的子任务,而集群中只有3个第一候选节点,资源情况如下:节点1的当前可用内存资源10g,节点2的当前可用内存资源5g,节点3的当前可用内存资源2.5g,则分布式集群中各个节点对应的当前可用内存资源比例为:10:5:2.5。那么在分配过程中,因为节点1的当前可用内存资源占比最大,可以作为第一目标节点,因此可以将第一个子任务先分给节点1。如果此时,节点1依然是当前可用内存资源占比最大的节点,则第二个子任务仍然会分给节点1,以此下去。
[0099]
当节点1的当前可用内存资源占比不是最大,比如剩下5g时,集群中各个节点对应的当前可用内存资源比例变为:5:5:2.5,此时可以随机从节点1和节点2中选出一个节点,作为第一目标节点,继续将剩余的子任务分配给选中的第一目标节点上。若之后节点2的当前可用内存资源占是最大的,则节点2作为下一个子任务的第一目标节点。如此,针对任务资源需求和集群资源现状,将子任务分配给当前可用内存资源占比最大的第一目标节点上,可以针对性的调整执行方案和资源分配结构,使得集群中节点资源得到合理充分利用,不仅可以避免大数据量任务集中在同一个节点中处理带来的资源利用不均问题,而且可以避免集群中某个节点资源受限而制约集群的数据处理能力的问题,提升资源利用率。
[0100]
于一实施例中,假设分布式集群中只有一个符合要求的第一候选节点,则该第一候选节点就是第一目标节点,则将子任务分配到该第一目标节点。
[0101]
步骤307:基于分布式集群中各个节点对应的当前可用内存资源比例,为数据处理任务分配对应的第二目标节点,确定执行方案为按照并行度为1执行数据处理任务分。然后进入步骤310。
[0102]
在本步骤中,当集群中剩余的节点资源充足,并且内存占用总量小于或等于预设内存阈值时,说明该数据处理任务为小数据量的任务,则不需要对其进行拆分,虽然该数据处理任务中描述了预期并行度,但是如果按照常规技术拆分后就是数据并行的方式,各个节点之间会有大量的网络通信,对于数据量比较小的任务而言,这些网络通信也是一种资源的浪费。为了避免这种情况带来的损失,可以强制将该数据处理任务的并行度设置为1,即不拆分,单独执行该任务。并以集群中各个节点当前可用内存资源比例为权重,将该数据处理任务,指派到资源足够的第二目标节点上。
[0103]
于一实施例中,步骤307具体可以包括:从所述分布式集群中选出多个第二候选节点,所述第二候选节点的当前可用资源量大于或等于每个数据处理任务需要的内存占用量;基于所述多个第二候选节点中各个节点对应的当前可用内存资源比例,为所述数据处理任务分配第二目标节点,所述第二目标节点为所述多个第二候选节点中所述当前可用内存资源占比最大的节点。
[0104]
假设该数据处理任务为小数据量的任务,虽然该数据处理任务中描述了预期并行度为4,但不需要对其进行拆分。而集群中有3个第二候选节点,资源情况如下:节点1的当前可用内存资源10g,节点2的当前可用内存资源5g,节点3的当前可用内存资源2.5g,则分布式集群中各个节点对应的当前可用内存资源比例为:10:5:2.5。那么在分配过程中,因为节点1的当前可用内存资源占比最大,可以作为第二目标节点,因此可以将该数据处理任务分给节点1。不仅可以避免拆分带来的资源损失,而且可以均衡利用集群中的可用资源,提高
分布式集群的效率。
[0105]
步骤308:按照预期并行度将数据处理任务拆分成多个子任务。然后进入步骤309。
[0106]
在本步骤中,当内存占用总量大于当前可用内存资源量时,说明集群中剩余的可用内存资源不足,此时为了高效率的利用可用资源,可以通过减少单次处理的数据量,即依然按照预期并行度将数据处理任务拆分成多个子任务,使子任务所需的内存资源小于预设内存阈值。
[0107]
步骤309:基于分布式集群中各个节点对应的当前可用内存资源比例,为多个子任务分配对应的第三目标节点,并确定执行方案为同一个所述第三目标节点上的多个子任务串行执行,不同的所述第三目标节点之间的所述子任务并行执行。然后进入步骤310。
[0108]
在本步骤中,以集群中各个节点当前可用内存资源比例为权重,将所有的子任务,轮询指派到资源足够的第三目标节点上。即优先将子任务分配到可用资源越多的节点上。并且不同的所述第三目标节点之间的子任务之间并行执行,同一个所述第三目标节点上的多个子任务设置为串行执行。如此,单个节点的子任务变成多个流水任务串行执行,可以减少该节点单次处理的数据量,避免数据阻塞。
[0109]
于一实施例中,步骤309具体可以包括:从所述分布式集群中选出多个第三候选节点,所述第三候选节点的当前可用资源量大于或等于每个所述子任务需要的内存占用量;基于所述多个第三候选节点中各个节点对应的当前可用内存资源比例,为所述多个子任务依次分配第三目标节点,所述第三目标节点为所述多个第三候选节点中所述当前可用内存资源占比最大的节点。此处节点分配的原理与步骤306的过程相同,详见步骤306的描述。
[0110]
在步骤309中,分配好节点后,还要确定每个节点的任务执行方案,由于当内存占用总量大于当前可用内存资源量,说明集群中剩余的可用内存资源不足,无法同时将所有子任务并行执行,此时,可以设定不同的第三目标节点之间并行执行各自的子任务,而有的第三目标节点可能别分配到了多个子任务,这些子任务所需的内存占用量加起来超过了该第三目标节点自身可用资源量,那么这样的第三目标节点可以设定为节点内部的多个子任务以流水线的方式串行执行,进而可以减少该节点单次处理的数据量,避免数据阻塞。
[0111]
步骤310:按照节点资源分配结果,将对应的处理任务或子任务下发至对应的目标节点。
[0112]
在本步骤中,根据上述步骤生成的资源分配结果和执行方案,将相应的任务发送到指派的各个目标节点。
[0113]
步骤311:通过目标节点申请内存资源,并按照执行方案执行处理任务或子任务。
[0114]
在本步骤中,通过目标节点申请内存资源,并可以通过线程亲和性绑定cpu,在同一核心上绑定的线程可以按照执行时长和资源使用量设置优先级。优先保证更重要的服务进行的正常运行。
[0115]
步骤312:动态释放对应的节点资源。详细参见上述实施例中对步骤205的描述。
[0116]
上述数据处理方法,在数据并行抽取过程中,为了实现集群的cpu和内存资源的有效利用,采用抽样预先计算资源占用的方式,提前规划,下发任务前根据集群现状调整执行方案和节点资源分配方案。下发过程中,基于所有子任务进行节点指派和资源调度,执行过程中绑定cpu和控制线程优先级,完成后回收内存,重新分配cpu资源。
[0117]
在多个任务同时执行的情况下,也可以保障单个任务有稳定的内存空间和cpu资
源,在其他任务执行完成后,空闲的资源会被释放,重新分配。最终,可以实现不论数据量的大小,任务都稳定高效运行。解决了任务并行带来的资源热点问题,以及数据并行带来的集群能力受限问题。同时通过资源的分配和调度方案,保障了集群资源的高效利用,减少了资源损耗,从而有效解决混合并行数据抽取系统中的资源高效利用难题。
[0118]
请参看图4,其为本技术一实施例的数据处理装置400,该装置可应用于图1所示的电子设备1,并可以应用于上述rpa数据业务系统中,以缓解分布式集群中数据处理任务执行过程中资源分配不均的问题,提高分布式集群的资源利用率。该装置包括:获取模块401、确定模块402和分配模块403,各个模块的原理关系如下:
[0119]
获取模块401,用于获取待处理数据的数据总量,待处理数据对应于当前数据处理任务。确定模块402,用于根据待处理数据的数据总量,确定待处理数据对应的内存占用总量。分配模块403,用于基于内存占用总量、预设内存阈值和分布式集群中当前可用内存资源量,为数据处理任务分配对应的节点资源和执行方案。
[0120]
于一实施例中,确定模块402用于:根据待处理数据的数据总量,确定样本量。根据样本量和分层特征对待处理数据进行抽样,得到抽样数据。根据抽样数据,确定待处理数据中每条数据对应的平均内存占用量。根据平均内存占用量和数据总量确定待处理数据对应的内存占用总量。
[0121]
于一实施例中,所述确定模块402用于:采用如下公式确定所述样本量:
[0122][0123]
其中,n为所述当前数据处理任务对应的待处理数据需要的样本量,z为置信水平对应的置信度,α为显著水平,p为相关属性比例,e为误差幅度。
[0124]
于一实施例中,所述确定模块402用于:对所述抽样数据进行有效性分析,从中提取所述抽样数据的有效响应体;根据所述有效响应体确定所述待处理数据中每条数据对应的平均内存占用量。
[0125]
于一实施例中,分配模块403用于:判断内存占用总量是否大于当前可用内存资源量。当内存占用总量小于或等于当前可用内存资源量时,判断内存占用总量是否大于预设内存阈值。当内存占用总量大于预设内存阈值时,按照预期并行度将数据处理任务拆分成多个子任务。基于分布式集群中各个节点对应的当前可用内存资源比例,为多个子任务分配对应的第一目标节点,并确定执行方案为多个子任务并行执行。
[0126]
于一实施例中,所述分配模块403用于:从所述分布式集群中选出多个第一候选节点,所述第一候选节点的当前可用资源量大于或等于每个所述子任务需要的内存占用量;基于所述多个第一候选节点中各个节点对应的当前可用内存资源比例,为所述多个子任务依次分配第一目标节点,所述第一目标节点为所述多个第一候选节点中所述当前可用内存资源占比最大的节点。
[0127]
于一实施例中,分配模块403还用于:当内存占用总量小于或等于预设内存阈值时,基于分布式集群中各个节点对应的当前可用内存资源比例,为数据处理任务分配对应的第二目标节点,确定执行方案为按照并行度为1执行数据处理任务分。
[0128]
于一实施例中,所述分配模块403用于:从所述分布式集群中选出多个第二候选节点,所述第二候选节点的当前可用资源量大于或等于每个数据处理任务需要的内存占用
量;基于所述多个第二候选节点中各个节点对应的当前可用内存资源比例,为所述数据处理任务分配第二目标节点,所述第二目标节点为所述多个第二候选节点中所述当前可用内存资源占比最大的节点。
[0129]
于一实施例中,所述分配模块403用于:当所述内存占用总量大于所述当前可用内存资源量时,按照所述预期并行度将所述数据处理任务拆分成多个子任务;基于所述分布式集群中各个节点对应的当前可用内存资源比例,为所述多个子任务分配对应的第三目标节点,并确定所述执行方案为同一个所述第三目标节点上的多个所述子任务串行执行,不同的所述第三目标节点之间的所述子任务并行执行。
[0130]
于一实施例中,所述分配模块403还用于:从所述分布式集群中选出多个第三候选节点,所述第三候选节点的当前可用资源量大于或等于每个所述子任务需要的内存占用量;基于所述多个第三候选节点中各个节点对应的当前可用内存资源比例,为所述多个子任务依次分配第三目标节点,所述第三目标节点为所述多个第三候选节点中所述当前可用内存资源占比最大的节点。
[0131]
于一实施例中,还包括:执行模块404,用于在所述基于所述内存占用总量、预设内存阈值和分布式集群中当前可用内存资源量,为所述数据处理任务分配对应的节点资源和执行方案之后,按照节点资源分配结果和所述执行方案执行所述数据处理任务。
[0132]
于一实施例中,所述获取模块401用于:提取所述当前数据处理任务中的任务描述,所述任务描述中包括:待抽取的目标数据源的定义和待抽取数据集的定义;根据所述目标数据源的定义和所述待抽取数据集的定义,从所述目标数据源中查询所述待抽取数据集的所述数据总量。
[0133]
于一实施例中,执行模块404用于:按照节点资源分配结果,将对应的处理任务或子任务下发至对应的目标节点。通过目标节点申请内存资源,并按照执行方案执行处理任务或子任务。
[0134]
于一实施例中,还包括:释放模块405,用于在按照节点资源分配结果和执行方案执行数据处理任务之后,动态释放对应的节点资源。
[0135]
上述数据处理装置400的详细描述,请参见上述实施例中相关方法步骤的描述。
[0136]
本发明实施例还提供了一种非暂态电子设备可读存储介质,包括:程序,当其在电子设备上运行时,使得电子设备可执行上述实施例中方法的全部或部分流程。其中,存储介质可为磁盘、光盘、只读存储记忆体(read-only memory,rom)、随机存储记忆体(random access memory,ram)、快闪存储器(flash memory)、硬盘(hard disk drive,缩写:hdd)或固态硬盘(solid-state drive,ssd)等。存储介质还可以包括上述种类的存储器的组合。
[0137]
虽然结合附图描述了本发明的实施例,但是本领域技术人员可以在不脱离本发明的精神和范围的情况下作出各种修改和变型,这样的修改和变型均落入由所附权利要求所限定的范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1