基于Hive的任务并发执行方法和相关装置与流程

文档序号:32896384发布日期:2023-01-13 00:29阅读:38来源:国知局
基于Hive的任务并发执行方法和相关装置与流程
基于hive的任务并发执行方法和相关装置
技术领域
1.本技术涉及数据处理领域,尤其涉及一种基于hive的任务并发执行方法和相关装置。


背景技术:

2.本技术涉及金融技术领域,hive是基于hadoop构建的一套数据仓库分析系统,可以通过查询语言实现对存储在数据库中数据进行查询、分析等操作。在使用查询语言查询数据库中的数据时,终端设备可以对查询语言进行分析,得到执行路径。其中,执行路径由多个节点和节点之间的依赖关系组成。
3.一些实现中,为了提升使用结构化查询语言进行查询、分析等操作的执行效率,可以对执行路径中的节点进行并发执行。其中,执行路径中可以包括条件任务节点,条件任务节点中包括多个节点。对执行路径中的节点进行并发执行时,对于条件任务节点,可能存在未被选中执行的节点。在执行过程中,对于条件任务中未被选中执行的节点,以该节点为父节点开始,递归的删除父节点与其子节点之间的依赖关系。
4.然而,删除未被选中执行的节点的依赖关系时,可能出现将被选中的节点与其子节点之间的依赖关系删除的情况,使得被选中执行的节点的子节点不被执行,使得并发执行任务后得到的执行结果的准确度较低。


技术实现要素:

5.本技术实施例提供了一种基于hive的任务并发执行方法和相关装置,能够提升得到的执行结果的准确度。
6.第一方面,本技术实施例提供了一种基于hive的任务并发执行方法,所述基于hive的任务并发执行方法包括:
7.通过hive将接收到的查询语言拆分为m个节点,所述m个节点中包括对应于n个条件任务的条件任务关联节点,其中,任一个所述条件任务均对应有至少两个条件任务关联节点;所述m和所述n均为正整数;
8.为所述m个节点确定多个第一执行路径,每个所述条件任务节点在任一个所述第一执行路径中均存在一个关联节点。
9.在所述多个第一执行路径中确定出满足第一预设条件的第二执行路径。
10.按照所述第二执行路径中节点之间的依赖关系,并发执行所述第二执行路径中的各节点对应的任务,得到执行结果。
11.在一种可能的实现方式中,所述在所述多个第一执行路径中确定出满足第一预设条件的第二执行路径,包括:
12.分别获取所述m个节点的开始执行时刻、结束执行时刻、依赖执行时长,所述依赖执行时长为所述节点的执行准备时长。
13.计算节点的所述开始执行时刻和所述结束执行时刻之间的时间间隔,得到所述节
点的执行时长。
14.计算所述第一执行路径中各节点的所述执行时长和所述依赖执行时长的和,得到所述第一执行路径的总时长。
15.在所述多个第一执行路径中确定出所述总时长满足第一预设条件的第二执行路径。
16.在一种可能的实现方式中,所述在所述多个第一执行路径中确定出所述总时长满足第一预设条件的第二执行路径,包括:
17.在所述多个第一执行路径中确定所述总时长最大的第一执行路径为第二执行路径。
18.在一种可能的实现方式中,在按照所述第二执行路径中节点之间的依赖关系,并发执行所述第二执行路径中的各节点对应的任务之前,包括:
19.确定所述第二执行路径中的空闲时间段,所述空闲时间段与所述第二执行路径的下述内容有关:父节点的结束执行时刻、对应的子节点的开始执行时刻、以及所述子节点的依赖执行时长。
20.根据所述第二执行路径中各节点的所述开始执行时刻、所述结束执行时刻、所述依赖执行时长、以及所述第二执行路径中的所述空闲时间段,将满足第二预设条件的目标节点插入至所述空闲时间段执行,确定所述目标节点新的开始执行时刻和新的结束执行时刻,并得到新的第二执行路径。
21.在一种可能的实现方式中,所述目标节点的所述执行时长小于所述空闲时间段对应的时长,且所述目标节点的所述执行时长与所述空闲时间段对应的时长之间的差值大于第一预设值。
22.所述目标节点的所述开始执行时刻晚于所述空闲时间段的起始时刻,且所述目标节点的所述开始执行时刻与所述空闲时间段的起始时刻之间的时间间隔大于第一预设值。
23.所述目标节点对应的父节点的所述结束执行时刻早于所述空闲时间段的起始时刻。
24.在一种可能的实现方式中,所述目标节点包括第一目标节点和第二目标节点。
25.将满足第二预设条件的目标节点插入至所述空闲时间段执行,包括:
26.在所述第二执行路径中第一节点对应的父节点中确定出满足第三预设条件的关键节点,所述第一节点为对应有至少两个父节点的节点。
27.将所述关键节点中满足所述第二预设条件的所述第一目标节点插入至所述空闲时间段执行。
28.在完成所述第一目标节点的插入至之后,将剩余节点中满足所述第二预设条件的第二目标节点插入至所述空闲时间段执行,所述剩余节点为所述第二执行路径的多个节点中除所述关键节点之外的节点。
29.在一种可能的实现方式中,所述在所述第二执行路径中第一节点对应的父节点中确定出满足第三预设条件的关键节点,包括:
30.将所述第一节点对应的父节点中结束执行时刻最晚的父节点确定为关键节点。
31.在一种可能的实现方式中,所述将剩余节点中满足所述第二预设条件的第二目标节点插入至所述空闲时间段执行,包括:
32.根据所述第二目标节点的优先级,将所述第二目标节点插入至所述空闲时间段执行,所述优先级与所述第二目标节点的执行时长呈正相关。
33.第二方面,本技术实施例提供了一种基于hive的任务并发执行装置,所述基于hive的任务并发执行装置包括:
34.处理单元,用于通过hive将接收到的查询语言拆分为m个节点,所述m个节点中包括对应于n个条件任务的条件任务关联节点,其中,任一个所述条件任务均对应有至少两个条件任务关联节点;所述m和所述n均为正整数。
35.所述处理单元,还用于为所述m个节点确定多个第一执行路径,每个所述条件任务节点在任一个所述第一执行路径中均存在一个关联节点;
36.所述处理单元,还用于在所述多个第一执行路径中确定出满足第一预设条件的第二执行路径。
37.执行单元,用于按照所述第二执行路径中节点之间的依赖关系,并发执行所述第二执行路径中的各节点对应的任务,得到执行结果。
38.在一种可能的实现方式中,所述处理单元,具体用于分别获取所述m个节点的开始执行时刻、结束执行时刻、依赖执行时长,所述依赖执行时长为所述节点的执行准备时长;计算节点的所述开始执行时刻和所述结束执行时刻之间的时间间隔,得到所述节点的执行时长;计算所述第一执行路径中各节点的所述执行时长和所述依赖执行时长的和,得到所述第一执行路径的总时长;在所述多个第一执行路径中确定出所述总时长满足第一预设条件的第二执行路径。
39.在一种可能的实现方式中,所述处理单元,具体用于在所述多个第一执行路径中确定所述总时长最大的第一执行路径为第二执行路径。
40.在一种可能的实现方式中,所述处理单元,还用于确定所述第二执行路径中的空闲时间段,所述空闲时间段与所述第二执行路径的下述内容有关:父节点的结束执行时刻、对应的子节点的开始执行时刻、以及所述子节点的依赖执行时长;根据所述第二执行路径中各节点的所述开始执行时刻、所述结束执行时刻、所述依赖执行时长、以及所述第二执行路径中的所述空闲时间段,将满足第二预设条件的目标节点插入至所述空闲时间段执行,确定所述目标节点新的开始执行时刻和新的结束执行时刻,并得到新的第二执行路径。
41.在一种可能的实现方式中,所述目标节点的所述执行时长小于所述空闲时间段对应的时长,且所述目标节点的所述执行时长与所述空闲时间段对应的时长之间的差值大于第一预设值;所述目标节点的所述开始执行时刻晚于所述空闲时间段的起始时刻,且所述目标节点的所述开始执行时刻与所述空闲时间段的起始时刻之间的时间间隔大于第一预设值;所述目标节点对应的父节点的所述结束执行时刻早于所述空闲时间段的起始时刻。
42.在一种可能的实现方式中,所述目标节点包括第一目标节点和第二目标节点;所述处理单元,具体用于在所述第二执行路径中第一节点对应的父节点中确定出满足第三预设条件的关键节点,所述第一节点为对应有至少两个父节点的节点;将所述关键节点中满足所述第二预设条件的所述第一目标节点插入至所述空闲时间段执行;在完成所述第一目标节点的插入至之后,将剩余节点中满足所述第二预设条件的第二目标节点插入至所述空闲时间段执行,所述剩余节点为所述第二执行路径的多个节点中除所述关键节点之外的节点。
43.在一种可能的实现方式中,所述处理单元,具体用于将所述第一节点对应的父节点中结束执行时刻最晚的父节点确定为关键节点。
44.在一种可能的实现方式中,所述处理单元,具体用于根据所述第二目标节点的优先级,将所述第二目标节点插入至所述空闲时间段执行,所述优先级与所述第二目标节点的执行时长呈正相关。
45.第三方面,本技术实施例还提供了一种电子设备,该电子设备包括:处理器,以及与所述处理器通信连接的存储器;
46.所述存储器存储计算机执行指令;
47.所述处理器执行所述存储器存储的计算机执行指令,以实现上述第一方面任一种可能的实现方式中所述的方法。
48.第四方面,本技术实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,当处理器执行所述计算机执行指令时,实现上述第一方面任一种可能的实现方式中所述的方法。
49.第五方面,本技术实施例还提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时,实现上述第一方面任一种可能的实现方式中所述的方法。
50.由此可见,本技术实施例提供了一种基于hive的任务并发执行方法和相关装置,该方法包括:通过hive将接收到的查询语言拆分为m个节点,m个节点中包括对应于n个条件任务的条件任务关联节点,其中,任一个条件任务均对应有至少两个条件任务关联节点;m和n均为正整数;为m个节点确定多个第一执行路径,每个条件任务节点在任一个第一执行路径中均存在一个关联节点;在多条第一执行路径中确定出满足第一预设条件的第二执行路径;按照第二执行路径中节点之间的依赖关系,并发执行第二执行路径中的各节点对应的任务,得到执行结果。本技术实施例提供的方法,由于每个条件任务节点在任一个第一执行路径中均存在一个关联节点,且并发执行的第二执行路径为多个第一执行路径中满足第一预设条件的一条,这样,第二执行路径中包括的条件任务关联节点均为需要执行的节点,使得并发执行第二执行路径中各节点对应的任务的过程中,不需要删除节点之间的依赖关系,提高了得到的执行结果的准确度。
附图说明
51.图1为本技术实施例提供的一种现有技术的多个节点组成的执行路径示意图;
52.图2为本技术实施例提供的一种基于hive的任务并发执行方法的流程示意图;
53.图3为本技术实施例提供的一种第一执行路径的示意图一;
54.图4为本技术实施例提供的一种第一执行路径的示意图二;
55.图5为本技术实施例提供的一种第一执行路径的示意图三;
56.图6为本技术实施例提供的一种第一执行路径的示意图四;
57.图7为本技术实施例提供的另一种基于hive的任务并发执行方法的流程示意图;
58.图8为本技术实施例提供的存在条件任务的多个节点组成的执行路径示意图;
59.图9为本技术实施例提供的一种第二执行路径示意图;
60.图10为本技术实施例提供的一种资源调度示意图一;
61.图11为本技术实施例提供的一种资源调度示意图二;
62.图12为本技术实施例提供的一种资源调度示意图三;
63.图13为本技术实施例提供的一种基于hive的任务并发执行装置的结构示意图;
64.图14为本技术提供的一种电子设备结构示意图。
65.通过上述附图,已示出本公开明确的实施例,后文中将有更详细的描述。这些附图和文字描述并不是为了通过任何方式限制本公开构思的范围,而是通过参考特定实施例为本领域技术人员说明本公开的概念。
具体实施方式
66.这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
67.在本技术的实施例中,“至少一个”是指一个或者多个,“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况,其中a,b可以是单数或者复数。在本技术的文字描述中,字符“/”一般表示前后关联对象是一种“或”的关系。
68.hive的执行过程可以包括以下步骤:将hibernate查询语言(hibernate query language,hql)发送给客户端;通过解析器对hql进行语法解析生成抽象语法树(abstract syntax code,ast);遍历ast生成查询块(qeury block,qb);通过逻辑计划生成器logic plan generator将qb转换成逻辑执行计划;通过逻辑优化器logic optimizer优化逻辑执行计划;通过物理计划生成器physical plan gernerator将逻辑计划转化成物理计划;通过物理优化器physical optimizer对生成的物理计划进行优化;将完整的计划交由hadoop引擎执行,得到执行结果。
69.hadoop引擎执行计划是以节点为粒度进行的,因此,在上述将逻辑计划转化成物理计划的过程中,hive可以将用户输入的sql语句划分为多个节点,其中,每个节点可以是不同类型的任务,节点对应的任务类型可以包括movetask、mapredtask、conditionaltask等。
70.其中,movetask为移动任务,是在本地执行的一种移动数据域的任务,可以将数据域中的数据从一个存储位置移动到另一个存储位置。mapredtask是一种在后台服务器上执行的一种后台任务,主要提交到yarn作为mapreduce任务运行,一般为数据计算任务,是最耗时的任务,同时也会占用一定的资源。conditionaltask为条件选择节点,不占用集群资源,hive的dag中可能不需要所有节点都完成执行,hive可以基于特定的执行类型选择某一个分支来执行,同时裁剪掉其他的分支,裁剪逻辑为递归删除子节点对父节点的依赖。
71.示例性的,hql被划分后得到的多个节点构成的执行路径可以使用图1所示的dag图表示。图1为本技术实施例提供的一种现有技术的多个节点组成的执行路径示意图。
72.图1所示的dag图中,节点s1、节点s2、节点s3、节点s5、节点s6、节点s8、节点s10、节点s12、节点s13为mapredtask类型的任务,节点s9和节点s13为conditionaltask类型的任务,节点s0为movetask类型的任务。节点之间带箭头的线段表示节点之间的依赖关系,箭头的指向表示节点的执行顺序。一个依赖关系有一个父节点和一个子节点组成,子节点为箭
头所指的节点,例如,节点s2和节点s3之间的依赖关系表示节点s2为父节点,节点s3为子节点。在执行节点对应的业务时,需要在父节点对应的业务执行完成之后再执行子节点对应的业务。
73.执行图1所示的dag图中的节点对应的任务时,可以先广度的遍历dag图,将满足可执行条件的节点放入待执行队列,然后从执行队列里获取一个节点提交执行。节点对应的可执行条件以下几项:未加入执行队列、未被初始化、对应的父节点均执行完成。
74.一些实现中,为了提升节点对应的任务的执行效率,使用并发执行的方法执行节点对应的任务。以上述图1所示的dag图为例,条件选择节点s9对应的业务为在节点s2和节点s12中选择一个节点继续执行,假设选择执行节点s2,则将节点s2放入执行队列,开始裁剪节点s12这个分支,从节点s12出发,遍历其子节点,子节点为节点s8,删除节点s12和节点s8之间的依赖关系,以节点s8为父节点,继续遍历节点s8的子节点,节点s8的子节点为节点s2,删除节点s8和节点s2之间的依赖关系,递归下去,直到节点s12这个分支完全被删除。根据图1所示,递归下去会删除节点s2和节点s3之间的依赖关系,节点s3和节点s0之间的依赖关系。同理,假设条件选择节点s11选择执行节点s6,则需要以节点s13为父节点,递归的删除依赖关系,删除的依赖关系包括节点s13和节点s10之间的依赖关系、节点s10和节点s6之间的依赖关系、节点s6和节点s3之间的依赖关系以及节点s3和节点s0之间的依赖关系。这样,节点s3、节点s0均成为没有父节点的孤立节点,因此,节点s3、节点s0无法进入可执行队列,成为不被执行的节点。这样,无论节点s2、节点s6中任意一个执行完成,都无法触发节点s3和节点s0的执行,由于节点s3和节点s0未被执行,因此节点s3和节点s0分别得到执行结果中不包括节点s3和节点s0对应的业务的执行数据,使得执行结果不完整,降低了执行结果的准确度。
75.另一些实现中,为了解决上述并发执行可能存在执行结果不完整的问题,可以关闭conditionaltask的并发执行,或者对conditionaltask分支裁剪操作进行加锁处理,但是,这两种方式在解决上述问题的同时会增加得到执行结果的时长,降低执行的效率。并且加锁处理的方式无法根本性的解决问题,例如,在图1中,若选择执行节点s2和节点s6,在节点s12获取锁的情况下,节点s12开始进行分支裁剪,当节点s12分支裁剪结束后,节点s13获取了锁进行分支裁剪,如果节点s2执行的时间较长,可能出现节点s13的裁剪操作在节点s2和节点s6运行完成之前结束的情况,这样,节点s3依然有可能丢失父节点,使得得到的执行结果的准确度较低。
76.示例性的,当多个mapredtask任务依赖多个资源的时,节点对应的任务执行还需要满足存在足够的资源空间被使用。在节点对应的任务执行过程中,因为节点对应的任务被执行需要满足父节点执行完毕的条件。一个节点可能对应有多个父节点,而每个父节点完成执行的时刻不一定相同,可能存在其中一个父节点的完成时刻晚于其他父节点的完成时刻。这样,该节点需要等完成时刻最晚的父节点执行完成才能被执行,该节点等到该完成时刻最晚的父节点完成的这段时间内,该节点对应的资源上没有节点在执行,使得资源上存在空闲时间段,造成了资源的浪费。
77.有鉴于此,本技术实施例提供了一种基于hive的任务并发执行方法,为查询语言拆分后得到的m个节点确定第一执行路径,且每个条件任务节点在任一个第一执行路径中均存在一个关联节点,使得第一执行路径中不需要条件任务选择需要执行的节点,也就是
说,无论执行第一执行路径中的哪一条,均不需要删除节点之间的依赖关系。此外,并发执行的第二执行路径是多个第一执行路径中满足第一预设条件的执行路径,这样,第二执行路径中的节点均是需要执行的节点,不需要,提升了得到的执行结果的完整性和准确度。
78.下面,将通过具体的实施例对本技术提供的基于hive的任务并发执行方法进行详细地说明。可以理解的是,下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例不再赘述。
79.图2为本技术实施例提供的一种基于hive的任务并发执行方法的流程示意图。该基于hive的任务并发执行方法可以由软件和/或硬件装置执行,例如,该硬件装置可以为基于hive的任务并发执行装置,该基于hive的任务并发执行装置可以为服务器或者服务器中的处理芯片。示例的,请参见图2所示,该基于hive的任务并发执行方法可以包括:
80.s201、通过hive将接收到的查询语言拆分为m个节点,m个节点中包括对应于n个条件任务的条件任务关联节点,其中,任一个条件任务均对应有至少两个条件任务关联节点;m和n均为正整数。
81.本技术实施例中,查询语言可以为sql也可以为hql,或者其他的查询语言,本技术实施例对此不做限定。n小于m,本技术实施例对于m和n的数值不做限定。
82.条件任务为conditionaltask,条件任务关联节点可以为供条件任务选择的节点,条件任务可以在其对应的至少两个条件任务关联节点中确定一个条件任务关联节点被执行。例如,图1中的节点s9对应的任务为条件任务,则节点s2和节点s12为节点s2的两个条件任务关联节点。
83.hive在执行过程中,通过对执行计划进行优化等步骤能够完成将查询语言拆分为m个节点。
84.示例性的,将查询语言拆分为m个节点之后,可以得到每个节点的执行信息,包括每个节点的依赖关系、节点数据的大小、节点对应的资源信息、节点对应的开始执行时刻和结束执行时刻等。
85.s202、为m个节点确定多个第一执行路径,每个条件任务节点在任一个第一执行路径中均存在一个关联节点。
86.由于每个条件任务节点在任一个第一执行路径中均存在一个关联节点,因此,为m个节点确定的多个第一执行路径的数量为每个条件任务的条件任务关联节点的数量的乘积,例如,存在50个节点中存在4个条件任务,4个条件任务的条件任务关联节点的数量分别为4个、3个、2个、2个,则为50个节点确定的第一执行路径的数量为4
×3×2×
2=48个。
87.示例性的,每个条件任务节点在任一个第一执行路径中均存在一个关联节点,则条件任务在任一个第一执行路径中均为无效的任务,因此,确定多个第一执行路径时,可以将条件任务删除,这样,任一个第一执行路径中均不存在条件执行任务。
88.以图1所示的dag图中的节点为例,其中包括两个条件任务,每个条件任务中均包括两个关联节点,因此,可以确定出4条第一执行路径,分别如图3-图6所示。其中,图3为本技术实施例提供的一种第一执行路径的示意图一,图3所示的执行路径为执行关联节点s12和关联节点s13时对应的第一执行路径。图4为本技术实施例提供的一种第一执行路径的示意图二,图4所示的执行路径为执行关联节点s12和关联节点s6时对应的第一执行路径。图5为本技术实施例提供的一种第一执行路径的示意图三,图5所示的执行路径为执行关联节
点s2和关联节点s13时对应的第一执行路径。图6为本技术实施例提供的一种第一执行路径的示意图四,图6所示的执行路径为执行关联节点s2和关联节点s6时对应的第一执行路径。
89.在图3-图6所示的第一执行路径中,不存在条件节点s9和条件节点s11,也就是说,图3-图6所示的任一个第一执行路径在执行过程中,不需要删除依赖关系,其中的每个节点对应的任务均可以被执行。
90.s203、在多条第一执行路径中确定出满足第一预设条件的第二执行路径。
91.在本技术实施例中,第一预设条件可以与每个节点的依赖关系、节点数据的大小、节点对应的资源信息、节点对应的开始执行时刻和结束执行时刻等节点执行信息有关。具体的第一预设条件将在后续实施例详细说明,在此不做赘述。
92.s204、按照第二执行路径中节点之间的依赖关系,并发执行第二执行路径中的各节点对应的任务,得到执行结果。
93.示例性的,并发执行第二执行路径中的各节点对应的任务时,可以先将满足执行条件的节点放入待执行队列中,再从待执行队列中获取节点进行执行。满足的执行条件可参见上述实施例所述,本技术实施例不再赘述。
94.由此可见,本技术实施例提供的基于hive的任务并发执行方法,可以为m个节点确定多个第一执行路径,且每个条件任务节点在任一个第一执行路径中均存在一个关联节点,这样,执行第一执行路径中各节点对应的任务时,不需要条件任务进行选择,使得条件任务在多个第一执行路径中均为无效任务。此外,第二执行路径为多个第一执行路径中满足第一预设条件的一个,使得并发执行第二执行路径中各节点对应的任务时,第二执行路径中的每一个任务均被执行,提升了执行结果的完整性和准确度。
95.在本技术实施例中,在多个第一执行路径中确定出满足第一预设条件的第二执行路径,可以包括下述方法:分别获取m个节点的开始执行时刻、结束执行时刻、依赖执行时长,依赖执行时长为节点的执行准备时长;计算节点的开始执行时刻和结束执行时刻之间的时间间隔,得到节点的执行时长;计算第一执行路径中各节点的执行时长和依赖执行时长的和,得到第一执行路径的总时长;在多个第一执行路径中确定出总时长满足第一预设条件的第二执行路径。
96.可以理解的是,并发执行时可能存在各节点的执行时间段重叠的情况,将第一执行路径中各节点的执行时长和依赖执行时长的和作为该第一执行路径的总时长,能够将重叠的时间段计算进去,这样,得到的总时长能够有效的反应各第一执行路径的时长情况。
97.本技术实施例中,节点的依赖执行时长与该节点执行时对应的数据大小成正相关。
98.这样,由于节点的执行时长和依赖执行时长与节点对应的执行效率权值呈正相关,因此,每个第一执行路径的总时长越长则该第一执行路径的执行效率越高,使得确定出的第二执行路径更加符合实际的执行路径,进一步提升了得到的执行结果的准确度。
99.示例性的,可以在多个第一执行路径中确定总时长最大的第一执行路径为第二执行路径。这样,使得得到的第二执行路径为执行的可能性最高的执行路径,提升确定的第二执行路径的准确度。
100.在本技术实施例中,为了解决资源上存在空闲时间段,使得资源浪费的情况,在得到第二执行路径之后,可以对第二执行路径进行优化。
101.对第二执行路径进行优化时,需要先确定第二执行路径中的空闲时间段,空闲时间段与第二执行路径的下述内容有关:父节点的结束执行时刻、对应的子节点的开始执行时刻、以及子节点的依赖执行时长。
102.示例性的,确定空闲时间段时,可以先确定父节点的结束执行时刻与子节点的开始执行时刻之间的时间段,在该时间段中去除子节点的依赖执行时长得到的时间段为空闲时间段。其中,可以在该时间段的结束时刻开始向前去除子节点的依赖执行时长,本技术实施例对于具体的去除方式不做限定。
103.进一步的,在确定空闲时间段之后可以根据第二执行路径中各节点的开始执行时刻、结束执行时刻、依赖执行时长、以及第二执行路径中的空闲时间段,将满足第二预设条件的目标节点插入至空闲时间段执行,确定目标节点新的开始执行时刻和新的结束执行时刻,并得到新的第二执行路径。
104.这样,通过将满足第二预设条件的目标节点插入至空闲时间段执行,利用空闲时间段的资源,提升了资源的利用率。
105.示例性的,将目标节点需要满足的第二预设条件可以包括:目标节点的执行时长小于空闲时间段对应的时长,且目标节点的执行时长与空闲时间段对应的时长之间的差值大于第一预设值;目标节点的开始执行时刻晚于空闲时间段的起始时刻,且目标节点的开始执行时刻与空闲时间段的起始时刻之间的时间间隔大于第一预设值;目标节点对应的父节点的结束执行时刻早于空闲时间段的起始时刻。
106.本技术实施例中,第一预设值和第二预设值可以相等也可以不相等,本技术实施例不做限定。
107.例如,空闲时间段为2:15-2:40,存在节点的执行时间段为2:55-3:05,目标节点的依赖执行时长为2分钟,且节点对应的多个父节点均在2:15之间执行完毕,则可以将该节点插入至该空闲时间段执行。
108.这样,通过确定目标节点的执行时长小于空闲时间段对应的时长,使得插入后的目标节点的新的执行时间段不会与其他节点的执行时间段重叠,不会对其他节点造成影响。通过确定目标节点对应的父节点的结束执行时刻早于空闲时间段的起始时刻,使得插入后的目标节点的新的开始执行时刻晚于其父节点的结束执行时刻,使得插入后的目标节点能够被执行。
109.在本技术实施例中,目标节点可以包括第一目标节点和第二目标节点。将目标节点插入至空闲时间段执行时,可以在第二执行路径中第一节点对应的父节点中确定出满足第三预设条件的关键节点,第一节点为对应有至少两个父节点的节点;将关键节点中满足第二预设条件的第一目标节点插入至空闲时间段执行;在完成第一目标节点的插入至之后,将剩余节点中满足第二预设条件的第二目标节点插入至空闲时间段执行,剩余节点为第二执行路径的多个节点中除关键节点之外的节点。
110.示例性的,第三预设条件可以与至少两个父节点的结束时刻有关。
111.这样,通过先插入第二执行路径中的关键节点,再插入第二执行路径中的剩余节点,即非关键节点,使得关键节点的执行时间提前。
112.示例性的,可以将第一节点对应的所有父节点中结束执行时刻最晚的父节点确定为关键节点。这样,能够将父节点的执行时间提前,可以缩短第二执行路径的并发执行时
长。
113.插入第二目标节点时,可以根据第二目标节点的优先级,将第二目标节点插入至空闲时间段执行,优先级与第二目标节点的执行时长呈正相关。
114.示例性的,若存在执行时长相同的多个第二目标节点,优先插入结束执行时刻最晚的第二目标节点。
115.这样,根据第二目标节点的执行时长确定第二目标节点插入的优先级,使得执行时长较长的第二目标节点先被插入,使得执行时长较长的第二目标节点先被执行。
116.下面,对确定多个第一执行路径以及优化执行路径的整个过程进行详细的描述。图7为本技术实施例提供的另一种基于hive的任务并发执行方法的流程示意图。如图7所示,该方法可以包括:
117.s701、获取多个节点中每个节点的执行信息
118.示例性的,节点的执行信息可以包括节点的开始执行时刻、结束执行时刻、执行时长、以及依赖执行时长等信息。
119.s702、遍历所有节点,得到l个可能的执行路径。
120.示例性的,遍历所有节点,得到l各可能的执行路径的方法可参见上述根据图1所示的dag图得到图3-图6所示的dag图的方法,即确定多个第一执行路径的描述,在此不再赘述。
121.s703、分别判断l个执行路径是否为目标执行路径。
122.示例性的,目标路径可以为上述实施例中的第二执行路径,分别判断l个路径是否为目标执行路径可以根据l个执行路径的总时长确定,具体的方法可参见上述实施例中确定第二执行路径的描述,在此不再赘述。
123.其中,对于l个执行路径中的非目标执行路径执行下述步骤s704,对于目标执行路径执行下述步骤s705-s707。
124.s704、放弃该执行路径。
125.s705、在目标执行路径中确定关键执行路径。
126.本技术实施例中,关键执行路径是由关键节点组成的。因此,需要在目标执行路径中的多个节点中确定出关键节点,并根据关键节点以及关键节点之间的依赖关系得到关键执行路径。
127.示例性的,在目标执行路径中确定关键节点,可以从目标路径的末端开始,从下往上遍历目标路径中的所有节点,在目标路径中确定出存在至少两个父节点的待处理节点。针对每个待处理节点,在其对应的至少两个父节点中确定出一个关键节点。
128.示例性的,可以使用stage表示节点,stage-i表示节点i,节点i可以为目标路径中的第一个待处理节点。假设stage-i对应的父节点构成的集合表示为pn(stage-i),stage-j为pn(stage-i)的某一个元素,stage-k为pn(stage-i)的任意一个元素。可以计算每个stage-k的结束时刻加上stage-k到stage-k的依赖执行时长,若stage-j满足et(stage-j)+c(stage-j,stage-i)=max(et(stage-k)+c(stage-k,stage-i)),其中,et(stage-j)表示stage-j的结束时刻,c(stage-j,stage-i)表示stage-j到stage-i的依赖执行时长。也就是说,当stage-j的结束时刻加上stage-j到stage-i的依赖执行时长为stage-k中最大的时,则可以确定stage-j为stage-i的关键节点。
129.s706、根据关键执行路径对目标执行路径进行优化。
130.示例性的,对目标执行路径进行优化时,可以确定目标执行路径中各节点在其对应的资源上执行时,该资源存在的空闲时间段。例如,节点s11和其对应的子节点s12均在资源1上执行,节点s11对应的业务在1:00执行完成,其对应的子节点s12的依赖执行时长为15分钟,且子节点s12对应的业务在1:40开始执行,且在1:00-1:40之间,资源1不存在其他节点对应的任务在执行,因此,资源1存在空闲时间段1:00-1:25。
131.示例性的,假设stage-i和stage-j都在资源resource-i执行,stage-i为stage-j的父节点,stage-i的完成时间为et(stage-i),stage-j的开始时间为st(stage-j),则资源resource-i的空闲时间段ft(resource-i)=st(stage-j)-et(stage-i)-c(stage-i,stage-j)。其中,c(stage-i,stage-j)表示stage-i和stage-j的依赖执行时长。
132.进一步的,确定目标执行路径上的资源空闲时间段之后,可以将关键路径中的关键节点插入至资源空闲时间段中执行。关键节点插入至资源空闲时间段时,需要满足该关键节点的父节点均执行完成,存在足够的空闲时间段运行该关键节点的条件。
133.示例性的,关键节点需要满足的条件可参见上述实施例所述的第二预设条件,在此不再赘述。
134.假设stage-n为运行在资源resource-r上的待插入的关键节点,若存在空闲时间段ft-k中插入了stage-n后满足:空闲时间段=et(ft-k)-max(st(ft-k),ot[stage-n][resource-r]),其中,ot[stage-n][resource-r]为未插入关键节点时stage-n在目标执行路径中的最早开始时刻。也就是说,空闲时间段的时长必须大于等于该节点在资源上的运行时长,保证插入后不能影响该资源上原有任务的开始时间
[0135]
此外,待插入的关键节点stage-n还需要满足空闲时间段≥t(stage-n,resource-r),其中,t(stage-n,resource-r)表示stage-n在资源resource-r执行时的执行时长。
[0136]
示例性的,将关键节点插入至空闲时间段之后,还可以将非关键节点插入至空闲时间段内,非关键节点被插入时需要满足的条件与关键节点被插入时需要满足的条件相同,在此不再赘述。
[0137]
示例性的,插入非关键节点时,可以根据非关键节点的优先级进行插入,具体的插入顺序可参见上述实施例所述,在此不再赘述。
[0138]
s707、得到并执行新的目标执行路径。
[0139]
示例性的,在进行上述步骤s707的优化之后,可以得到新的目标执行路径。新的目标执行路径与目标执行路径相比,被插入的关键节点和非关键节点的开始执行时刻和结束执行时刻均发生变化。
[0140]
基于此,本技术实施例提供的基于hive的任务并发执行方法使用“先确定执行路径后执行该执行路径”的思想,在查询语言被执行之前,为查询语言确定出不包括条件任务的目标执行路径,使得在执行目标执行路径中的各节点对应的业务时,不需要删除节点之间的依赖关系,提升了得到的执行结果的完整性和准确度。并对得到的目标执行路径进行插入,缩短了查询语言被执行花费的时间,提升了执行效率。
[0141]
为了便于理解本技术实施例提供的基于hive的任务并发执行方法,下面,将通过具体的例子,对本技术实施例提供的技术方案进行详细的描述,具体的可参见图8所示,图8为本技术实施例提供的存在条件任务的多个节点组成的执行路径示意图。
[0142]
如图8所示,该执行路径中包括条件任务1和条件任务2,其中,条件任务1在执行时可以在节点s4和节点s20中确定一个需要执行的节点放入待执行队列。条件任务2在执行时可以在节点s5和节点s21中确定一个需要执行的节点放入待执行队列。
[0143]
可以理解的是,在如图8所示的执行路径中,当条件任务1和条件任务2选择了需要执行的节点之后,需要递归的删除未选中的节点与其子节点之间的依赖关系,可能出现被选中执行的节点的子节点不被执行的情况,因此,需要使用本技术实施例提供的方法对图8所示的执行路径进行处理。
[0144]
图8所示的执行路径中各节点的执行信息可以参见下述表1所示:
[0145]
表1
[0146][0147][0148]
根据上述表1可知,图8所示的执行路径中的各节点在4个不同的资源上执行,其中包括的2个conditiontask在执行时用于对其中的节点进行选择,由于每个conditiontask
中均包含有两个节点,则可以得到4中可能的执行路径。根据上述实施例所述的方法,确定出的第二执行路径可参见图9所示,图9为本技术实施例提供的一种第二执行路径的示意图。
[0149]
示例性的,使用上述实施例确定关键路径的方法,可以确定图9中的第二执行路径图对应的关键路径为节点s1

节点s3

节点s7

节点s11

节点s15

节点s18,且在节点s13

节点s14之间存在空闲时间段1,节点s17

节点s18之间存在空闲时间段2。
[0150]
以节点对应的业务执行时对应的资源对图9所示的第二执行路径中的节点进行分类,可以得到如图10所示的资源调度图。图10为本技术实施例提供的一种资源调度示意图一。
[0151]
示例性的,可以将确定的关键节点插入资源空闲时间段执行,根据上述实施例所述的将关键节点插入至空闲时间段执行的方法,可以确定将节点s15出入资源1的空闲时间段2中,插入后的资源调度图可参见图11所示。图11为本技术实施例提供的一种资源调度示意图二。
[0152]
进一步的,在完成关键节点的插入之后,对非关键节点进行插入,可以对非关键节点中执行时长最大的节点优先插入,可以根据上述表1所示的数据,可以确定将节点s10插入资源1的空闲时间段中,插入后的资源调度图可参见图12所示。图12为本技术实施例提供的一种资源调度示意图三。
[0153]
示例性的,得到图12所示的资源调度图之后,可以按照图12所示的资源调度图执行各节点对应的业务,得到执行结果。图12所示的资源调度图中的节点均为需要执行的节点,且在执行过程中不需要删除节点之间的依赖关系,使得得到的执行结果的完整性和准确度更高。此外,通过将节点s10和节点s15插入资源1的空闲时间段执行,提升了资源1的利用率,且缩短了执行业务花费的时间,提升用户体验。
[0154]
图13为本技术实施例提供的一种基于hive的任务并发执行装置130的结构示意图,示例的,请参见图13所示,该基于hive的任务并发执行装置130可以包括:
[0155]
处理单元1301,用于通过hive将接收到的查询语言拆分为m个节点,m个节点中包括对应于n个条件任务的条件任务关联节点,其中,任一个条件任务均对应有至少两个条件任务关联节点;m和n均为正整数;
[0156]
处理单元1301,还用于为m个节点确定多个第一执行路径,每个条件任务节点在任一个第一执行路径中均存在一个关联节点;
[0157]
处理单元1301,还用于在多个第一执行路径中确定出满足第一预设条件的第二执行路径;
[0158]
执行单元1302,用于按照第二执行路径中节点之间的依赖关系,并发执行第二执行路径中的各节点对应的任务,得到执行结果。
[0159]
可选的,处理单元1301,具体用于分别获取m个节点的开始执行时刻、结束执行时刻、依赖执行时长,依赖执行时长为节点的执行准备时长;计算节点的开始执行时刻和结束执行时刻之间的时间间隔,得到节点的执行时长;计算第一执行路径中各节点的执行时长和依赖执行时长的和,得到第一执行路径的总时长;在多个第一执行路径中确定出总时长满足第一预设条件的第二执行路径。
[0160]
可选的,处理单元1301,具体用于在多个第一执行路径中确定总时长最大的第一
执行路径为第二执行路径。
[0161]
可选的,处理单元1301,还用于确定第二执行路径中的空闲时间段,空闲时间段与第二执行路径的下述内容有关:父节点的结束执行时刻、对应的子节点的开始执行时刻、以及子节点的依赖执行时长;根据第二执行路径中各节点的开始执行时刻、结束执行时刻、依赖执行时长、以及第二执行路径中的空闲时间段,将满足第二预设条件的目标节点插入至空闲时间段执行,确定目标节点新的开始执行时刻和新的结束执行时刻,并得到新的第二执行路径。
[0162]
可选的,目标节点的执行时长小于空闲时间段对应的时长,且目标节点的执行时长与空闲时间段对应的时长之间的差值大于第一预设值;目标节点的开始执行时刻晚于空闲时间段的起始时刻,且目标节点的开始执行时刻与空闲时间段的起始时刻之间的时间间隔大于第一预设值;目标节点对应的父节点的结束执行时刻早于空闲时间段的起始时刻。
[0163]
可选的,目标节点包括第一目标节点和第二目标节点;处理单元1301,具体用于在第二执行路径中第一节点对应的父节点中确定出满足第三预设条件的关键节点,第一节点为对应有至少两个父节点的节点;将关键节点中满足第二预设条件的第一目标节点插入至空闲时间段执行;在完成第一目标节点的插入至之后,将剩余节点中满足第二预设条件的第二目标节点插入至空闲时间段执行,剩余节点为第二执行路径的多个节点中除关键节点之外的节点。
[0164]
可选的,处理单元1301,具体用于将第一节点对应的父节点中结束执行时刻最晚的父节点确定为关键节点。
[0165]
可选的,处理单元1301,具体用于根据第二目标节点的优先级,将第二目标节点插入至空闲时间段执行,优先级与第二目标节点的执行时长呈正相关。
[0166]
本技术实施例提供的基于hive的任务并发执行装置,可以执行上述任一实施例中的基于hive的任务并发执行方法的技术方案,其实现原理以及有益效果与基于hive的任务并发执行方法的实现原理及有益效果类似,可参见基于hive的任务并发执行方法的实现原理及有益效果,此处不再进行赘述。
[0167]
图14为本技术提供的一种电子设备结构示意图。如图14所示,该电子设备1400可以包括:至少一个处理器1401和存储器1402。
[0168]
存储器1402,用于存放程序。具体地,程序可以包括程序代码,程序代码包括计算机操作指令。
[0169]
存储器1402可能包含高速ram存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。
[0170]
处理器1401用于执行存储器1402存储的计算机执行指令,以实现前述方法实施例所描述的基于hive的任务并发执行方法。其中,处理器1401可能是一个中央处理器(central processing unit,简称为cpu),或者是特定集成电路(application specific integrated circuit,简称为asic),或者是被配置成实施本技术实施例的一个或多个集成电路。具体的,在实现前述方法实施例所描述的基于hive的任务并发执行方法时,该电子设备例如可以是终端、服务器等具有处理功能的电子设备。
[0171]
可选的,该电子设备1400还可以包括通信接口1403。在具体实现上,如果通信接口1403、存储器1402和处理器1401独立实现,则通信接口1403、存储器1402和处理器1401可以
通过总线相互连接并完成相互间的通信。总线可以是工业标准体系结构(industry standard architecture,简称为isa)总线、外部设备互连(peripheral component,简称为pci)总线或扩展工业标准体系结构(extended industry standard architecture,简称为eisa)总线等。总线可以分为地址总线、数据总线、控制总线等,但并不表示仅有一根总线或一种类型的总线。
[0172]
可选的,在具体实现上,如果通信接口1403、存储器1402和处理器1401集成在一块芯片上实现,则通信接口1403、存储器1402和处理器1401可以通过内部接口完成通信。
[0173]
本技术还提供了一种计算机可读存储介质,该计算机可读存储介质可以包括:u盘、移动硬盘、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、磁盘或者光盘等各种可以存储程序代码的介质,具体的,该计算机可读存储介质中存储有程序指令,程序指令用于上述实施例中的方法。
[0174]
本技术还提供一种程序产品,该程序产品包括执行指令,该执行指令存储在可读存储介质中。电子设备的至少一个处理器可以从可读存储介质读取该执行指令,至少一个处理器执行该执行指令使得电子设备实施上述的各种实施方式提供的基于hive的任务并发执行方法。
[0175]
最后应说明的是:以上各实施例仅用以说明本技术的技术方案,而非对其限制;尽管参照前述各实施例对本技术进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本技术各实施例技术方案的范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1