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

文档序号:18601100发布日期:2019-09-03 22:39阅读:173来源:国知局
数据处理方法、装置、计算设备及存储介质与流程

本申请涉及大数据技术领域,尤其涉及数据处理方法、装置、计算设备及存储介质。



背景技术:

随着互联网的发展,各种大数据平台被广泛应用。大数据平台通常可以将大数据划分成数据块,然后利用分布式方式对各数据块进行处理。目前,大数据平台通常采用固定分区方式对大数据进行分块。固定分区方式可以根据系统默认设置或者用户指定分区数,对大数据进行划分。然而,目前的分区方式的合理性有待提高。



技术实现要素:

本申请提出了一种数据处理方案,能够挺高分区合理性,从而提高数据处理效率。

根据本申请一方面,提供一种数据处理方法,所述方法包括:获取数据处理请求;生成与所述数据处理请求对应的执行计划,所述执行计划包括树形结构,其中,每个节点用于描述一个数据操作;针对所述执行计划中每个节点,生成与该节点描述的数据操作有关的一个弹性分布式数据集;在确定对所述执行计划中各节点对应的弹性分布式数据集进行重分区操作时,根据所述各节点对应的弹性分布式数据集之间的依赖关系,执行所述重分区操作。

在一些实施例中,所述确定对所述执行计划中各节点对应的弹性分布式数据集进行重分区操作,包括:确定所述各节点对应的弹性分布式数据集中单个分区的数据量最大的弹性分布式数据集;在所确定的弹性分布式数据集中单个分区的数据量超过分布式集群中单个计算节点所处理数据量的量阈值时,确定进行所述重分区操作。

在一些实施例中,所述根据所述各节点对应的弹性分布式数据集之间的依赖关系,对所述各节点对应的弹性分布式数据集进行分区,包括:对于所述树形结构中的根节点,根据所述根节点对应的弹性分布式数据集的数据量,确定所述根节点所对应的弹性分布式数据集的分区数;对于所述树形结构中任一个非根节点,根据该非根节点对应的弹性分布式数据集与该非根节点的父节点对应的弹性分布式数据集之间的依赖关系,确定该非根节点对应的弹性分布式数据集的分区数。

在一些实施例中,所述根据该非根节点对应的弹性分布式数据集与该非根节点的父节点对应的弹性分布式数据集之间的依赖关系,确定该非根节点对应的弹性分布式数据集的分区数,包括:当该非根节点对应的弹性分布式数据集与该非根节点的父节点对应的弹性分布式数据集之间为窄依赖关系时,根据该非根节点的父节点对应的弹性分布式数据集的分区数确定该非根节点对应的弹性分布式数据集的分区数;以及当该非根节点对应的弹性分布式数据集与该非根节点的父节点对应的弹性分布式数据集之间为宽依赖关系时,根据该非根节点对应的弹性分布式数据集的数据量确定该非根节点对应的弹性分布式数据集的分区数。

在一些实施例中,所述根据所述根节点对应的弹性分布式数据集的数据量,确定该节点对应的弹性分布式数据集的分区数,包括:获取所述弹性分布式数据集的数据量;获取分布式集群中单个计算节点所处理数据量的量阈值;根据所述弹性分布式数据集的数据量与所述量阈值的比值确定所述根节点对应的弹性分布式数据集的分区数。

在一些实施例中,所述根据所述弹性分布式数据集的数据量与所述量阈值的比值确定所述根节点所对应弹性分布式数据集的分区数,包括:整数化处理所述与量阈值的比值;将经过整数化处理的所述与量阈值的比值与调节系数之积作为所述分区数。

在一些实施例中,所述根据所述弹性分布式数据集的数据量与所述量阈值的比值确定所述根节点对应弹性分布式数据集的分区数,进一步包括:当所述分区数超过分区上限阈值时,将所述分区数更新为所述分区上限阈值;当所述分区数低于分区下限阈值时,将所述分区数更新为所述分区下限阈值。

在一些实施例中,所述当该非根节点对应的弹性分布式数据集与该非根节点的父节点对应的弹性分布式数据集之间为窄依赖关系时,根据该非根节点的父节点对应的弹性分布式数据集的分区数确定该非根节点对应的弹性分布式数据集的分区数,包括:当所述父节点对应的弹性分布式数据集完成重分区时,向所述非根节点所对应的弹性分布式数据集的分区器传递所述父节点对应的弹性分布式数据集的分区数;所述分区器将所述非根节点所对应的弹性分布式数据集的分区数调节为与所述父节点对应的弹性分布式数据集的分区数一致。

在一些实施例中,当该非根节点对应的弹性分布式数据集与该非根节点的父节点对应的弹性分布式数据集之间为宽依赖关系时,所述根据该非根节点对应的弹性分布式数据集的数据量确定该非根节点对应的弹性分布式数据集的分区数,包括:当所述父节点对应的弹性分布式数据集完成重分区时,向所述非根节点所对应的弹性分布式数据集的分区器传递表示进行自适应分区的参数;响应于接收到所述参数,所述分区器根据所述非根节点所对应的弹性分布式数据集的数据量确定相应的分区数。

根据本申请一方面,提供一种数据处理装置,所述装置包括:获取单元,用于获取数据处理请求;计划生成单元,用于生成与所述数据处理请求对应的执行计划,所述执行计划包括树形结构,其中每个节点用于描述一个数据操作;数据集生成单元,用于针对所述执行计划中每个节点,生成与该节点描述的数据操作有关的一个弹性分布式数据集;重分区管理单元,用于在确定对所述执行计划中各节点对应的弹性分布式数据集进行重分区操作时,根据所述各节点对应的弹性分布式数据集之间的依赖关系,执行所述重分区操作。

在一些实施例中,所述重分区管理单元根据下述方式确定对所述执行计划中各节点对应的弹性分布式数据集进行重分区操作:确定所述各节点对应的弹性分布式数据集中单个分区的数据量最大的弹性分布式数据集;在所确定的弹性分布式数据集中单个分区的数据量超过分布式集群中单个计算节点所处理数据量的量阈值时,确定进行所述重分区操作。

在一些实施例中,所述重分区管理单元根据下述方式根据所述各节点对应的弹性分布式数据集之间的依赖关系,对所述各节点对应的弹性分布式数据集进行分区:对于所述树形结构中的根节点,根据所述根节点对应的弹性分布式数据集的数据量,确定所述根节点所对应的弹性分布式数据集的分区数;对于所述树形结构中任一个非根节点,根据该非根节点对应的弹性分布式数据集与该非根节点的父节点对应的弹性分布式数据集之间的依赖关系,确定该非根节点对应的弹性分布式数据集的分区数。

在一些实施例中,所述重分区管理单元根据下述方式根据该非根节点对应的弹性分布式数据集与该非根节点的父节点对应的弹性分布式数据集之间的依赖关系,确定该非根节点对应的弹性分布式数据集的分区数:当该非根节点对应的弹性分布式数据集与该非根节点的父节点对应的弹性分布式数据集之间为窄依赖关系时,根据该非根节点的父节点对应的弹性分布式数据集的分区数确定该非根节点对应的弹性分布式数据集的分区数;以及当该非根节点对应的弹性分布式数据集与该非根节点的父节点对应的弹性分布式数据集之间为宽依赖关系时,根据该非根节点对应的弹性分布式数据集的数据量确定该非根节点对应的弹性分布式数据集的分区数。

在一些实施例中,所述重分区管理单元根据下述方式根据所述根节点对应的弹性分布式数据集的数据量,确定该节点对应的弹性分布式数据集的分区数:获取所述弹性分布式数据集的数据量;获取分布式集群中单个计算节点所处理数据量的量阈值;根据所述弹性分布式数据集的数据量与所述量阈值的比值确定所述根节点对应的弹性分布式数据集的分区数。

在一些实施例中,所述重分区管理单元根据下述方式根据所述弹性分布式数据集的数据量与所述量阈值的比值确定所述根节点所对应弹性分布式数据集的分区数:整数化处理所述与量阈值的比值;将经过整数化处理的所述与量阈值的比值与调节系数之积作为所述分区数。

在一些实施例中,所述重分区管理单元根据下述方式根据所述弹性分布式数据集的数据量与所述量阈值的比值确定所述根节点对应弹性分布式数据集的分区数:当所述分区数超过分区上限阈值时,将所述分区数更新为所述分区上限阈值;当所述分区数低于分区下限阈值时,将所述分区数更新为所述分区下限阈值。

在一些实施例中,所述重分区管理单元根据下述方式当该非根节点对应的弹性分布式数据集与该非根节点的父节点对应的弹性分布式数据集之间为窄依赖关系时,根据该非根节点的父节点对应的弹性分布式数据集的分区数确定该非根节点对应的弹性分布式数据集的分区数:当所述父节点对应的弹性分布式数据集完成重分区时,向所述非根节点所对应的弹性分布式数据集的分区器传递所述父节点对应的弹性分布式数据集的分区数;所述分区器将所述非根节点所对应的弹性分布式数据集的分区数调节为与所述父节点对应的弹性分布式数据集的分区数一致。

在一些实施例中,所述重分区管理单元根据下述方式当该非根节点对应的弹性分布式数据集与该非根节点的父节点对应的弹性分布式数据集之间为宽依赖关系时,根据该非根节点对应的弹性分布式数据集的数据量确定该非根节点对应的弹性分布式数据集的分区数:当所述父节点对应的弹性分布式数据集完成重分区时,向所述非根节点所对应的弹性分布式数据集的分区器传递表示进行自适应分区的参数;响应于接收到所述参数,所述分区器根据所述非根节点所对应的弹性分布式数据集的数据量确定相应的分区数。

根据本申请一方面,提供一种计算设备,包括:一个或多个处理器、存储器以及一个或多个程序。一个或多个程序存储在该存储器中并被配置为由所述一个或多个处理器执行,所述一个或多个程序包括用于执行本申请的数据处理方法的指令。

根据本申请一方面,提供一种存储介质,存储有一个或多个程序,所述一个或多个程序包括指令,所述指令当由计算设备执行时,使得所述计算设备执行本申请的数据处理方法。

综上,在需要对执行计划对应的各rdd进行重分区操作时,根据本申请的数据处理方法可以根据rdd之间的依赖关系和rdd的数据量,对各rdd进行重分区,从而可以提高rdd分区的合理性,进而提高数据处理效率。

附图说明

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

图1a示出了根据本申请一些实施例的应用场景的示意图;

图1b示出了根据本申请一些实施例的应用场景的示意图;

图2示出了根据本申请一些实施例的数据处理方法200的流程图;

图3示出了根据本申请一个实施例的执行计划与rdd之间的对应关系图;

图4示出了根据本申请一些实施例的重分区方法400的流程图;

图5示出了图3中各rdd的示意图;

图6示出了根据本申请一些实施例的数据处理装置600的示意图;以及

图7示出了一个计算设备的组成结构图。

具体实施方式

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

图1a示出了根据本申请一些实施例的应用场景的示意图。如图1a所示,应用场景100可以包括计算设备110和数据处理系统120。这里,计算设备110可以通过网络130与数据处理系统120通信。其中,计算设备110可以包括任务调度应用111。任务调度应用111可以获取数据处理请求。数据处理请求例如是结构化查询语言(structuredquerylanguage,缩写为sql)请求等等。任务调度应用111可以根据数据处理请求生成一个或多个任务。另外,任务调度应用111可以将所生成的任务分配到数据处理系统120。这里,计算设备110例如可以是台式电脑、膝上计算机、移动电话、平板电脑等各种终端设备。计算设备110也可以是一个服务器节点或者虚拟服务器,本申请对此不做限制。数据处理系统120例如可以包括一个或多个服务器节点。换言之,数据处理系统120可以是分布式集群或者独立服务器。这里,数据处理系统120可以应用于大数据分析、分布式数据库等场景中。数据处理系统120可以从任务调用应用111获取一个或多个任务并执行。

图1b示出了根据本申请一些实施例的应用场景的示意图。如图1b所示,任务调度应用111可以包括查询优化器210、弹性分布式数据集(resilientdistributeddatasets,缩写为rdd)管理单元220和任务管理单元230。数据处理系统120可以包括多个计算节点,例如310和320等等。每个计算节点可以包括执行器,例如311和321。每个执行器可以执行一个或多个任务。任务调度应用111例如可以是火星上下文(sparkcontext),但不限于此。查询优化器210可以包括逻辑优化单元211和物理优化单元212。在任务调度应用111获取到数据处理请求时,逻辑优化单元211可以生成与数据处理请求对应的逻辑查询执行计划。这里,逻辑查询执行计划例如可以是关系代数语法树。数据处理请求中各个操作语义(例如sql请求中选择、投影和过滤等操作语义)可以映射为逻辑查询执行计划的不同节点。对于逻辑查询执行计划,物理优化单元212可以生成相应的物理查询执行计划。这里,物理查询执行计划中每个节点用于描述一个数据操作。一个数据操作可以称为一个物理算子(executionoperator)。rdd管理单元220可以为物理查询执行计划中每个节点生成一个rdd。应当理解,rdd管理单元220生成rdd的操作,并不需要实例化rdd,而是确定rdd之间的依赖关系和各个rdd的分区数。这里,rdd管理单元220可以按照默认配置参数,确定各rdd的分区数。在一个实施例中,查询优化器210和rdd管理单元220可以实现为结构化查询处理引擎的组件。结构化查询处理引擎例如可以是sparksql引擎,但不限于此。这里,基于rdd管理单元220所生成的rdd,任务调度单元230可以生成与数据处理请求对应的一个或多个任务。任务调度单元230可以将所生成的任务分配到数据处理系统120的一个或多个计算节点中。取决于任务调度单元230的指示,每个计算节点可以执行一个或多个任务。在一个实施例中,任务调度单元230可以包括有向无环图作业调度(dagscheduler)模块和任务调度(taskscheduler)模块。这里,dagscheduler和taskscheduler例如可以是sparkcontext初始化阶段所生成的调度模块,但不限于此。其中,dagscheduler是基于任务阶段的高层调度模块,为数据处理请求对应的作业计算具有依赖关系的多个调度阶段(通常根据混洗(shuffle)操作来划分),然后为每个阶段构建出一组具体的任务(通常会考虑数据的本地性等),然后以任务组(tasksets)的形式提交给任务调度模块来具体分配。任务调度模块可以启动任务、监控和汇报任务运行情况。

另外说明的是,对于一个rdd而言,每个分区对应一个计算节点。因此,在增加一个rdd的分区数量时,意味着每个分区的数据减小,计算节点可以提高完成一个分区对应任务的速度。但是,在增加一个rdd对应的分区数量时,网络通信和调度开销会增加。反之,在减小rdd的分区数时,网络通信和调度开销会减小,单计算节点完成任务的速度会降低。因此,rdd的分区数量是否合理,将极大影响对数据处理请求的执行效率。在本申请实施例中,rdd管理单元112在向任务调度单元230提交rdd之前,还可以对rdd进行重分区操作,以便提高rdd分区的合理性,从而提高数据处理系统120处理任务的效率。下面结合图2对本申请的rdd的重分区技术进行说明。

图2示出了根据本申请一些实施例的数据处理方法200的流程图。数据梳理方法200例如可以在任务调度应用111中执行。任务调度应用111可以驻留在计算设备110等设备中。这里,任务调度应用111可以应用于各种大数据平台,例如,分布式数据仓库(distributeddatawarehouse)等等。

如图2所示,数据处理方法200可以包括步骤s201,获取数据处理请求。在一个实施例中,任务调度应用111可以驻留在用户终端中。相应的,步骤s201可以根据用户输入生成数据处理请求。在一个实施例中,任务调度应用111可以驻留在服务器中。相应的,步骤s201可以接收来自用户终端的数据处理请求。这里,数据处理请求也可以称为用户终端所提交的数据处理任务。

在步骤s202中,生成与数据处理请求对应的执行计划。执行计划包括树形结构。其中,每个节点用于描述一个数据操作。这里,步骤s202例如可以由查询优化器111实施,但不限于此。执行计划为一个物理查询执行计划。每个节点也可以称为一个物理算子。

在步骤s203中,针对执行计划中每个节点,生成与该节点描述的数据操作有关的一个弹性分布式数据集。具体而言,步骤s202可以确定每个节点的rdd的分区数和各rdd之间的依赖关系。这里,步骤s202例如可以由sparksql引擎执行,但不限于此。步骤s203可以根据默认配置确定每个rdd的分区数。例如,图3示出了根据本申请一个实施例的执行计划与rdd之间的对应关系图。如图3所示,执行计划可以包括节点a、b、c、d和e。节点a至e分别对应一个弹性分布式数据集,即rdd1至rdd5。其中,rdd3依赖于rdd4和rdd5。换言之,rdd4和rdd5均为rdd3的父rdd。rdd3为rdd3的子rdd,也是rdd4的子rdd。依次类推,步骤s203可以确定其他rdd的依赖关系。这里对图3中其他rdd的依赖关系不再赘述。

在步骤s204中,在确定对执行计划中各节点对应的弹性分布式数据集进行重分区操作时,根据各节点对应的弹性分布式数据集之间的依赖关系,对各节点对应的弹性分布式数据集进行重分区。

在一个实施例中,步骤s204在接收到表示进行重分区操作的参数时,确定进行重分区操作。这里,重分区操作是指对执行计划对应的各rdd进行重分区操作。例如,步骤s204可以获取表示是否需要对rdd进行重分区的参数,该参数例如是spark.sql.partition.adaptive。当spark.sql.partition.adaptive=true时,步骤s204可以确定需要进行重分区。当spark.sql.partition.adaptive=false时,步骤s204确定不需要进行重分区。在一个实施例中,任务调度应用111可以根据用户输入修改配置文件中关于是否重分区的参数,以便方法200可以快速确定是否进行重分区操作。本申请实施例通过配置关于是否进行重分区的参数,可以灵活地开启或者关闭重分区的执行流程。

在一个实施例中,步骤s204可以首先确定各节点对应的弹性分布式数据集中单个分区的数据量最大的弹性分布式数据集。在所确定的弹性分布式数据集中单个分区的数据量超过分布式集群中单个计算节点所处理数据量的量阈值时,步骤s204可以确定进行重分区操作。在单个分区的数据量未超过量阈值,步骤s204可以不执行重分区操作。这里,步骤s204可以自动化判断步骤s203中rdd的默认分区是否合理,并在确定不合理时开启重分区操作。这样,步骤s204通过对是否开启重分区操作进行自动化判断,可以提高是否开启重分区操作的灵活性。

当一个节点为树形结构(即执行计划)中根节点时,步骤s204可以根据该根节点对应的弹性分布式数据集的数据量,确定根节点所对应的弹性分布式数据集的分区数。以图3为例,图3中根节点为e。步骤s204可以根据节点e对应的rdd1的数据量对rdd1进行重分区。在一个实施例中,步骤s204可以实现为方法400。图4示出了根据本申请一些实施例的重分区方法400的流程图。

如图4所示,步骤s401可以获取弹性分布式数据集的数据量。在步骤s402中,获取分布式集群(例如数据处理系统120)中单个计算节点所处理数据量的量阈值。这里,量阈值可以反映分布式集群的硬件性能,具体可以体现分布式集群中单个计算节点的数据处理能力。量阈值是跨节点传输和数据处理的重要指标。在此基础上,方法400可以执行步骤s403,根据弹性分布式数据集的数据量与量阈值的比值确定根节点对应的弹性分布式数据集的分区数。

在一个实施例中,步骤s403可以整数化处理前述比值,并将该比值作为根节点的分区数。

在另一个实施例中,步骤s403还可以将经过整数化处理的比值与调节系数之积作为分区数。这里,调节系数例如是与根节点对应的数据操作有关的参数。数据操作例如为与distinct有关的聚合等操作。调节系数例如是基于启发式规则等方式而确定的比例因子。通过调节系数的调节之后,步骤s403可以使得分区数更加合理,从而提高对数据处理请求的处理性能。

在另一个实施例中,步骤s403还可以进一步对分区数的上限和下限进行考虑。具体而言,当分区数超过分区上限阈值时,步骤s403可以将分区数更新为分区上限阈值。这里,分区上限阈值取决于用于处理任务的资源规模(例如数据处理系统120的集群资源规模)。当分区数低于分区下限阈值时,步骤s303可以将分区数更新为分区下限阈值。这里,分区下限阈值可以是配置参数,本申请对此不做限制。这样,步骤s403可以将根节点对应的rdd的分区数控制在分区上线阈值和分区下线阈值之间的范围内。综上,方法400可以对综合考虑rdd的数据量、集群硬件环境(与上述量阈值有关)、以及rdd对应物理算子的类型(即rdd之间依赖关系),从而可以提高对rdd分区的合理性。

对于树形结构中任一个非根节点,步骤s204可以根据该非根节点对应的rdd与该非根节点对应的父节点的rdd之间的依赖关系,确定该非根节点对应的rdd的分区数。以图3为例,一个非根节点c对应的弹性分布式数据集为rdd2,节点c的父节点d对应的弹性分布式数据集为rdd1。从弹性分布式数据集的依赖角度而言,rdd1可以被认为是rdd2的子rdd。换言之,rdd2可以被认为是rdd1的父rdd。另外说明的是,rdd之间的依赖关系可以包括宽依赖和窄依赖。其中,窄依赖是指:每一个父rdd的分区最多只被子rdd的一个分区所使用。宽依赖是指:多个子rdd的分区会依赖于同一个父rdd的分区。

在一个实施例中,当非根节点对应的rdd与该非根节点的父节点对应的rdd之间为窄依赖关系时,步骤s204可以根据该非根节点的父节点对应的rdd的分区数确定该非根节点对应的rdd的分区数。例如,步骤s204可以将父节点对应的rdd的分区数设置为与该非根节点对应的rdd一致。在一个实施例中,rdd可以利用分区器进行分区。当父节点对应的弹性分布式数据集完成重分区时,父节点的分区器可以向非根节点所对应的弹性分布式数据集的分区器传递父节点对应的弹性分布式数据集的分区数。这样,该非根节点对应的分区器可以将分区数调节为与父节点对应的弹性分布式数据集的分区数一致。

在一个实施例中,在非根节点对应的数据操作(即物理算子)非交换算子(即,非exchange算子)时,步骤s204可以确定非根节点的rdd与父节点对应的rdd为窄依赖关系。反之,在确定非根节点对应的数据操作属于交换算子时,步骤s204确定该非根节点的rdd与父节点对应的rdd为宽依赖关系。交换算子对应的rdd的类型例如为混洗行数据集(shuffledrowrdd)。

在一个实施例中,当该非根节点对应的rdd与该非根节点的父节点对应的rdd之间为宽依赖关系时,步骤s204可以根据该非根节点对应的弹性分布式数据集的数据量确定该非根节点对应的弹性分布式数据集的分区数。例如,当父节点对应的rdd完成重分区时,向非根节点所对应的rdd的分区器传递表示进行自适应分区的参数,参数值例如为“-1”。响应于接收到参数,非根节点的分区器根据非根节点所对应的rdd的数据量确定相应的分区数。

综上,在需要对执行计划对应的各rdd进行重分区操作时,数据处理方法200可以根据rdd之间的依赖关系和rdd的数据量,对各rdd进行重分区,从而可以提高rdd分区的合理性,进而提高数据处理效率。在一些实施例中,与固定分区方式(即按照默认系统参数分区)相比,根据本申请实施例的分区方式可以提高70%的数据处理性能。另外,数据处理方法200通过提高rdd分区合理性,可以避免内存溢出导致数据处理操作失败的问题。

另外说明的是,步骤s204可以通过每个rdd的分区器(partitioner)进行重分区操作。为了更形象说明重分区过程,下面结合图5对步骤s204进一步说明。图5示出了图3中各rdd的示意图。

如图5所示,任务调度应用111可以向rdd1的分区器1传递表示进行自适应分区的参数。参数值例如为“-1”。这样,分区器1可以调用自适应分区算法501对rdd1的分区数的计算。自适应分区算法501可以向分区器1返回rdd1的分区数。这里,自适应分区算法例如可以执行方法400的流程。在一个实施例中,自适应分区算法可以封装为一个独立模块,例如独立的应用组件,以便后续方便地对自适应分区算法进行优化和升级。在一个实施例中,自适应分区算法501的伪代码示例如下:

其中,partnum为重分区的参数。ps表示分区数。当partnum值为-1时,自适应分区算法501可以执行上述伪代码中第3至7行。getinputsize表示获取rdd的数据量的操作。shuffle_size表示量阈值,partadjustment表示调整系数。toint表示整数化处理比值的操作。max_partitions表示分区上限阈值,min_partitions表示分区下限阈值。utils.limitpartitions(ps,max_partitions,min_partitions)表示将分区数ps限定在分区上限阈值和分区下限阈值之间的操作。

在一个实施例中,自适应分区算法501所确定的ps值为3。分区器1在获取到ps值时,可以将rdd1的分区数设置为3。在图5中,rdd1与rdd2的依赖关系为窄依赖,分区器1可以向rdd2的分区器2将rdd1的分区数传递到分区器2。这样,分区器2可以将rdd2的分区数设置为与rdd1一致。类似于分区器2,分区器3可以将rdd3的分区数设置为3。另外,由于rdd3为交换算子,分区器3可以向分区器4和5传递表示进行自适应分区的参数“-1”。这样,分区器4和分区器5可以分别调用自适应分区算法501进行分区数计算。综上,根据本申请的数据处理方法可以通过自适应分区算法可以对各rdd进行自动化重分区,从而可以使得重分区操作对用户透明,进而提高用户体验度。

图6示出了根据本申请一些实施例的数据处理装置600的示意图。数据处理装置600例如可以驻留在任务调度应用111中。任务调度应用111可以驻留在计算设备110等设备中。

如图6所示,数据处理装置600可以包括获取单元601、计划生成单元602、数据集生成单元603和重分区管理单元604。

获取单元601用于获取数据处理请求。

计划生成单元602用于生成与数据处理请求对应的执行计划。这里,执行计划包括树形结构,其中每个节点用于描述一个数据操作。

数据集生成单元603用于针对执行计划中每个节点,生成与该节点描述的数据操作有关的一个弹性分布式数据集。

重分区管理单元604用于在确定对执行计划中各节点对应的弹性分布式数据集进行重分区操作时,根据各节点对应的弹性分布式数据集之间的依赖关系,执行重分区操作。

在一个实施例中,重分区管理单元604可以在获取到表示进行重分区的参数时,确定进行重分区操作。在一个实施例中,重分区管理单元604可以首先确定各节点对应的弹性分布式数据集中单个分区的数据量最大的弹性分布式数据集。在所确定的弹性分布式数据集中单个分区的数据量超过分布式集群中单个计算节点所处理数据量的量阈值时,重分区管理单元604可以确定进行重分区操作。在单个分区的数据量未超过量阈值,重分区管理单元604可以不执行重分区操作。这里,重分区管理单元604可以自动化判断步骤s203中rdd的默认分区是否合理,并在确定不合理时开启重分区操作。在一个实施例中,为了对各节点对应的rdd进行重分区操作,对于树形结构中的根节点,重分区管理单元604可以根据根节点对应的弹性分布式数据集的数据量,确定根节点所对应的弹性分布式数据集的分区数。另外,对于树形结构中任一个非根节点,重分区管理单元604可以根据该非根节点对应的弹性分布式数据集与该非根节点的父节点对应的弹性分布式数据集之间的依赖关系,确定该非根节点对应的弹性分布式数据集的分区数。在一个实施例中,当该非根节点对应的弹性分布式数据集与该非根节点的父节点对应的弹性分布式数据集之间为窄依赖关系时,重分区管理单元604可以根据该非根节点的父节点对应的弹性分布式数据集的分区数确定该非根节点对应的弹性分布式数据集的分区数。当该非根节点对应的弹性分布式数据集与该非根节点的父节点对应的弹性分布式数据集之间为宽依赖关系时,重分区管理单元604可以根据该非根节点对应的弹性分布式数据集的数据量确定该非根节点对应的弹性分布式数据集的分区数。

在一个实施例中,重分区管理单元604可以获取所述弹性分布式数据集的数据量。另外,重分区管理单元604可以获取分布式集群中单个计算节点所处理数据量的量阈值。这样,重分区管理单元604可以根据弹性分布式数据集的数据量与量阈值的比值确定根节点对应的弹性分布式数据集的分区数。在一个实施例中,重分区管理单元604可以整数化处理与量阈值的比值。在此基础上,重分区管理单元604将经过整数化处理的比值与调节系数之积作为分区数。在一个实施例中,重分区管理单元604还可以根据分区上下线阈值对分区数进行调节。具体而言,当分区数超过分区上限阈值时,重分区管理单元604将分区数更新为分区上限阈值。当分区数低于分区下限阈值时,重分区管理单元604将分区数更新为分区下限阈值。

在一个实施例中,当一个非根节点对应的弹性分布式数据集与该非根节点的父节点对应的弹性分布式数据集之间为窄依赖关系时,重分区管理单元604可以在父节点对应的弹性分布式数据集完成重分区时,向非根节点所对应的弹性分布式数据集的分区器传递父节点对应的弹性分布式数据集的分区数。这样,分区器将非根节点所对应的弹性分布式数据集的分区数调节为与父节点对应的弹性分布式数据集的分区数一致。另外说明的是,各节点对应的rdd的分区器可以属于重分区管理单元604。

在一个实施例中,当一个非根节点对应的弹性分布式数据集与该非根节点的父节点对应的弹性分布式数据集之间为宽依赖关系时,重分区管理单元604可以在父节点对应的弹性分布式数据集完成重分区时,向非根节点所对应的弹性分布式数据集的分区器传递表示进行自适应分区的参数。响应于接收到参数,分区器可以根据非根节点所对应的弹性分布式数据集的数据量确定相应的分区数。数据处理装置600更具体的实施方式与方法200一致,这里不再赘述。

图7示出了一个计算设备的组成结构图。如图7所示,该计算设备包括一个或者多个处理器(cpu)702、通信模块704、存储器706、用户接口710,以及用于互联这些组件的通信总线708。

处理器702可通过通信模块704接收和发送数据以实现网络通信和/或本地通信。

用户接口710包括一个或多个输出设备712,其包括一个或多个扬声器和/或一个或多个可视化显示器。用户接口710也包括一个或多个输入设备714。用户接口710例如可以接收遥控器的指令,但不限于此。

存储器706可以是高速随机存取存储器,诸如dram、sram、ddrram、或其他随机存取固态存储设备;或者非易失性存储器,诸如一个或多个磁盘存储设备、光盘存储设备、闪存设备,或其他非易失性固态存储设备。

存储器706存储处理器702可执行的指令集,包括:

操作系统716,包括用于处理各种基本系统服务和用于执行硬件相关任务的程序;

应用718,包括用于实现上述数据处理方法的各种程序,比如可以包括图6所示数据处理装置600。

另外,本申请的每一个实施例可以通过由数据处理设备如计算机执行的数据处理程序来实现。显然,数据处理程序构成了本申请。

此外,通常存储在一个存储介质中的数据处理程序通过直接将程序读取出存储介质或者通过将程序安装或复制到数据处理设备的存储设备(如硬盘和或内存)中执行。因此,这样的存储介质也构成了本申请。存储介质可以使用任何类型的记录方式,例如纸张存储介质(如纸带等)、磁存储介质(如软盘、硬盘、闪存等)、光存储介质(如cd-rom等)、磁光存储介质(如mo等)等。

因此本申请还公开了一种非易失性存储介质,其中存储有数据处理程序,该数据处理程序用于执行本申请上述数据处理方法的任意一种实施例。

另外,本申请所述的方法步骤除了可以用数据处理程序来实现,还可以由硬件来实现,例如,可以由逻辑门、开关、专用集成电路(asic)、可编程逻辑控制器和嵌微控制器等来实现。因此这种可以实现本申请所述方法的硬件也可以构成本申请。

以上所述仅为本申请的可选实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。

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