CN106557368B - Spark程序优化方法和装置 - Google Patents
Spark程序优化方法和装置 Download PDFInfo
- Publication number
- CN106557368B CN106557368B CN201611024844.5A CN201611024844A CN106557368B CN 106557368 B CN106557368 B CN 106557368B CN 201611024844 A CN201611024844 A CN 201611024844A CN 106557368 B CN106557368 B CN 106557368B
- Authority
- CN
- China
- Prior art keywords
- filtering
- preset condition
- mapping
- operations
- identified
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5083—Techniques for rebalancing the load in a distributed system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q10/00—Administration; Management
- G06Q10/04—Forecasting or optimisation specially adapted for administrative or management purposes, e.g. linear programming or "cutting stock problem"
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Business, Economics & Management (AREA)
- Human Resources & Organizations (AREA)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- Physics & Mathematics (AREA)
- Strategic Management (AREA)
- Economics (AREA)
- Entrepreneurship & Innovation (AREA)
- Game Theory and Decision Science (AREA)
- Development Economics (AREA)
- General Engineering & Computer Science (AREA)
- Marketing (AREA)
- Operations Research (AREA)
- Quality & Reliability (AREA)
- Tourism & Hospitality (AREA)
- General Business, Economics & Management (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
- Stored Programmes (AREA)
Abstract
本公开涉及一种Spark程序优化方法和装置,其能够对用户提交的任务中的操作顺序进行优化。该方法包括:识别Spark任务流程中的过滤操作;在所识别的过滤操作紧邻的上一步操作满足第一预设条件时,将所识别的过滤操作与其紧邻的上一步操作互换位置。
Description
技术领域
本公开实施例涉及计算机领域,具体地,涉及一种Spark程序优化方法和装置。
背景技术
Spark是目前最流行的分布式内存计算框架之一。用户向Spark集群提交任务(job),在一个任务中,用户可以定义一系列操作,由spark集群将该任务转化为一系列阶段进行执行,每个阶段中包含了多个分布式的执行操作。这些操作中包括spark预设的转换(transformation)操作和执行(action)操作。
Spark每个操作的操作对象是弹性分布式数据集(resilient distributeddataset,RDD),该RDD指的是内存中的只读的、可分区的分布式数据集。RDD数据集由多个分区(partition)组成,RDD数据集的转换操作(transformation)和执行操作(action)会并行地在各个分区上进行。其中transformation操作一般用于将一种形式的RDD数据集转换成另一种形式的RDD数据集,action操作一般是用于得到一个值,或者产生一个副作用(例如将RDD数据集保存到硬盘上)。
默认情况下,Spark的执行流程是严格按照用户提交的任务中的操作顺序来进行的。然而,由于工程需要或者用户编程水平等原因,用户提交的任务中的操作顺序往往不是最优的。
发明内容
本公开实施例的目的是提供一种Spark程序优化方法和装置,其能够对用户提交的任务中的操作顺序进行优化。
为了实现上述目的,本公开实施例提供一种Spark程序优化方法,该方法包括:
识别Spark任务流程中的过滤操作;
在所识别的过滤操作紧邻的上一步操作满足第一预设条件时,将所识别的过滤操作与其紧邻的上一步操作互换位置。
可选地,所述第一预设条件包括:所述过滤操作紧邻的上一步操作不会引起弹性分布式数据集中的元素的类型发生改变。
可选地,该方法还包括:
识别执行了互换位置处理后的Spark任务流程中的映射操作;
从所识别的映射操作中的最后一步映射操作开始,将满足第二预设条件的映射操作合并以产生新的映射操作,直到没有满足所述第二预设条件的映射操作为止,其中所述第二预设条件包括两个映射操作相邻。
可选地,该方法还包括:
识别执行了互换位置处理后的Spark任务流程中的过滤操作;
从所识别的过滤操作中的最后一步过滤操作开始,将满足第三预设条件的过滤操作合并以产生新的过滤操作,直到没有满足所述第三预设条件的过滤操作为止,其中,所述第三预设条件包括两个过滤操作相邻。
可选地,该方法还包括:
识别执行了互换位置处理后的Spark任务流程中的映射操作和过滤操作;
将满足第四预设条件的所识别的映射操作和过滤操作合并以产生用于将弹性分布式数据集中的每一个元素变化为一个集合的操作,其中,所述第四预设条件包括映射操作紧邻的下一步操作为过滤操作。
本公开实施例还提供一种Spark程序优化装置,该装置包括:
识别模块,用于识别Spark任务流程中的过滤操作;
位置互换模块,在所识别的过滤操作紧邻的上一步操作满足第一预设条件时,将所识别的过滤操作与其紧邻的上一步操作互换位置。
可选地,所述第一预设条件包括:所述过滤操作紧邻的上一步操作不会引起弹性分布式数据集中的元素的类型发生改变。
可选地,所述识别模块,还用于识别执行了互换位置处理后的Spark任务流程中的映射操作;该装置还包括:
第一合并模块,用于从所识别的映射操作中的最后一步映射操作开始,将满足第二预设条件的映射操作合并以产生新的映射操作,直到没有满足所述第二预设条件的映射操作为止,其中,所述第二预设条件包括两个映射操作相邻。
可选地,所述识别模块还用于识别执行了互换位置处理后的Spark任务流程中的过滤操作;该装置还包括:
第二合并模块,用于从所识别的过滤操作中的最后一步过滤操作开始,将满足第三预设条件的过滤操作合并以产生新的过滤操作,直到没有满足所述第三预设条件的过滤操作为止,其中,所述第三预设条件包括两个过滤操作相邻。
可选地,所述识别模块还用于识别执行了互换位置处理后的Spark任务流程中的映射操作和过滤操作;该装置还包括:
第三合并模块,用于将满足第四预设条件的所识别的映射操作和过滤操作合并以产生用于将弹性分布式数据集中的每一个元素变化为一个集合的操作,其中,所述第四预设条件包括映射操作紧邻的下一步操作为过滤操作。
通过上述技术方案,由于在过滤操作紧邻的上一步操作满足第一预设条件时将该过滤操作与其紧邻的上一步操作互换位置,也即使得过滤操作提前了,因此能够减小Spark任务流程中位于过滤操作后的操作的数据量,因此能够使得Spark任务流程最优化。
本公开实施例的其他特征和优点将在随后的具体实施方式部分予以详细说明。
附图说明
附图是用来提供对本公开实施例的进一步理解,并且构成说明书的一部分,与下面的具体实施方式一起用于解释本公开实施例,但并不构成对本公开实施例的限制。在附图中:
图1是根据本公开一种实施例的Spark程序优化方法的流程图;
图2是根据本公开另一实施例的Spark程序优化方法的流程图;
图3是根据本公开一种实施例的Spark程序装置的示意框图;
图4是根据本公开另一实施例的Spark程序装置的示意框图。
具体实施方式
以下结合附图对本公开实施例的具体实施方式进行详细说明。应当理解的是,此处所描述的具体实施方式仅用于说明和解释本公开实施例,并不用于限制本公开实施例。
在详细描述根据本公开实施例的Spark程序优化方法和装置之前,首先简单介绍一下本公开实施例中提及的Spark程序中的相关操作的含义,具体如下:
过滤操作(filter),用于对RDD数据集中的每一个元素进行过滤;
映射操作(map),用于将RDD数据集中的每一个元素变化为另一个元素;
flatMap操作,用于将RDD数据集中的每一个元素变化为一个集合;
mapPartitions操作,用于将RDD数据集中的每一个分区变化为一个集合;
union操作,用于取得两个RDD数据集的并集;
intersection操作,用于取得两个RDD数据集的交集;
distinct操作,用于取得一个RDD数据集中不重复的元素的集合;
sortByKey操作,用于将RDD数据集中的元素排序;
coalesce操作,用于减少RDD时间的分区;
repartition操作,用于使用重新排序的方式来增加或者减少RDD时间的分区;
sample操作,用于对RDD数据集进行随机抽样。
以上描述的操作均属于Spark程序中的transformation功能。
接下来详细描述根据本公开实施例的Spark程序优化方法,如图1所示,该方法可以包括以下步骤S101和S102:
在步骤S101中,识别Spark任务流程中的过滤操作;
在步骤S102中,在所识别的过滤操作紧邻的上一步操作满足第一预设条件时,将所识别的过滤操作与其紧邻的上一步操作互换位置。
通过步骤S101和S102,由于在过滤操作紧邻的上一步操作满足第一预设条件时将该过滤操作与其紧邻的上一步操作互换位置,也即使得过滤操作提前了,因此能够减小Spark任务流程中位于过滤操作后的操作的数据量,因此能够使得Spark任务流程最优化。
在一种可能的实施方式中,在步骤S102中,所述第一预设条件可以包括:所识别的过滤操作紧邻的上一步操作不会引起RDD数据集中的元素的类型发生改变。例如,可以与所识别的过滤操作互换位置的操作可以包括:union操作、intersection操作、distinct操作、sortByKey操作、coalesce操作、repartition操作等等。
另外,在步骤S102中,在所识别的过滤操作与其紧邻的满足第一预设条件的上一步操作(例如,union操作)互换位置之后,若此时该过滤操作紧邻的上一步操作(例如,intersection操作)仍然满足第一预设条件,则继续将该过滤操作与其紧邻的上一步操作(例如,intersection操作)互换位置,直到该过滤操作紧邻的上一步操作不满足第一预设条件为止。
在一种可能的实施方式中,如图2所示,该方法还可以包括以下步骤S201a和S201b:
在步骤S201a中,识别执行了互换位置处理后的Spark任务流程中的映射操作;
在步骤S201b中,从所识别的映射操作中的最后一步映射操作开始,将满足第二预设条件的映射操作合并以产生新的映射操作,直到没有满足所述第二预设条件的映射操作为止。通过将满足第二预设条件的映射操作合并,能够减小后续操作调用方法的次数,因此能够进一步对执行了互换位置处理后的Spark任务流程进行优化。
其中,所述第二预设条件可以包括:两个映射操作相邻。
在执行步骤S201b时,可以从所识别的映射操作中的最后一个map操作开始,将每个map操作和前一步相邻的map操作进行合并,产生新的map操作,产生后的map操作向前递归合并,直到map操作相邻的上一步操作不是map操作为止。
其中,相邻map操作合并产生的新的map操作的参数为合并之前前一步map操作的参数,该新map操作的返回值类型为合并之前后一步map操作的返回值类型,将合并之前前一步map操作的代码复制到新map操作中并将合并之前前一步map操作的返回值作为一个变量genA,将合并之前后一步map操作的代码追加到后面,用genA代替合并之前后一步map操作中的参数。
例如,合并之前的map操作为:
合并后产生的新的map操作为:
在一种可能的实施方式中,如图2所示,该方法还可以包括以下步骤S202a和S202b:
在步骤S202a中,识别执行了互换位置处理后的Spark任务流程中的过滤操作;
在步骤S202b中,从所识别的过滤操作中的最后一步过滤操作开始,将满足第三预设条件的过滤操作合并以产生新的过滤操作,直到没有满足所述第三预设条件的过滤操作为止。通过将满足第三预设条件的过滤操作合并,能够减小后续操作调用方法的次数,因此能够进一步对执行了互换位置处理后的Spark任务流程进行优化。
其中,所述第三预设条件可以包括:两个过滤操作相邻。
在执行步骤S202b时,可以从所识别的过滤操作中的最后一步filter操作开始,将每个filter操作和上一步相邻的filter操作进行合并,产生新的filter操作,产生后的filter操作向前递归合并,直到filter操作相邻的上一步操作不是filter操作为止。
其中,相邻filter操作进行合并以产生新的filter操作,该新的filter操作用括号包围合并之前前一步filter操作的函数体和合并之前后一步filter操作的函数体,用&&连接两个括号。
例如,合并之前的filter操作为:
合并后产生的新的filter操作为:
filter(x=>{
(x>4)&&(x.toString.length>0)
})
在一种可能的实施方式中,如图2所示,该方法还可以包括步骤S203a和S203b:
在步骤S203a中,识别执行了互换位置处理后的Spark任务流程中的映射操作和过滤操作;
在步骤S203b中,将满足第四预设条件的所识别的映射操作和过滤操作合并以产生用于将弹性分布式数据集中的每一个元素变化为一个集合的操作。通过将满足第四预设条件的映射操作和过滤操作合并,能够减小后续操作调用方法的次数,因此能够进一步对执行了互换位置处理后的Spark任务流程进行优化。
其中,所述第四预设条件可以包括:映射操作后紧邻过滤操作。
在执行步骤S203b时,可以将所识别的map操作及紧邻的下一步filter操作合并为一个flatMap操作。
其中,合并操作所产生的新的flatMap操作可以用合并之前的map操作得到变量genA,利用变量genA和合并之前的filter操作得到布尔型变量genB,如果genB为真,则flatMap操作返回仅包含genA的集合,如果genB为假,则flatMap操作返回空集合。
例如,合并之前map操作与其下一步紧邻的filter操作为:
map操作和filter操作合并后产生的flatMap操作为:
本公开实施例还提供一种Spark程序优化装置,如图3所示,该装置可以包括:
识别模块302,用于识别Spark任务流程中的过滤操作;
位置互换模块301,用于在所识别的过滤操作紧邻的上一步操作满足第一预设条件时,将所识别的过滤操作与其紧邻的上一步操作互换位置。
通过该技术方案,由于在过滤操作紧邻的上一步操作满足第一预设条件时将该过滤操作与其紧邻的上一步操作互换位置,也即使得过滤操作提前了,因此能够减小Spark任务流程中位于过滤操作后的操作的数据量,因此能够使得Spark任务流程最优化。
在一种可能的实施方式中,所述第一预设条件可以包括:所述过滤操作紧邻的上一步操作不会引起弹性分布式数据集中的元素的类型发生改变。
在一种可能的实施方式中,所述识别模块302,还可以用于识别执行了互换位置处理后的Spark任务流程中的映射操作。此时,如图4所示,该装置还可以包括:
第一合并模块401,用于从所识别的映射操作中的最后一步映射操作开始,将满足第二预设条件的映射操作合并以产生新的映射操作,直到没有满足所述第二预设条件的映射操作为止。
其中,所述第二预设条件可以包括:两个映射操作相邻。
在一种可能的实施方式中,所述识别模块302还可以用于识别执行了互换位置处理后的Spark任务流程中的过滤操作。在这种情况下,如图4所示,该装置还可以包括:
第二合并模块402,用于从所识别的过滤操作中的最后一步过滤操作开始,将满足第三预设条件的过滤操作合并以产生新的过滤操作,直到没有满足所述第三预设条件的过滤操作为止。
其中,所述第三预设条件可以包括:两个过滤操作相邻。
在一种可能的实施方式中,所述识别模块302还可以用于识别执行了互换位置处理后的Spark任务流程中的映射操作和过滤操作。在这种情况下,如图4所示,该装置还可以包括:
第三合并模块403,用于将满足第四预设条件的所识别的映射操作和过滤操作合并以产生用于将弹性分布式数据集中的每一个元素变化为一个集合的操作。
其中,所述第四预设条件可以包括:映射操作紧邻的下一步操作为过滤操作。
根据本公开实施例的Spark程序优化装置中各个模块的具体操作的详细实施方式已经在根据本公开实施例的Spark程序优化方法中进行了详细描述,此处不再赘述。
以上结合附图详细描述了本公开实施例的优选实施方式,但是,本公开实施例并不限于上述实施方式中的具体细节,在本公开实施例的技术构思范围内,可以对本公开实施例的技术方案进行多种简单变型,这些简单变型均属于本公开实施例的保护范围。
另外需要说明的是,在上述具体实施方式中所描述的各个具体技术特征,在不矛盾的情况下,可以通过任何合适的方式进行组合。为了避免不必要的重复,本公开实施例对各种可能的组合方式不再另行说明。
此外,本公开实施例的各种不同的实施方式之间也可以进行任意组合,只要其不违背本公开实施例的思想,其同样应当视为本公开实施例所公开的内容。
Claims (8)
1.一种Spark程序优化方法,其特征在于,该方法包括:
识别用户提交的Spark任务流程中的过滤操作;
在所识别的过滤操作紧邻的上一步操作满足第一预设条件时,将所识别的过滤操作与其紧邻的上一步操作互换位置;
其中,所述第一预设条件包括:所述过滤操作紧邻的上一步操作不会引起弹性分布式数据集中的元素的类型发生改变。
2.根据权利要求1所述的方法,其特征在于,该方法还包括:
识别执行了互换位置处理后的Spark任务流程中的映射操作;
从所识别的映射操作中的最后一步映射操作开始,将满足第二预设条件的映射操作合并以产生新的映射操作,直到没有满足所述第二预设条件的映射操作为止,其中所述第二预设条件包括两个映射操作相邻。
3.根据权利要求1所述的方法,其特征在于,该方法还包括:
识别执行了互换位置处理后的Spark任务流程中的过滤操作;
从所识别的过滤操作中的最后一步过滤操作开始,将满足第三预设条件的过滤操作合并以产生新的过滤操作,直到没有满足所述第三预设条件的过滤操作为止,其中,所述第三预设条件包括两个过滤操作相邻。
4.根据权利要求1所述的方法,其特征在于,该方法还包括:
识别执行了互换位置处理后的Spark任务流程中的映射操作和过滤操作;
将满足第四预设条件的所识别的映射操作和过滤操作合并以产生用于将弹性分布式数据集中的每一个元素变化为一个集合的操作,其中,所述第四预设条件包括映射操作紧邻的下一步操作为过滤操作。
5.一种Spark程序优化装置,其特征在于,该装置包括:
识别模块,用于识别用户提交的Spark任务流程中的过滤操作;
位置互换模块,用于在所识别的过滤操作紧邻的上一步操作满足第一预设条件时,将所识别的过滤操作与其紧邻的上一步操作互换位置;
其中,所述第一预设条件包括:所述过滤操作紧邻的上一步操作不会引起弹性分布式数据集中的元素的类型发生改变。
6.根据权利要求5所述的装置,其特征在于,所述识别模块,还用于识别执行了互换位置处理后的Spark任务流程中的映射操作;该装置还包括:
第一合并模块,用于从所识别的映射操作中的最后一步映射操作开始,将满足第二预设条件的映射操作合并以产生新的映射操作,直到没有满足所述第二预设条件的映射操作为止,其中,所述第二预设条件包括两个映射操作相邻。
7.根据权利要求5所述的装置,其特征在于,所述识别模块还用于识别执行了互换位置处理后的Spark任务流程中的过滤操作;该装置还包括:
第二合并模块,用于从所识别的过滤操作中的最后一步过滤操作开始,将满足第三预设条件的过滤操作合并以产生新的过滤操作,直到没有满足所述第三预设条件的过滤操作为止,其中,所述第三预设条件包括两个过滤操作相邻。
8.根据权利要求5所述的装置,其特征在于,所述识别模块还用于识别执行了互换位置处理后的Spark任务流程中的映射操作和过滤操作;该装置还包括:
第三合并模块,用于将满足第四预设条件的所识别的映射操作和过滤操作合并以产生用于将弹性分布式数据集中的每一个元素变化为一个集合的操作,其中,所述第四预设条件包括映射操作紧邻的下一步操作为过滤操作。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611024844.5A CN106557368B (zh) | 2016-11-21 | 2016-11-21 | Spark程序优化方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611024844.5A CN106557368B (zh) | 2016-11-21 | 2016-11-21 | Spark程序优化方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106557368A CN106557368A (zh) | 2017-04-05 |
CN106557368B true CN106557368B (zh) | 2020-04-03 |
Family
ID=58443439
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201611024844.5A Active CN106557368B (zh) | 2016-11-21 | 2016-11-21 | Spark程序优化方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106557368B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112527385B (zh) * | 2021-02-18 | 2021-11-30 | 成都新希望金融信息有限公司 | 数据加工方法、装置、工作节点及存储介质 |
-
2016
- 2016-11-21 CN CN201611024844.5A patent/CN106557368B/zh active Active
Non-Patent Citations (2)
Title |
---|
Spark Shuffle的内存调度算法分析及优化;陈英芝;《万方数据库》;20160809;第19-45页 * |
spark性能优化指南;HarkLee;《博客园, https://www.cnblogs.com/hark0623/p/5533803.html》;20160518;第1-9页 * |
Also Published As
Publication number | Publication date |
---|---|
CN106557368A (zh) | 2017-04-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3698313B1 (en) | Image preprocessing for generalized image processing | |
US11816559B2 (en) | Dilated convolution using systolic array | |
Diethelm | An efficient parallel algorithm for the numerical solution of fractional differential equations | |
EP3326060B1 (en) | Mixed-width simd operations having even-element and odd-element operations using register pair for wide data elements | |
US8941674B2 (en) | System and method for efficient resource management of a signal flow programmed digital signal processor code | |
CN102968491A (zh) | 一种数据分配方法和装置 | |
US20190087160A1 (en) | System and method for creating domain specific language | |
CN101339545B (zh) | 一种寄存器配置方法和装置 | |
CN106557368B (zh) | Spark程序优化方法和装置 | |
US20200012250A1 (en) | Program editing device, program editing method, and computer readable medium | |
US8930929B2 (en) | Reconfigurable processor and method for processing a nested loop | |
CN111258950A (zh) | 原子访存方法、存储介质、计算机设备、装置和系统 | |
CN113190576A (zh) | 数据处理方法、装置、计算机设备和可读存储介质 | |
CN110399026B (zh) | 基于fpga的多源单输出复位方法、装置及相关设备 | |
CN110050259A (zh) | 矢量处理器及其控制方法 | |
JP4870956B2 (ja) | 組み込み用プログラム生成方法、組み込み用プログラム開発システム、及び情報テーブル部 | |
CN111831328A (zh) | 数据处理的方法及装置 | |
US10310823B2 (en) | Program development support system and program development support software | |
CN113204706B (zh) | 基于MapReduce的数据筛选抽取方法及系统 | |
CN110825461A (zh) | 数据处理方法和装置 | |
CN110955696B (zh) | 数据读取方法、装置、设备和存储介质 | |
JPWO2021100122A1 (ja) | 設計支援システムおよび設計支援プログラム | |
CN117592437A (zh) | 数据处理方法、装置及计算机可读存储介质 | |
CN107368835B (zh) | 一种获取像素点的积分和的方法及装置 | |
JP2010146181A (ja) | 実行ファイル作成装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |