一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种资源配置方法和装置与流程

2021-12-07 21:59:00 来源:中国专利 TAG:


1.本发明涉及计算机处理技术领域,特别涉及一种资源配置方法和装置。


背景技术:

2.spark是目前运用最广泛的大数据计算引擎。spark任务是用spark框架写的计算任务。spark任务的性能非常重要,如果调优得当,可将一个几小时的spark任务降至几十分钟,极大节省集群算力。
3.目前的spark任务调优基本都是通过人力在spark web ui中查看spark的stages信息,分析出任务输入、输出的数据量和shuffle耗时过长的stage,然后对任务的参数和程序进行调优,不断的尝试之后,得出最优参数和程序。
4.在实现本技术的过程中,发明人发现通过人力进行spark任务调优成本高,且工作效率低下。


技术实现要素:

5.有鉴于此,本技术提供一种资源配置方法和装置,能够在低成本条件下提高任务调优效率。
6.为解决上述技术问题,本技术的技术方案是这样实现的:
7.在一个实施例中,提供了一种资源配置方法,所述方法包括:
8.在spark任务运行之后,通过执行脚本调用spark api获取所述spark任务对应的json信息;
9.分析所述json信息生成stages信息;
10.基于所述stages信息通过预估spark任务处理的数据量对所述spark任务进行参数调优;
11.使用调优后的参数进行资源配置。
12.在另一个实施例中,提供了一种任务调优装置,所述装置包括:获取单元、分析生成单元、调优单元和配置单元;
13.所述获取单元,用于在spark任务运行之后,通过执行脚本调用spark api获取所述spark任务对应的json信息;
14.所述分析生成单元,用于分析所述获取单元获取的json信息获取stage的信息,生成stages信息;
15.所述调优单元,用于基于所述分析生成单元生成的stages信息通过预估spark任务处理的数据量对所述spark任务进行参数调优;
16.所述配置单元,用于使用所述调优单元调优后的参数进行资源配置。
17.在另一个实施例中,提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现所述资源配置方法的步骤。
18.在另一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现所述资源配置方法的步骤。
19.由上面的技术方案可见,上述实施例中通过执行脚本调用api获取json信息,分析获得stages信息,基于所述stages信息通过预估spark任务处理的数据量对所述spark任务进行参数调优,并使用调优后的参数进行资源配置,取代人力从spark web ui查看和分析的工作。该方案能够在节省成本的前提下自动进行参数调优,以提高资源配置效率。
附图说明
20.为了更清楚地说明本技术实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
21.图1为本技术实施例一中资源配置流程示意图;
22.图2为本技术实施例二中资源配置流程示意图;
23.图3为本技术实施例三中资源配置流程示意图;
24.图4为本技术实施例中应用于上述技术的装置结构示意图;
25.图5为本发明实施例提供的一种电子设备的实体结构示意图。
具体实施方式
26.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
27.本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例例如能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含。例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其他步骤或单元。
28.下面以具体实施例对本发明的技术方案进行详细说明。下面几个具体实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例不再赘述。
29.本技术实施例中提供一种资源配置方法,主要应用于用spark框架写的计算任务,即spark任务的参数调优,以及提高资源配置的效率。
30.spark是apache专为大规模数据处理而设计的快速通用的计算引擎。
31.本技术实施例中通过用脚本工具替代spark任务的人力调优工作,基于spark应用程序接口(application programming interface,api)获取任务的stages信息,分析出任务最优参数和优化点,并对spark代码进行修改,完成优化,使用优化后的参数进行资源部署。该方案能够在低成本条件下提高资源配置效率。
32.stage是spark术语,spark任务可根据shuffle情况分为数个stage,每个stage都有自己的运行时间、数据输入输出量、shuffle输入输出量等数据。
33.下面结合附图,以spark任务为例,详细说明本技术实施例中实现任务调优过程。
34.实施例一
35.参见图1,图1为本技术实施例一中资源配置流程示意图。具体步骤为:
36.步骤101,在spark任务运行之后,通过执行脚本调用spark api获取所述spark任务对应的json信息。
37.spark任务调优要求在任务已经运行过之后,有性能日志做参照的情况下进行。
38.通过执行脚本调用spark api,传递参照任务的application_id,获取对应spark任务的json信息。
39.这里执行脚本执行,表示这是一种自动化执行,不是手动执行。
40.api是一些预先定义的函数,或指软件系统不同组成部分衔接的约定。用来提供应用程序与开发人员基于某软件或硬件得以访问的一组例程,而又无需访问源码,或理解内部工作机制的细节。
41.其中,对象简谱(javascript object notation,json)是一种轻量级的数据交换格式;application_id:是spark任务运行时对应的应用id,每个任务的id都是唯一的。
42.步骤102,分析所述json信息生成stages信息。
43.分析json信息可获得stage的数量,以及每个stage的数据输入输出量、shuffle情况、耗时等。
44.所有stage的信息组成stages信息。
45.在具体实现时,将所述stages信息以程序便于读取的方式进行存储。
46.本技术实施例中对stages信息的存储方式不进行限制,给出如下存储方式为例:
47.将生成的stages信息使用stages链表进行存储;其中,所述链表的每个节点是一个stage对象。
48.即将所述stages信息可用程序处理成stages链表进行保存,链表的每个节点都是一个stage对象。
49.步骤103,基于所述stages信息通过预估spark任务处理的数据量对所述spark任务进行参数调优。
50.本步骤中基于所述stages信息通过预估spark任务处理的数据量对所述spark任务进行参数调优,具体包括:
51.第一步、从所述stages信息中获取输入数据量最大的stage;并以所述stage的输入数据量以gb为单位向上取整,获得所述spark任务所需内存估值mgb。
52.如输入数据量为1.5gb,则以gb为单位向上取整为2gb,将2gb作为内存估值。
53.第二步、计算m与k的比值h,以及h与l的比值c。
54.其中,kgb为预设一个分区处理的数据量,l为预设一个核(core)处理分区的个数。
55.在具体实现时,可以根据实际应用情况设置,本技术实施例对此不进行限制。
56.设置规则时,针对一个分区处理的数据量可以设置200mb到400mb之间的数值,如k可以设置为300mb;
57.针对一个core处理分区的个数可以设置2、3等数值。
58.h=m/k,c=h/l。
59.第三步、获取m和c的公约数。
60.m和c的公约数可以组成一个列表。
61.第四步、选择一公约数d作为申请服务器的数据;其中,其中,m/d的值属于设置的内存容量范围,c/d的值属于设置的core数量范围。
62.也就是说确定出能使单服务器负载在预设范围内的服务器数目d。
63.core为spark参数,可以理解为spark任务运行时申请的工作核数。
64.遍历所述列表中的公约数,如一个公约数满足下述条件,则选择所述公约数作为申请服务器的数目。
65.设置的单个服务器占用内存的取值范围为[1,p],core数量的取值范围为[2,x];如p根据单个服务器的内存容量设置,如可以设置为20;x根据单个服务器的core数量确定,如可以设置为10;
[0066]
则如选公约数d,且公约数d对应的m/d,以及c/d满足如下条件:
[0067]
1gb<=m/d<=pgb,2<=c/d<=x;
[0068]
那么选择d作为申请服务器的数目。
[0069]
如果按照上述方式选择出多个满足条件的公约数,则将所有公约数排序,选择出的公约数哪个与所有公约数排序后的中位数最接近,则选择哪个公约数作为申请服务器的数据,如果距离中位数的距离相同,则随机选择一个公约数作为申请服务器的数目。
[0070]
对参数调优过程进一步包括:
[0071]
分析所述json信息获取所述stage的数量;
[0072]
若stage的数量大于预设数量值,则在优化线程调度。
[0073]
具体实现时,可以通过添加speculation参数实现在任务复杂的情况下优化线程调度,这里在stage的数量大于预设数量值时确定当前处于任务复杂情况。
[0074]
对参数调优过程进一步包括:
[0075]
若stages信息中有数据划分字段,则优化数据划分性能。
[0076]
具体实现时,通过添加数据划分(shuffle)service参数实现又换数据划分性能。
[0077]
其中,shuffle为大数据术语,指数据划分、映射、聚合的过程,比如将一堆数据按key值分类聚合,就会触发shuffle行为。
[0078]
在具体实现参数优化时,如果需要修改参数,则可以通过正则替换直接在原参数上替换、修改。
[0079]
步骤104,使用调优后的参数进行资源配置。
[0080]
本技术实施例中通过执行脚本调用api获取json信息,分析获得stages信息,基于所述stages信息通过预估spark任务处理的数据量对所述spark任务进行参数调优,并使用调优后的参数进行资源配置,取代人力从spark web ui查看和分析的工作。该方案能够在节省成本的前提下自动进行参数调优,以提高资源配置效率。
[0081]
在参数调优时,可以调优申请服务器的数目、线程调度、shuffle性能等;并且通过正则替换直接修改代码,取代人力分析和代码修改工作。
[0082]
实施例二
[0083]
参见图2,图2为本技术实施例二中资源配置流程示意图。具体步骤为:
[0084]
步骤201,在spark任务运行之后,通过调用spark api获取所述spark任务对应的json信息。
[0085]
spark任务调优要求在任务已经运行过之后,有性能日志做参照的情况下进行。
[0086]
通过执行脚本调用spark api,传递参照任务的application_id,获取对应spark任务的json信息。
[0087]
这里执行脚本执行,表示这是一种自动化执行,不是手动执行。
[0088]
api是一些预先定义的函数,或指软件系统不同组成部分衔接的约定。用来提供应用程序与开发人员基于某软件或硬件得以访问的一组例程,而又无需访问源码,或理解内部工作机制的细节。
[0089]
其中,对象简谱(javascript object notation,json)是一种轻量级的数据交换格式;application_id:是spark任务运行时对应的应用id,每个任务的id都是唯一的。
[0090]
步骤202,分析所述json信息生成stages信息。
[0091]
分析json信息可获得stage的数量,以及每个stage的数据输入输出量、shuffle情况、耗时等。
[0092]
所有stage的信息组成stages信息。
[0093]
在具体实现时,将所述stages信息以程序便于读取的方式进行存储。
[0094]
本技术实施例中对stages信息的存储方式不进行限制,给出如下存储方式为例:
[0095]
将生成的stages信息使用stages链表进行存储;其中,所述链表的每个节点是一个stage对象。
[0096]
即将所述stages信息可用程序处理成stages链表进行保存,链表的每个节点都是一个stage对象。
[0097]
步骤203,基于所述stages信息通过预估spark任务处理的数据量对所述spark任务进行参数调优。
[0098]
本步骤中基于所述stages信息通过预估spark任务处理的数据量对所述spark任务进行参数调优,具体包括:
[0099]
第一步、从所述stages信息中获取输入数据量最大的stage;并以所述stage的输入数据量以gb为单位向上取整,获得所述spark任务所需内存估值mgb。
[0100]
如输入数据量为1.5gb,则以gb为单位向上取整为2gb,将2gb作为内存估值。
[0101]
第二步、计算m与k的比值h,以及h与l的比值c。
[0102]
其中,kgb为预设一个分区处理的数据量,l为预设一个核(core)处理分区的个数。
[0103]
在具体实现时,可以根据实际应用情况设置,本技术实施例对此不进行限制。
[0104]
设置规则时,针对一个分区处理的数据量可以设置200mb到400mb之间的数值,如k可以设置为300mb;
[0105]
针对一个core处理分区的个数可以设置2、3等数值。
[0106]
h=m/k,c=h/l。
[0107]
第三步、获取m和c的公约数。
[0108]
m和c的公约数可以组成一个列表。
[0109]
第四步、选择一公约数d作为申请服务器的数据;其中,其中,m/d的值属于设置的内存容量范围,c/d的值属于设置的core数量范围。
[0110]
也就是说确定出能使单服务器负载在预设范围内的服务器数目d。
[0111]
core为spark参数,可以理解为spark任务运行时申请的工作核数。
[0112]
遍历所述列表中的公约数,如一个公约数满足下述条件,则选择所述公约数作为申请服务器的数目。
[0113]
设置的单个服务器占用内存的取值范围为[1,p],core数量的取值范围为[2,x];如p根据单个服务器的内存容量设置,如可以设置为20;x根据单个服务器的core数量确定,如可以设置为10;
[0114]
则如选公约数d,且公约数d对应的m/d,以及c/d满足如下条件:
[0115]
1gb<=m/d<=pgb,2<=c/d<=x;
[0116]
那么选择d作为申请服务器的数目。
[0117]
如果按照上述方式选择出多个满足条件的公约数,则将所有公约数排序,选择出的公约数哪个与所有公约数排序后的中位数最接近,则选择哪个公约数作为申请服务器的数据,如果距离中位数的距离相同,则随机选择一个公约数作为申请服务器的数目。
[0118]
对参数调优过程进一步包括:
[0119]
分析所述json信息获取所述stage的数量;
[0120]
若stage的数量大于预设数量值,则在优化线程调度。
[0121]
具体实现时,可以通过添加speculation参数实现在任务复杂的情况下优化线程调度,这里在stage的数量大于预设数量值时确定当前处于任务复杂情况。
[0122]
对参数调优过程进一步包括:
[0123]
若stages信息中有数据划分字段,则优化数据划分性能。
[0124]
具体实现时,通过添加数据划分(shuffle)service参数实现又换数据划分性能。
[0125]
其中,shuffle为大数据术语,指数据划分、映射、聚合的过程,比如将一堆数据按key值分类聚合,就会触发shuffle行为。
[0126]
在具体实现参数优化时,如果需要修改参数,则可以通过正则替换直接在原参数上替换、修改。
[0127]
步骤204,基于所述stages信息优化写hive表的线程数对所述spark任务进行程序调优。
[0128]
其中,hive是一个数据仓库工具,用来进行数据提取、转化、加载。
[0129]
本步骤中基于所述stages信息优化写hive表的线程数对所述spark任务进行程序调优的方式给出如下两种实现方式,但是不限于如下两种:
[0130]
第一种:
[0131]
第一步、根据数据划分字段将代码划分为多个stage存储到一个stages列表b。
[0132]
具体实现时,从后向前扫描spark代码,当扫描到shuffle语句时,将之前的代码划分到一个stage里,将划分出的多个stage存储到一个stages列表b。
[0133]
本技术实施例中具体实现时,可以将stages信息存储到一个链表中,如链表a,则列表b的长度和链表a的长度理论上是一致的,可以更容易获取对应stage。
[0134]
第二步、通过正则匹配确定stages列表b中有写hive行为的stage,并获取所述stage在所述stages信息中对应的数据输出量o。
[0135]
正则匹配代码中含有”insert into”、”insert overwrite”、”.write(*)”的
stage,认定为有写hive行为的stage。
[0136]
第三步、计算hive的线程数t为o与y的比值。
[0137]
其中,所述y为1个线程写的预设值数据,即预设一个线程写ygb数据。
[0138]
具体实现是,y的值可以根基实际需要设置,如设为1,对此不进行限制。
[0139]
第四步、通过正则匹配出所述写hive行为,更新线程数为t。
[0140]
具体实现时通过正则匹配出所述写hive行为所读的dataframe,为所述dataframe添加.repartition(t)操作。
[0141]
到此完成了最优写hive数据线程数目设定。
[0142]
第二种:
[0143]
预先在spark任务的代码的写hive的分区数进行变量标记。
[0144]
具体实现为:预先在spark任务的代码中写hive代码所读的repartition里用optimizationnum[n]进行变量标记,其中optimizationnum[n]为repartition中的变量。
[0145]
所述基于所述stages信息优化写hive表的线程数对所述spark任务进行程序调优,包括:
[0146]
第一步、根据数据划分字段将代码划分为多个stage存储到一个stages列表b。
[0147]
具体实现可以为:从后向前扫描spark代码,当扫描到数据划分(shuffle)语句时,将之前的代码划分到一个stage里,将划分出的多个stage存储到一个stages列表b;
[0148]
本技术实施例中具体实现时,可以将stages信息存储到一个链表中,如链表a,则列表b的长度和链表a的长度理论上是一致的,可以更容易获取对应stage。
[0149]
第二步、若确定stages列表b中的stage里存在变量标记,则确定所述stage中有写hive行为;取所述stage在所述stages信息中对应的数据输出量o。
[0150]
通过正则匹配含有”optimizationnum[n]”的stage,即可认定为有写hive行为的stage。
[0151]
其中optimizationnum[n]是一个变量,[n]是数字,多个写hive行为后可以通过递增n的值来区分,比如:optimizationnum1、optimizationnum2。
[0152]
第三步、计算hive的线程数t为o与y的比值,其中,所述y为1个线程写的预设值数据。
[0153]
其中,所述y为1个线程写的预设值数据,即预设一个线程写yg数据。
[0154]
具体实现是,y的值可以根基实际需要设置,如设为1,对此不进行限制。
[0155]
第四步、使用所述线程数t对标记变量进行正则替换。
[0156]
具体实现时,通过正则替换,将optimizationhum[n]替换为计算出的对应的t值。
[0157]
到此完成了最优写hive数据线程数目设定。
[0158]
步骤205,使用调优后的参数进行资源配置。
[0159]
本技术实施例中通过执行脚本调用api获取json信息,分析获得stages信息,基于所述stages信息通过预估spark任务处理的数据量对所述spark任务进行参数调优,基于所述stages信息优化写hive表的线程数对所述spark任务进行程序调优;并使用调优后的参数进行资源配置,取代人力从spark web ui查看和分析的工作。该方案能够在节省成本的前提下自动进行参数调优,以提高资源配置效率。
[0160]
在参数调优时,可以调优申请服务器的数目、线程调度、shuffle性能等;并且通过
正则替换直接修改代码,取代人力分析和代码修改工作。
[0161]
实施例三
[0162]
参见图3,图3为本技术实施例三中资源配置流程示意图。具体步骤为:
[0163]
步骤301,在spark任务运行之后,通过调用spark api获取所述spark任务对应的json信息。
[0164]
spark任务调优要求在任务已经运行过之后,有性能日志做参照的情况下进行。
[0165]
通过执行脚本调用spark api,传递参照任务的application_id,获取对应spark任务的json信息。
[0166]
这里执行脚本执行,表示这是一种自动化执行,不是手动执行。
[0167]
api是一些预先定义的函数,或指软件系统不同组成部分衔接的约定。用来提供应用程序与开发人员基于某软件或硬件得以访问的一组例程,而又无需访问源码,或理解内部工作机制的细节。
[0168]
其中,对象简谱(javascript object notation,json)是一种轻量级的数据交换格式;application_id:是spark任务运行时对应的应用id,每个任务的id都是唯一的。
[0169]
步骤302,分析所述json信息生成stages信息。
[0170]
分析json信息可获得stage的数量,以及每个stage的数据输入输出量、shuffle情况、耗时等。
[0171]
所有stage的信息组成stages信息。
[0172]
在具体实现时,将所述stages信息以程序便于读取的方式进行存储。
[0173]
本技术实施例中对stages信息的存储方式不进行限制,给出如下存储方式为例:
[0174]
将生成的stages信息使用stages链表进行存储;其中,所述链表的每个节点是一个stage对象。
[0175]
即将所述stages信息可用程序处理成stages链表进行保存,链表的每个节点都是一个stage对象。
[0176]
步骤303,基于所述stages信息通过预估spark任务处理的数据量对所述spark任务进行参数调优。
[0177]
本步骤中基于所述stages信息通过预估spark任务处理的数据量对所述spark任务进行参数调优,具体包括:
[0178]
第一步、从所述stages信息中获取输入数据量最大的stage;并以所述stage的输入数据量以gb为单位向上取整,获得所述spark任务所需内存估值mgb。
[0179]
如输入数据量为1.5gb,则以gb为单位向上取整为2gb,将2gb作为内存估值。
[0180]
第二步、计算m与k的比值h,以及h与l的比值c。
[0181]
其中,kgb为预设一个分区处理的数据量,l为预设一个核(core)处理分区的个数。
[0182]
在具体实现时,可以根据实际应用情况设置,本技术实施例对此不进行限制。
[0183]
设置规则时,针对一个分区处理的数据量可以设置200mb到400mb之间的数值,如k可以设置为300mb;
[0184]
针对一个core处理分区的个数可以设置2、3等数值。
[0185]
h=m/k,c=h/l。
[0186]
第三步、获取m和c的公约数。
[0187]
m和c的公约数可以组成一个列表。
[0188]
第四步、选择一公约数d作为申请服务器的数据;其中,其中,m/d的值属于设置的内存容量范围,c/d的值属于设置的core数量范围。
[0189]
也就是说确定出能使单服务器负载在预设范围内的服务器数目d。
[0190]
core为spark参数,可以理解为spark任务运行时申请的工作核数。
[0191]
遍历所述列表中的公约数,如一个公约数满足下述条件,则选择所述公约数作为申请服务器的数目。
[0192]
设置的单个服务器占用内存的取值范围为[1,p],core数量的取值范围为[2,x];如p根据单个服务器的内存容量设置,如可以设置为20;x根据单个服务器的core数量确定,如可以设置为10;
[0193]
则如选公约数d,且公约数d对应的m/d,以及c/d满足如下条件:
[0194]
1gb<=m/d<=pgb,2<=c/d<=x;
[0195]
那么选择d作为申请服务器的数目。
[0196]
如果按照上述方式选择出多个满足条件的公约数,则将所有公约数排序,选择出的公约数哪个与所有公约数排序后的中位数最接近,则选择哪个公约数作为申请服务器的数据,如果距离中位数的距离相同,则随机选择一个公约数作为申请服务器的数目。
[0197]
对参数调优过程进一步包括:
[0198]
分析所述json信息获取所述stage的数量;
[0199]
若stage的数量大于预设数量值,则在优化线程调度。
[0200]
具体实现时,可以通过添加speculation参数实现在任务复杂的情况下优化线程调度,这里在stage的数量大于预设数量值时确定当前处于任务复杂情况。
[0201]
对参数调优过程进一步包括:
[0202]
若stages信息中有数据划分字段,则优化数据划分性能。
[0203]
具体实现时,通过添加数据划分(shuffle)service参数实现又换数据划分性能。
[0204]
其中,shuffle为大数据术语,指数据划分、映射、聚合的过程,比如将一堆数据按key值分类聚合,就会触发shuffle行为。
[0205]
在具体实现参数优化时,如果需要修改参数,则可以通过正则替换直接在原参数上替换、修改。
[0206]
步骤304,基于所述stages信息优化写hive表的线程数对所述spark任务进行程序调优。
[0207]
其中,hive是一个数据仓库工具,用来进行数据提取、转化、加载。
[0208]
本步骤中基于所述stages信息优化写hive表的线程数对所述spark任务进行程序调优的方式给出如下两种实现方式,但是不限于如下两种:
[0209]
第一种:
[0210]
第一步、根据数据划分字段将代码划分为多个stage存储到一个stages列表b。
[0211]
具体实现时,从后向前扫描spark代码,当扫描到shuffle语句时,将之前的代码划分到一个stage里,将划分出的多个stage存储到一个stages列表b。
[0212]
本技术实施例中具体实现时,可以将stages信息存储到一个链表中,如链表a,则列表b的长度和链表a的长度理论上是一致的,可以更容易获取对应stage。
[0213]
第二步、通过正则匹配确定stages列表b中有写hive行为的stage,并获取所述stage在所述stages信息中对应的数据输出量o。
[0214]
正则匹配代码中含有”insert into”、”insert overwrite”、”.write(*)”的stage,认定为有写hive行为的stage。
[0215]
第三步、计算hive的线程数t为o与y的比值。
[0216]
其中,所述y为1个线程写的预设值数据,即预设一个线程写ygb数据。
[0217]
具体实现是,y的值可以根基实际需要设置,如设为1,对此不进行限制。
[0218]
第四步、通过正则匹配出所述写hive行为,更新线程数为t。
[0219]
具体实现时通过正则匹配出所述写hive行为所读的dataframe,为所述dataframe添加.repartition(t)操作。
[0220]
到此完成了最优写hive数据线程数目设定。
[0221]
第二种:
[0222]
预先在spark任务的代码的写hive的分区数进行变量标记。
[0223]
具体实现为:预先在spark任务的代码中写hive代码所读的repartition里用optimizationnum[n]进行变量标记,其中optimizationnum[n]为repartition中的变量。
[0224]
所述基于所述stages信息优化写hive表的线程数对所述spark任务进行程序调优,包括:
[0225]
第一步、根据数据划分字段将代码划分为多个stage存储到一个stages列表b。
[0226]
具体实现可以为:从后向前扫描spark代码,当扫描到数据划分(shuffle)语句时,将之前的代码划分到一个stage里,将划分出的多个stage存储到一个stages列表b;
[0227]
本技术实施例中具体实现时,可以将stages信息存储到一个链表中,如链表a,则列表b的长度和链表a的长度理论上是一致的,可以更容易获取对应stage。
[0228]
第二步、若确定stages列表b中的stage里存在变量标记,则确定所述stage中有写hive行为;取所述stage在所述stages信息中对应的数据输出量o。
[0229]
通过正则匹配含有”optimizationnum[n]”的stage,即可认定为有写hive行为的stage。
[0230]
其中optimizationnum[n]是一个变量,[n]是数字,多个写hive行为后可以通过递增n的值来区分,比如:optimizationnum1、optimizationnum2。
[0231]
第三步、计算hive的线程数t为o与y的比值,其中,所述y为1个线程写的预设值数据。
[0232]
其中,所述y为1个线程写的预设值数据,即预设一个线程写yg数据。
[0233]
具体实现是,y的值可以根基实际需要设置,如设为1,对此不进行限制。
[0234]
第四步、使用所述线程数t对标记变量进行正则替换。
[0235]
具体实现时,通过正则替换,将optimizationhum[n]替换为计算出的对应的t值。
[0236]
到此完成了最优写hive数据线程数目设定。
[0237]
步骤305,将调优后的spark任务提交到运行设备上,通过运行结果验证调优效果。
[0238]
步骤306,当验证调优结果达到预设效果时,使用调优后的参数进行资源配置。
[0239]
若调优结果未达到预设效果时,再次进行调优,直到调优结果达到预设效果。
[0240]
本技术实施例中通过调用api获取json信息,分析获得stages信息,基于所述
stages信息通过预估spark任务处理的数据量对所述spark任务进行参数调优,基于所述stages信息优化写hive表的线程数对所述spark任务进行程序调优;还可以验证调优效果,当验证调优结果达到预设效果时,使用调优后的参数进行资源配置,取代人力从spark web ui查看和分析的工作。该方案能够在节省成本的前提下自动进行参数调优,以提高资源配置效率。
[0241]
在参数和程序调优时,可以调优申请服务器的数目、线程调度、shuffle性能等;并且通过正则替换直接修改代码,取代人力分析和代码修改工作。
[0242]
基于同样的发明构思,本技术实施例中还提供一种任务调优装置。参见图4,图4为本技术实施例中应用于上述技术的装置结构示意图。所述装置包括:获取单元401、分析生成单元402、调优单元403和配置单元404;
[0243]
获取单元401,用于在spark任务运行之后,通过执行脚本调用spark api获取所述spark任务对应的json信息;
[0244]
分析生成单元402,用于分析获取单元401获取的json信息获取stage的信息,生成stages信息;
[0245]
调优单元403,用于基于分析生成单元402生成的stages信息通过预估spark任务处理的数据量对所述spark任务进行参数调优;
[0246]
配置单元404,用于使用调优单元403调优后的参数进行资源配置。
[0247]
其中,所述装置进一步包括:存储单元405;
[0248]
存储单元405,用于将分析生成单元402生成的stages信息使用stages链表进行存储;其中,所述链表的每个节点是一个stage对象。
[0249]
其中,
[0250]
调优单元403,具体用于基于所述stages信息通过预估spark任务处理的数据量对所述spark任务进行参数调优时,包括:获取输入数据量最大的stage;并以所述stage的输入数据量以gb为单位向上取整,获得所述spark任务所需内存估值mgb;计算m与k的比值h,以及h与l的比值c;其中,kgb为预设一个分区处理的数据量,l为预设一个核core处理分区的个数;获取m和c的公约数;选择一个公约数d作为申请服务器的数目;其中,m/d的值属于设置的内存容量范围,c/d的值属于设置的core数量范围。
[0251]
其中,
[0252]
调优单元403,进一步用于分析所述json信息获取所述stage的数量;若stage的数量大于预设数量值,则优化线程调度。
[0253]
其中,
[0254]
调优单元403,进一步用于若确定所述stages信息中有数据划分字段,则优化数据划分性能。
[0255]
其中,调优单元403,进一步用于基于所述stages信息优化写hive表的线程数对所述spark任务进行程序调优。
[0256]
其中,
[0257]
调优单元403,具体用于基于所述stages信息优化写hive表的线程数对所述spark任务进行程序调优时,包括:根据数据划分字段将代码划分为多个stage存储到一个stages列表b;通过正则匹配确定stages列表b中有写hive行为的stage,并获取所述stage在所述
stages信息中对应的数据输出量o;计算hive的线程数t为o与y的比值,其中,所述y为1个线程写的预设值数据;通过正则匹配出所述写hive行为,更新线程数为t。
[0258]
配置单元404,用于预先在spark任务的代码的写hive的分区数进行变量标记;
[0259]
调优单元403,具体用于基于所述stages信息优化写hive表的线程数对所述spark任务进行程序调优时,包括:根据数据划分字段将代码划分为多个stage存储到一个stages列表b;若确定stages列表b中的stage里存在变量标记,则确定所述stage中有写hive行为;取所述stage在所述stages信息中对应的数据输出量o;计算hive的线程数t为o与y的比值,其中,所述y为1个线程写的预设值数据;使用所述线程数t对标记变量进行正则替换。
[0260]
其中,所述装置进一步包括:提交单元406;
[0261]
提交单元406,用于将调优单元403将调优后的spark任务提交到运行设备上,通过运行结果验证调优效果。
[0262]
上述实施例的单元可以集成于一体,也可以分离部署;可以合并为一个单元,也可以进一步拆分成多个子单元。
[0263]
在另一个实施例中,还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现所述资源配置方法的步骤。
[0264]
在另一个实施例中,还提供一种计算机可读存储介质,其上存储有计算机指令,所述指令被处理器执行时可实现所述资源配置方法中的步骤。
[0265]
图5为本发明实施例提供的一种电子设备的实体结构示意图。如图5所示,该电子设备可以包括:处理器(processor)510、通信接口(communications interface)520、存储器(memory)530和通信总线540,其中,处理器510,通信接口520,存储器530通过通信总线540完成相互间的通信。处理器510可以调用存储器530中的逻辑指令,以执行如下方法:
[0266]
在spark任务运行之后,通过执行脚本调用spark应用程序接口api获取所述spark任务对应的对象简谱json信息;
[0267]
分析所述json信息生成stages信息;
[0268]
基于所述stages信息通过预估spark任务处理的数据量对所述spark任务进行参数调优;
[0269]
使用调优后的参数进行资源配置。
[0270]
此外,上述的存储器530中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质。
[0271]
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其
中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
[0272]
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
[0273]
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献