CN113867953A - 一种资源分配方法、装置、存储介质和电子设备 - Google Patents
一种资源分配方法、装置、存储介质和电子设备 Download PDFInfo
- Publication number
- CN113867953A CN113867953A CN202111134494.9A CN202111134494A CN113867953A CN 113867953 A CN113867953 A CN 113867953A CN 202111134494 A CN202111134494 A CN 202111134494A CN 113867953 A CN113867953 A CN 113867953A
- Authority
- CN
- China
- Prior art keywords
- query statement
- structured query
- memory size
- determining
- cpu cores
- 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.)
- Pending
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/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/242—Query formulation
- G06F16/2433—Query languages
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请提供一种资源分配方法、装置、存储介质和电子设备,属于大数据技术领域。该方法可以获取结构化查询语句,对结构化查询语句进行解析,确定结构化查询语句中的表名和操作算子,根据表名,确定表名相对应的数据库表所包含的数据量,并根据数据量,确定执行结构化查询语句对应的内存大小,以及根据操作算子对应的算子个数,确定执行结构化查询语句对应的中央处理器CPU核心个数,再根据内存大小和CPU核心个数,确定执行结构化查询语句对应的进程个数,最后基于内存大小、CPU核心个数和进程个数,对结构化查询语句进行资源分配。从而可以自动地对结构化查询语句进行资源分配,以及提高对结构化查询语句进行资源分配的效率。
Description
技术领域
本申请实施例涉及大数据技术领域,尤其涉及一种资源分配方法、装置、存储介质和电子设备。
背景技术
随着大数据时代的到来,海量数据的增长对存储管理和计算分析提出了新的需求,推动着大数据技术的发展。主流的计算框架也由基于MapReduce的Hadoop发展为基于内存计算的Spark。Spark作为一个复杂的通用型分布式计算框架,提供了大量可配置的参数以适应不同应用场景下使用Spark的各种需求,并最大化Spark的计算性能。
通常,可以在数据查询平台中写入大量的结构化查询语句Sql进行数据查询,每条Sql在提交时都被当做一个Spark任务作业来处理,并且,每个Spark任务作业会启动一个对应的Dirver进程,Dirver进程会根据分配好的参数向集群资源管理器Yarn申请作业运行所需要的计算资源。
在对参数进行分配时,目标对象一般会手动给每一个Spark任务添加参数,由于大多数的目标对象并不了解参数的配比,因此,通常会分配出不合理的参数配比,而不合理的参数配比就会影响执行效率,或者会挤占他人资源,导致其他对象的任务无法正常运行等。同时,通过手动方式添加参数也会导致对参数进行分配的效率较低。
发明内容
为解决现有存在的技术问题,本申请实施例提供了一种资源分配方法、装置、存储介质和电子设备,可以给结构化查询语句分配合理的资源参数,以及提高对资源参数进行分配的效率。
为达到上述目的,本申请实施例的技术方案是这样实现的:
第一方面,本申请实施例提供一种资源分配方法,所述方法包括:
获取结构化查询语句;
对所述结构化查询语句进行解析,确定所述结构化查询语句中的表名和操作算子;
根据所述表名,确定所述表名相对应的数据库表所包含的数据量,并根据所述数据量,确定执行所述结构化查询语句对应的内存大小;
根据所述操作算子对应的算子个数,确定执行所述结构化查询语句对应的中央处理器CPU核心个数;
根据所述内存大小和所述CPU核心个数,确定执行所述结构化查询语句对应的进程个数;
基于所述内存大小、所述CPU核心个数和所述进程个数,对所述结构化查询语句进行资源分配。
本申请实施例提供的资源分配方法,可以获取结构化查询语句,对结构化查询语句进行解析,确定结构化查询语句中的表名和操作算子,根据表名,确定表名相对应的数据库表所包含的数据量,并根据数据量,确定执行结构化查询语句对应的内存大小,以及根据操作算子对应的算子个数,确定执行结构化查询语句对应的中央处理器CPU核心个数,再根据内存大小和CPU核心个数,确定执行结构化查询语句对应的进程个数,最后基于内存大小、CPU核心个数和进程个数,对结构化查询语句进行资源分配。由于可以确定出结构化查询语句中的表名和操作算子,并根据表名和操作算子,确定出结构化查询语句对应的资源参数,以根据该资源参数对结构化查询语句进行资源分配,从而可以自动地对结构化查询语句进行资源分配,以及提高对结构化查询语句进行资源分配的效率。
在一种可选的实施例中,所述对所述结构化查询语句进行解析,确定所述结构化查询语句中的表名和操作算子,包括:
对所述结构化查询语句中的语法进行解析,得到所述结构化查询语句中的各个关键词;
根据所述各个关键词,分别确定所述结构化查询语句中的表名和操作算子。
在该实施例中,可以对结构化查询语句中的语法进行解析,得到结构化查询语句中的各个关键词,并根据各个关键词,分别确定结构化查询语句中的表名和操作算子。由于在获取到结构化查询语句后,可以对结构化查询语句中的语法进行解析,以根据语法中的关键词来确定出结构化查询语句所包含的表名和操作算子,从而可以更加准确地确定出结构化查询语句中的各个表名和各个操作算子。
在一种可选的实施例中,所述根据所述表名,确定所述表名相对应的数据库表所包含的数据量,包括:
根据所述表名,在元数据库中查询所述表名相对应的数据库表所包含的数据量;所述元数据库中保存有各种数据库表所包含的数据量信息;或者,
若确定所述结构化查询语句中包括多个表名,则根据所述多个表名,在所述元数据库中查询所述多个表名分别相对应的各个数据库表所包含的数据量;对所述各个数据库表所包含的数据量进行加和,得到所述多个表名对应的总数据量。
在该实施例中,根据表名,在元数据库中查询表名相对应的数据库表所包含的数据量。或者,若确定结构化查询语句中包括多个表名,则根据多个表名,在元数据库中查询多个表名分别相对应的各个数据库表所包含的数据量,以及对各个数据库表所包含的数据量进行加和,得到多个表名对应的总数据量。由于元数据库中保存有各种数据库表所包含的数据量信息,从而在确定出结构化查询语句中表名后,可以到元数据库中查询得到相应的数据库表所包含的数据量,提高了对数据量进行确定的效率。
在一种可选的实施例中,所述根据所述数据量,确定执行所述结构化查询语句对应的内存大小,包括:
根据内存大小与数据量之间的第一对应关系,确定与所述数据量相对应的执行所述结构化查询语句对应的内存大小;
所述根据所述操作算子对应的算子个数,确定执行所述结构化查询语句对应的中央处理器CPU核心个数,包括:
根据中央处理器CPU核心个数与算子个数之间的第二对应关系,确定与所述操作算子对应的算子个数相对应的执行所述结构化查询语句对应的CPU核心个数;
所述根据所述内存大小和所述CPU核心个数,确定执行所述结构化查询语句对应的进程个数,包括:
根据内存大小和CPU核心个数与进程个数之间的第三对应关系,确定与所述内存大小和所述CPU核心个数相对应的执行所述结构化查询语句对应的进程个数。
在该实施例中,可以根据内存大小与数据量之间的第一对应关系,确定与数据量相对应的执行结构化查询语句对应的内存大小,可以根据中央处理器CPU核心个数与算子个数之间的第二对应关系,确定与操作算子对应的算子个数相对应的执行结构化查询语句对应的CPU核心个数,最后根据内存大小和CPU核心个数与进程个数之间的第三对应关系,确定与内存大小和CPU核心个数相对应的执行结构化查询语句对应的进程个数。由于内存大小与数据量之间、CPU核心个数与算子个数之间、内存大小和CPU核心个数与进程个数之间都存在相应的对应关系,从而可以在确定出结构化查询语句对应的数据量和算子个数后,可以相应的确定出执行结构化查询语句对应的内存大小、CPU核心个数和进程个数,从而可以提高对结构化查询语句进行资源分配的效率和合理性。
在一种可选的实施例中,所述基于所述内存大小、所述CPU核心个数和所述进程个数,对所述结构化查询语句进行资源分配,包括:
基于所述内存大小、所述CPU核心个数和所述进程个数,确定执行所述结构化查询语句对应的总内存大小和总CPU核心个数;
将所述总内存大小和总CPU核心个数分配给所述结构化查询语句。
在该实施例中,可以基于内存大小、CPU核心个数和进程个数,确定执行结构化查询语句对应的总内存大小和总CPU核心个数,并将总内存大小和总CPU核心个数分配给结构化查询语句。从而可以合理地确定出分配给结构化查询语句的资源参数。
在一种可选的实施例中,所述基于所述内存大小、所述CPU核心个数和所述进程个数,确定执行所述结构化查询语句对应的总内存大小和总CPU核心个数,包括:
基于所述内存大小和所述进程个数的乘积,确定执行所述结构化查询语句对应的总内存大小;
基于所述CPU核心个数和所述进程个数的乘积,确定执行所述结构化查询语句对应的总CPU核心个数。
在该实施例中,基于内存大小和进程个数的乘积,可以确定出执行结构化查询语句对应的总内存大小,基于CPU核心个数和进程个数的乘积,可以确定出执行结构化查询语句对应的总CPU核心个数。从而可以准确地确定出执行结构化查询语句对应的总内存大小和总CPU核心个数。
在一种可选的实施例中,所述对所述结构化查询语句进行资源分配之后,所述方法还包括:
将所述结构化查询语句与所述内存大小、所述CPU核心个数和所述进程个数提交给数据查询平台,以使所述数据查询平台根据所述内存大小、所述CPU核心个数和所述进程个数,对所述结构化查询语句进行数据查询。
在该实施例中,可以将结构化查询语句与内存大小、CPU核心个数和进程个数提交给数据查询平台,以使数据查询平台根据内存大小、CPU核心个数和进程个数,对结构化查询语句进行数据查询。从而在分配给结构化查询语句合理的资源参数后,数据查询平台可以根据该资源参数快速地对结构化查询语句进行数据查询,提高了对结构化查询语句进行数据查询的效率。
第二方面,本申请实施例还提供了一种资源分配装置,包括:
查询语句获取单元,用于获取结构化查询语句;
查询语句解析单元,用于对所述结构化查询语句进行解析,确定所述结构化查询语句中的表名和操作算子;
内存大小确定单元,用于根据所述表名,确定所述表名相对应的数据库表所包含的数据量,并根据所述数据量,确定执行所述结构化查询语句对应的内存大小;
核心个数确定单元,用于根据所述操作算子对应的算子个数,确定执行所述结构化查询语句对应的中央处理器CPU核心个数;
进程个数确定单元,用于根据所述内存大小和所述CPU核心个数,确定执行所述结构化查询语句对应的进程个数;
资源分配单元,用于基于所述内存大小、所述CPU核心个数和所述进程个数,对所述结构化查询语句进行资源分配。
在一种可选的实施例中,所述查询语句解析单元,具体用于:
对所述结构化查询语句中的语法进行解析,得到所述结构化查询语句中的各个关键词;
根据所述各个关键词,分别确定所述结构化查询语句中的表名和操作算子。
在一种可选的实施例中,所述内存大小确定单元,具体用于:
根据所述表名,在元数据库中查询所述表名相对应的数据库表所包含的数据量;所述元数据库中保存有各种数据库表所包含的数据量信息;或者,
若确定所述结构化查询语句中包括多个表名,则根据所述多个表名,在所述元数据库中查询所述多个表名分别相对应的各个数据库表所包含的数据量;对所述各个数据库表所包含的数据量进行加和,得到所述多个表名对应的总数据量。
在一种可选的实施例中,所述内存大小确定单元,还用于:
根据内存大小与数据量之间的第一对应关系,确定与所述数据量相对应的执行所述结构化查询语句对应的内存大小;
所述核心个数确定单元,具体用于:
根据中央处理器CPU核心个数与算子个数之间的第二对应关系,确定与所述操作算子对应的算子个数相对应的执行所述结构化查询语句对应的CPU核心个数;
所述进程个数确定单元,具体用于:
根据内存大小和CPU核心个数与进程个数之间的第三对应关系,确定与所述内存大小和所述CPU核心个数相对应的执行所述结构化查询语句对应的进程个数。
在一种可选的实施例中,所述资源分配单元,具体用于:
基于所述内存大小、所述CPU核心个数和所述进程个数,确定执行所述结构化查询语句对应的总内存大小和总CPU核心个数;
将所述总内存大小和总CPU核心个数分配给所述结构化查询语句。
在一种可选的实施例中,所述资源分配单元,还用于:
基于所述内存大小和所述进程个数的乘积,确定执行所述结构化查询语句对应的总内存大小;
基于所述CPU核心个数和所述进程个数的乘积,确定执行所述结构化查询语句对应的总CPU核心个数。
在一种可选的实施例中,所述装置还包括查询语句提交单元,用于:
将所述结构化查询语句与所述内存大小、所述CPU核心个数和所述进程个数提交给数据查询平台,以使所述数据查询平台根据所述内存大小、所述CPU核心个数和所述进程个数,对所述结构化查询语句进行数据查询。
第三方面,本申请实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时,实现第一方面的资源分配方法。
第四方面,本申请实施例还提供了一种电子设备,包括存储器和处理器,所述存储器上存储有可在所述处理器上运行的计算机程序,当所述计算机程序被所述处理器执行时,使得所述处理器实现第一方面的资源分配方法。
第二方面至第四方面中任意一种实现方式所带来的技术效果可参见第一方面中对应的实现方式所带来的技术效果,此处不再赘述。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的一种资源分配方法的流程图;
图2为本申请实施例提供的另一种资源分配方法的流程图;
图3为本申请实施例提供的一种资源分配装置的结构示意图;
图4为本申请实施例提供的另一种资源分配装置的结构示意图;
图5为本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
为了使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请作进一步地详细描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。
需要说明的是,本申请的文件中涉及的术语“包括”和“具有”以及它们的变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
随着大数据时代的到来,海量数据的增长对存储管理和计算分析提出了新的需求,推动着大数据技术的发展。主流的计算框架也由基于MapReduce的Hadoop发展为基于内存计算的Spark。Spark作为一个复杂的通用型分布式计算框架,提供了大量可配置的参数以适应不同应用场景下使用Spark的各种需求,并最大化Spark的计算性能。
在数仓开发场景中,用户需要写大量的Sql进行数据查询,每条Sql在提交时都被当做一个Spark任务作业来处理,这个作业会启动一个对应的Dirver进程,Dirver进程会根据用户配置的参数向集群资源管理器Yarn申请作业运行所需要的计算资源,如果用户不配置资源参数那么Yarn则会分配一组默认的最小资源,如果是这样则既不能体现出Spark优势,也没能充分的利用集群资源。此时就需要用户给每一个任务手动添加参数,而大部分用户并不十分了解Spark计算参数的配比,要用多少CPU核数?多少内存?分配多少个进程合适?配少了会影响执行效率,配多了可能会挤占他人资源,导致其他人的任务无法正常运行,因此,分配出合理的参数配比便显得尤为重要了。同时,通过手动方式添加参数也会导致对参数进行分配的效率较低。
为了给结构化查询语句分配合理的资源参数,以及提高对资源参数进行分配的效率,本申请实施例提供了一种资源分配方法,该方法可以获取结构化查询语句,对结构化查询语句进行解析,确定结构化查询语句中的表名和操作算子,根据表名,确定表名相对应的数据库表所包含的数据量,并根据数据量,确定执行结构化查询语句对应的内存大小,以及根据操作算子对应的算子个数,确定执行结构化查询语句对应的中央处理器CPU核心个数,再根据内存大小和CPU核心个数,确定执行结构化查询语句对应的进程个数,最后基于内存大小、CPU核心个数和进程个数,对结构化查询语句进行资源分配。
下面将结合附图,对本申请实施例提供的技术方案进行详细说明。
本申请实施例提供了一种资源分配方法,如图1所示,包括如下步骤:
步骤S101,获取结构化查询语句。
在步骤S101中,可以获取用户提交的结构化查询语句。并且,用户提交的结构化查询语句可以为多个。
步骤S102,对结构化查询语句进行解析,确定结构化查询语句中的表名和操作算子。
在获取到用户提交的多个结构化查询语句后,对于每个结构化查询语句,可以采用解析器对结构化查询语句中的语法进行解析,得到结构化查询语句中的各个关键词,并根据各个关键词,分别确定出结构化查询语句中的表名和操作算子。
步骤S103,根据表名,确定表名相对应的数据库表所包含的数据量,并根据数据量,确定执行结构化查询语句对应的内存大小。
由于元数据库中保存有各种数据库表所包含的数据量信息,则在确定出结构化查询语句中的表名后,可以根据表名,在元数据库中查询表名相对应的数据库表所包含的数据量。
如果确定结构化查询语句中包括有多个表名,则可以先根据多个表名,在元数据库中查询多个表名分别相对应的各个数据库表所包含的数据量,然后对各个数据库表所包含的数据量进行加和,得到多个表名对应的总数据量。
在确定出结构化查询语句中的表名相对应的数据库表所包含的数据量后,可以根据内存大小与数据量之间的第一对应关系,确定出与数据量相对应的执行结构化查询语句对应的内存大小。
步骤S104,根据操作算子对应的算子个数,确定执行结构化查询语句对应的中央处理器CPU核心个数。
在确定出结构化查询语句中的操作算子后,可以得到操作算子对应的算子个数,并根据中央处理器CPU核心个数与算子个数之间的第二对应关系,确定出与操作算子对应的算子个数相对应的执行结构化查询语句对应的CPU核心个数。
步骤S105,根据内存大小和CPU核心个数,确定执行结构化查询语句对应的进程个数。
在分别确定出执行结构化查询语句对应的内存大小和CPU核心个数后,可以根据内存大小和CPU核心个数与进程个数之间的第三对应关系,确定出与内存大小和CPU核心个数相对应的执行结构化查询语句对应的进程个数。
步骤S106,基于内存大小、CPU核心个数和进程个数,对结构化查询语句进行资源分配。
在确定出执行结构化查询语句对应的内存大小、CPU核心个数和进程个数后,可以基于内存大小和进程个数的乘积,确定出执行结构化查询语句对应的总内存大小,并基于CPU核心个数和进程个数的乘积,确定出执行结构化查询语句对应的总CPU核心个数。
然后,可以将总内存大小和总CPU核心个数分配给结构化查询语句。
在一种实施例中,对结构化查询语句进行资源分配之后,还可以将结构化查询语句与内存大小、CPU核心个数和进程个数提交给数据查询平台,以使数据查询平台根据内存大小、CPU核心个数和进程个数,对结构化查询语句进行数据查询。
在Spark中,需要分配给结构化查询语句的资源参数共有三个,分别是内存大小spark.executer.memory、CPU核心个数spark.executer.cores和进程个数spark.executor.instances。下面对这个三个资源参数分别进行参数分析:
spark.executer.cores:该参数用于设置每个executor进程的CPU核心个数,它决定了每个executor进程并行执行task线程的能力,因为每个CPU核心同一时间只能执行一个线程,因此每个Executor进程的CPU核心个数越多,越能够快速地执行完分配给自己的所有task线程。
假设单个服务器节点有32个CPU核心可以使用,考虑到系统基础服务和其他hadoop组件的余量,一般会将YARN NodeManager的yarn.nodemanager.resource.cpu_vcores参数设为28,也就是YARN能够利用其中的28核,此时将spark.executor.cores设为4最合适。
spark.executer.memory:该参数用于设置每个executor进程的内存,executor进程内存的大小很多时候直接决定了Spark任务的性能。该内存其实是堆内内存量,堆内内存越大executor就能缓存更多的数据,因此通常会将一个executor总内存量的80%分配给堆内内存,20%分配给堆外内存。executor总内存量的公式可以为:
yarn.nodemanager.resource.memory_mb*(spark.executor.cores/yarn.nodemana ger.resource.cpu_vcores),即总内存量是根据核心数的比例来分配的。
假设集群中单个服务器节点有128G内存,yarn.nodemanager.resource.memory_mb(即单个NodeManager能够利用的主机内存量)可以设为120G,那么根据executor总内存量的公式,可以得到总内存量为:120*1024*(4/28)≈17554MB。再按8:2比例划分,则最终spark.executor.memory可以设为约13166MB,取整后为12G。
spark.executor.instances:该参数用于设置Spark作业总共要用多少个executor进程来执行。Driver在向YARN集群管理器申请资源时,YARN集群管理器会尽可能按照已有设置在集群的各个工作节点上,启动相应数量的executor进程。如果不设置该参数,则YARN集群管理器会默认只启动少量的executor进程,此时Spark作业的运行速度会非常慢。并且,该参数设置太少或太多都不好,如果设置的太少,就无法充分利用集群资源,如果设置的太多,则大部分park作业可能都无法分配到充分的资源。
基于以上对三个资源参数的分析可知,一个Spark任务所消耗的CPU核心的总数为num_executors*num_cores,其中,num_executors为进程个数,num_cores为CPU核心个数;所消耗的Memory总数为num_executors*num_memory,其中,num_executors为进程个数,num_memory为内存大小。假如有10台32核128G的服务器节点,则按照每个节点上承载7个executor,理论上可以将spark.executor.instances设为70,以使集群资源最大化利用,但由于Dirver也要占用资源,并且一个Yarn集群往往还有Hive on Spark之外的业务,所以往往推荐值设为理论值的一半左右,再考虑到集群有多个用户使用,那么进程个数还要降一半左右。
因此,对于CPU核心个数、内存大小和进程个数三个资源参数的分配策略可以如下:
CPU核心个数分配策略:CPU核心个数的分配是根据用户提交的结构化查询语句中的算子个数确定的,算子个数越多分配的CPU核心个数也就越多,根据上述分析可知单个节点的CPU核心个数上限是4,那么算子个数与CPU核心个数之间的第一对应关系,即针对算子个数与CPU核心个数的分配可以按表2中的策略进行:
表1
算子个数 | CPU核心个数 |
[0,2) | 1 |
[2,5) | 2 |
[5,10) | 3 |
[10,+∞) | 4 |
内存大小分配策略:内存大小的分配是根据用户提交的结构化查询语句中的表名相对应的数据库表的数据量确定的,数据量越大则需要的内存大小就越多,根据上述分析可知单个节点的内存大小上限是12G,那么数据量与CPU核心个数之间的第二对应关系,即针对数据量和内存大小的分配可以按表2中的策略进行:
表2
数据量(GB) | 内存大小(GB) |
[0,1) | 2 |
[1,10) | 4 |
[10,100) | 10 |
[100,+∞) | 12 |
进程个数分配策略:根据CPU核心个数和内存大小,可以首先确定出进程个数的下限,由于默认值为2,则为了与默认值区分开来并且尽可能多的利用集群资源,所以可以将进程个数最小设为4。再确定进程个数的上限,由于整个集群可用于Yam调度的CPU核心个数为280,在设定spark.driver.cores=1时,理论最大进程个数可设为280,但实际推荐值仅为理论值的1/2,又考虑到集群为多人使用,为了不影响其他人任务的提交,可以将最大进程个数设为理论值的1/4,故实际当CPU核心个数设为1时,进程个数的最大值为70。因此,CPU核心个数、内存大小和进程个数之间的第三对应关系,即针对CPU核心个数、内存大小和进程个数的分配可以按表3中的策略进行:
表3
在一些实施例中,本申请提出的资源分配方法还可以按照图2中示出的过程进行实现。如图2所示,可以包括如下步骤:
步骤S201,接收用户预提交的Sql。
由于用户无需关心资源参数的分配,因此用户只需要提交结构化查询语句Sql即可,并且,由于数据查询平台在根据Spark任务进行数据查询时,需要提交的每个Spark任务都需要包含有Sql和对应的资源参数配置,因此,在步骤S201中,用户提交Sql只能是预提交,等待给该Sql分配对应的资源参数后,才能将用户预提交的Sql和分配的资源参数正式提交给数据查询平台。
步骤S202,采用解析器对Sql进行解析,确定Sql中的表名和操作算子。
在接收到用户预提交的Sql后,可以采用Sql解析器对Sql的语法进行解析,得到Sql中的各个关键词,并根据各个关键词,可以确定出Sql中的各个表名和各个操作算子。操作算子可以是如join、distinct和count等操作。
步骤S203,根据表名确定表名相对应的数据库表所包含的数据量,并统计操作算子对应的算子个数。
由于Hive元数据库中保存有数据库表的相关属性信息,即保存有各种数据库表所包含的数据量信息,则在确定出Sql中的表名后,可以根据表名,在Hive元数据库中查询表名相对应的数据库表所包含的数据量。并且,根据表名,到Hive元数据库中查询表名相对应的数据库表所包含的数据量不会耗费太长时间。
同时,在确定出Sql中的操作算子后,可以统计出操作算子对应的算子个数。并且,相同数据量下算子个数的多少决定了对应的Spark任务运行时间的快慢,算子个数越多计算就越复杂,结果返回得也就越慢。
步骤S204,根据数据量,确定执行Sql对应的内存大小,并根据操作算子对应的算子个数,确定执行Sql对应的CPU核心个数,基于内存大小和CPU个数,确定执行Sql对应的进程个数。
根据内存大小与数据量之间的第一对应关系,可以确定出与数据量相对应的执行Sql对应的内存大小。
根据CPU核心个数与操作算子对应的算子个数之间的第二对应关系,可以确定出与操作算子对应的算子个数相对应的执行Sql对应的CPU核心个数。
根据内存大小和CPU核心个数与进程个数之间的第三对应关系,可以确定出与内存大小和CPU核心个数相对应的执行Sql对应的进程个数。并且,数据量越大对内存大小的需求就越大,操作算子对应的算子个数越多说明计算就越复杂,对CPU核心个数的需求就越多。
步骤S205,基于内存大小、CPU核心个数和进程个数,生成Sql对应的资源分配策略。
在分别确定出执行Sql对应的内存大小、CPU核心个数和进程个数后,可以将该内存大小、CPU核心个数和进程个数分配给对应的Sql,以生成Sql对应的资源分配策略。
步骤S206,将Sql与Sql对应的资源分配策略正式提交数据查询平台。
在确定出Sql对应的资源分配策略后,可以将Sql与Sql对应的资源分配策略正式提交给数据查询平台,以使数据查询平台根据内存大小、CPU核心个数和进程个数,对Sql进行数据查询。并且,数据查询平台可以根据分配给Sql的资源参数,向集群资源管理器Yarn申请运行所需要的计算资源,并通过该计算资源执行Sql,得到相应的数据查询结果。
本申请实施例提供的资源分配方法可以接收用户高频次地提交SparkSql任务,在无需用户人工干预的情况下,依据当前的计算资源上限,自动地给SparkSql任务分配最佳参数,并且,在不影响其他用户parkSql任务正常提交的情况下,能够最大化利用集群资源,从而实现快速返回结果的目的。
此外,由于本方案只需解析用户提交的Sql、查找到Sql中的数据库表的数据量,再根据资源分配策略进行分配参数即可,因此,本方案具有流程简洁,运行效率高的优点。并且,用户几乎体会不到参数自动化分配的过程,对用户来说,只需正常写好SparkSql,然后提交运行等待结果即可,由于无需再操心资源参数的配比问题,因此也可以大大提高开发效率以及集群资源的使用率。
与图1所示的资源分配方法基于同一发明构思,本申请实施例中还提供了一种资源分配装置。由于该装置是本申请资源分配方法对应的装置,并且该装置解决问题的原理与该方法相似,因此该装置的实施可以参见上述方法的实施,重复之处不再赘述。
图3示出了本申请实施例提供的一种资源分配装置的结构示意图,如图3所示,该资源分配装置包括查询语句获取单元301、查询语句解析单元302、内存大小确定单元303、核心个数确定单元304、进程个数确定单元305和资源分配单元306。
其中,查询语句获取单元301,用于获取结构化查询语句;
查询语句解析单元302,用于对结构化查询语句进行解析,确定结构化查询语句中的表名和操作算子;
内存大小确定单元303,用于根据表名,确定表名相对应的数据库表所包含的数据量,并根据数据量,确定执行结构化查询语句对应的内存大小;
核心个数确定单元304,用于根据操作算子对应的算子个数,确定执行结构化查询语句对应的中央处理器CPU核心个数;
进程个数确定单元305,用于根据内存大小和CPU核心个数,确定执行结构化查询语句对应的进程个数;
资源分配单元306,用于基于内存大小、CPU核心个数和进程个数,对结构化查询语句进行资源分配。
在一种可选的实施例中,查询语句解析单元302,具体用于:
对结构化查询语句中的语法进行解析,得到结构化查询语句中的各个关键词;
根据各个关键词,分别确定结构化查询语句中的表名和操作算子。
在一种可选的实施例中,内存大小确定单元303,具体用于:
根据表名,在元数据库中查询表名相对应的数据库表所包含的数据量;元数据库中保存有各种数据库表所包含的数据量信息;或者,
若确定结构化查询语句中包括多个表名,则根据多个表名,在元数据库中查询多个表名分别相对应的各个数据库表所包含的数据量;对各个数据库表所包含的数据量进行加和,得到多个表名对应的总数据量。
在一种可选的实施例中,内存大小确定单元303,还用于:
根据内存大小与数据量之间的第一对应关系,确定与数据量相对应的执行结构化查询语句对应的内存大小;
核心个数确定单元304,具体用于:
根据中央处理器CPU核心个数与算子个数之间的第二对应关系,确定与操作算子对应的算子个数相对应的执行结构化查询语句对应的CPU核心个数;
进程个数确定单元305,具体用于:
根据内存大小和CPU核心个数与进程个数之间的第三对应关系,确定与内存大小和CPU核心个数相对应的执行结构化查询语句对应的进程个数。
在一种可选的实施例中,资源分配单元306,具体用于:
基于内存大小、CPU核心个数和进程个数,确定执行结构化查询语句对应的总内存大小和总CPU核心个数;
将总内存大小和总CPU核心个数分配给结构化查询语句。
在一种可选的实施例中,资源分配单元306,还用于:
基于内存大小和进程个数的乘积,确定执行结构化查询语句对应的总内存大小;
基于CPU核心个数和进程个数的乘积,确定执行结构化查询语句对应的总CPU核心个数。
在一种可选的实施例中,如图4所示,上述装置还可以包括查询语句提交单元401,用于:
将结构化查询语句与内存大小、CPU核心个数和进程个数提交给数据查询平台,以使数据查询平台根据内存大小、CPU核心个数和进程个数,对结构化查询语句进行数据查询。
与上述方法实施例基于同一发明构思,本申请实施例中还提供了一种电子设备。该电子设备可以用于对结构化查询语句进行资源分配。在一种实施例中,该电子设备可以是服务器,也可以是终端设备或其他电子设备。在该实施例中,电子设备的结构可以如图5所示,包括存储器501,通讯模块503以及一个或多个处理器502。
存储器501,用于存储处理器502执行的计算机程序。存储器501可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统,以及运行即时通讯功能所需的程序等;存储数据区可存储各种即时通讯信息和操作指令集等。
存储器501可以是易失性存储器(volatile memory),例如随机存取存储器(random-access memory,RAM);存储器501也可以是非易失性存储器(non-volatilememory),例如只读存储器,快闪存储器(flash memory),硬盘(hard disk drive,HDD)或固态硬盘(solid-state drive,SSD)、或者存储器501是能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。存储器501可以是上述存储器的组合。
处理器502,可以包括一个或多个中央处理单元(central processing unit,CPU)或者为数字处理单元等等。处理器502,用于调用存储器501中存储的计算机程序时实现上述资源分配方法。
通讯模块503用于与终端设备和其他服务器进行通信。
本申请实施例中不限定上述存储器501、通讯模块503和处理器502之间的具体连接介质。本公开实施例在图5中以存储器501和处理器502之间通过总线504连接,总线504在图5中以粗线表示,其它部件之间的连接方式,仅是进行示意性说明,并不引以为限。总线504可以分为地址总线、数据总线、控制总线等。为便于表示,图5中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
根据本申请的一个方面,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述实施例中的资源分配方法。
程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。
Claims (16)
1.一种资源分配方法,其特征在于,所述方法包括:
获取结构化查询语句;
对所述结构化查询语句进行解析,确定所述结构化查询语句中的表名和操作算子;
根据所述表名,确定所述表名相对应的数据库表所包含的数据量,并根据所述数据量,确定执行所述结构化查询语句对应的内存大小;
根据所述操作算子对应的算子个数,确定执行所述结构化查询语句对应的中央处理器CPU核心个数;
根据所述内存大小和所述CPU核心个数,确定执行所述结构化查询语句对应的进程个数;
基于所述内存大小、所述CPU核心个数和所述进程个数,对所述结构化查询语句进行资源分配。
2.根据权利要求1所述的方法,其特征在于,所述对所述结构化查询语句进行解析,确定所述结构化查询语句中的表名和操作算子,包括:
对所述结构化查询语句中的语法进行解析,得到所述结构化查询语句中的各个关键词;
根据所述各个关键词,分别确定所述结构化查询语句中的表名和操作算子。
3.根据权利要求1所述的方法,其特征在于,所述根据所述表名,确定所述表名相对应的数据库表所包含的数据量,包括:
根据所述表名,在元数据库中查询所述表名相对应的数据库表所包含的数据量;所述元数据库中保存有各种数据库表所包含的数据量信息;或者,
若确定所述结构化查询语句中包括多个表名,则根据所述多个表名,在所述元数据库中查询所述多个表名分别相对应的各个数据库表所包含的数据量;对所述各个数据库表所包含的数据量进行加和,得到所述多个表名对应的总数据量。
4.根据权利要求1所述的方法,其特征在于,所述根据所述数据量,确定执行所述结构化查询语句对应的内存大小,包括:
根据内存大小与数据量之间的第一对应关系,确定与所述数据量相对应的执行所述结构化查询语句对应的内存大小;
所述根据所述操作算子对应的算子个数,确定执行所述结构化查询语句对应的中央处理器CPU核心个数,包括:
根据中央处理器CPU核心个数与算子个数之间的第二对应关系,确定与所述操作算子对应的算子个数相对应的执行所述结构化查询语句对应的CPU核心个数;
所述根据所述内存大小和所述CPU核心个数,确定执行所述结构化查询语句对应的进程个数,包括:
根据内存大小和CPU核心个数与进程个数之间的第三对应关系,确定与所述内存大小和所述CPU核心个数相对应的执行所述结构化查询语句对应的进程个数。
5.根据权利要求1所述的方法,其特征在于,所述基于所述内存大小、所述CPU核心个数和所述进程个数,对所述结构化查询语句进行资源分配,包括:
基于所述内存大小、所述CPU核心个数和所述进程个数,确定执行所述结构化查询语句对应的总内存大小和总CPU核心个数;
将所述总内存大小和总CPU核心个数分配给所述结构化查询语句。
6.根据权利要求5所述的方法,其特征在于,所述基于所述内存大小、所述CPU核心个数和所述进程个数,确定执行所述结构化查询语句对应的总内存大小和总CPU核心个数,包括:
基于所述内存大小和所述进程个数的乘积,确定执行所述结构化查询语句对应的总内存大小;
基于所述CPU核心个数和所述进程个数的乘积,确定执行所述结构化查询语句对应的总CPU核心个数。
7.根据权利要求1所述的方法,其特征在于,所述对所述结构化查询语句进行资源分配之后,所述方法还包括:
将所述结构化查询语句与所述内存大小、所述CPU核心个数和所述进程个数提交给数据查询平台,以使所述数据查询平台根据所述内存大小、所述CPU核心个数和所述进程个数,对所述结构化查询语句进行数据查询。
8.一种资源分配装置,其特征在于,包括:
查询语句获取单元,用于获取结构化查询语句;
查询语句解析单元,用于对所述结构化查询语句进行解析,确定所述结构化查询语句中的表名和操作算子;
内存大小确定单元,用于根据所述表名,确定所述表名相对应的数据库表所包含的数据量,并根据所述数据量,确定执行所述结构化查询语句对应的内存大小;
核心个数确定单元,用于根据所述操作算子对应的算子个数,确定执行所述结构化查询语句对应的中央处理器CPU核心个数;
进程个数确定单元,用于根据所述内存大小和所述CPU核心个数,确定执行所述结构化查询语句对应的进程个数;
资源分配单元,用于基于所述内存大小、所述CPU核心个数和所述进程个数,对所述结构化查询语句进行资源分配。
9.根据权利要求8所述的装置,其特征在于,所述查询语句解析单元,具体用于:
对所述结构化查询语句中的语法进行解析,得到所述结构化查询语句中的各个关键词;
根据所述各个关键词,分别确定所述结构化查询语句中的表名和操作算子。
10.根据权利要求8所述的装置,其特征在于,所述内存大小确定单元,具体用于:
根据所述表名,在元数据库中查询所述表名相对应的数据库表所包含的数据量;所述元数据库中保存有各种数据库表所包含的数据量信息;或者,
若确定所述结构化查询语句中包括多个表名,则根据所述多个表名,在所述元数据库中查询所述多个表名分别相对应的各个数据库表所包含的数据量;对所述各个数据库表所包含的数据量进行加和,得到所述多个表名对应的总数据量。
11.根据权利要求8所述的装置,其特征在于,所述内存大小确定单元,还用于:
根据内存大小与数据量之间的第一对应关系,确定与所述数据量相对应的执行所述结构化查询语句对应的内存大小;
所述核心个数确定单元,具体用于:
根据中央处理器CPU核心个数与算子个数之间的第二对应关系,确定与所述操作算子对应的算子个数相对应的执行所述结构化查询语句对应的CPU核心个数;
所述进程个数确定单元,具体用于:
根据内存大小和CPU核心个数与进程个数之间的第三对应关系,确定与所述内存大小和所述CPU核心个数相对应的执行所述结构化查询语句对应的进程个数。
12.根据权利要求8所述的装置,其特征在于,所述资源分配单元,具体用于:
基于所述内存大小、所述CPU核心个数和所述进程个数,确定执行所述结构化查询语句对应的总内存大小和总CPU核心个数;
将所述总内存大小和总CPU核心个数分配给所述结构化查询语句。
13.根据权利要求12所述的装置,其特征在于,所述资源分配单元,还用于:
基于所述内存大小和所述进程个数的乘积,确定执行所述结构化查询语句对应的总内存大小;
基于所述CPU核心个数和所述进程个数的乘积,确定执行所述结构化查询语句对应的总CPU核心个数。
14.根据权利要求8所述的装置,其特征在于,所述装置还包括查询语句提交单元,用于:
将所述结构化查询语句与所述内存大小、所述CPU核心个数和所述进程个数提交给数据查询平台,以使所述数据查询平台根据所述内存大小、所述CPU核心个数和所述进程个数,对所述结构化查询语句进行数据查询。
15.一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,其特征在于:所述计算机程序被处理器执行时,实现权利要求1~7中任一项所述的方法。
16.一种电子设备,其特征在于,包括存储器和处理器,所述存储器上存储有可在所述处理器上运行的计算机程序,当所述计算机程序被所述处理器执行时,实现权利要求1~7中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111134494.9A CN113867953A (zh) | 2021-09-27 | 2021-09-27 | 一种资源分配方法、装置、存储介质和电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111134494.9A CN113867953A (zh) | 2021-09-27 | 2021-09-27 | 一种资源分配方法、装置、存储介质和电子设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113867953A true CN113867953A (zh) | 2021-12-31 |
Family
ID=78991085
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111134494.9A Pending CN113867953A (zh) | 2021-09-27 | 2021-09-27 | 一种资源分配方法、装置、存储介质和电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113867953A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114218017A (zh) * | 2022-02-18 | 2022-03-22 | 苏州浪潮智能科技有限公司 | 一种数据恢复方法、系统、装置及存储设备 |
CN115174214A (zh) * | 2022-07-05 | 2022-10-11 | 中孚安全技术有限公司 | 一种操作系统应用层全局网络抓包方法及系统 |
CN117708304A (zh) * | 2024-02-01 | 2024-03-15 | 浙江大华技术股份有限公司 | 数据库问答方法、设备及存储介质 |
-
2021
- 2021-09-27 CN CN202111134494.9A patent/CN113867953A/zh active Pending
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114218017A (zh) * | 2022-02-18 | 2022-03-22 | 苏州浪潮智能科技有限公司 | 一种数据恢复方法、系统、装置及存储设备 |
WO2023155440A1 (zh) * | 2022-02-18 | 2023-08-24 | 苏州浪潮智能科技有限公司 | 一种数据恢复方法、系统、装置及存储设备 |
CN115174214A (zh) * | 2022-07-05 | 2022-10-11 | 中孚安全技术有限公司 | 一种操作系统应用层全局网络抓包方法及系统 |
CN117708304A (zh) * | 2024-02-01 | 2024-03-15 | 浙江大华技术股份有限公司 | 数据库问答方法、设备及存储介质 |
CN117708304B (zh) * | 2024-02-01 | 2024-05-28 | 浙江大华技术股份有限公司 | 数据库问答方法、设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113867953A (zh) | 一种资源分配方法、装置、存储介质和电子设备 | |
CN108009236B (zh) | 一种大数据查询方法、系统、计算机及存储介质 | |
CN110795455B (zh) | 依赖关系解析方法、电子装置、计算机设备及可读存储介质 | |
WO2017016423A1 (zh) | 一种实时新增数据更新方法和装置 | |
US10261888B2 (en) | Emulating an environment of a target database system | |
CN110968425B (zh) | 一种任务资源动态分配方法及系统 | |
CN111352950B (zh) | 数据库表等值连接的优化方法、装置、服务器及存储介质 | |
CN110597618B (zh) | 一种数据交换系统的任务拆分方法及装置 | |
US20140059000A1 (en) | Computer system and parallel distributed processing method | |
CN110807145A (zh) | 查询引擎获取方法、设备和计算机可读存储介质 | |
CN111736907B (zh) | 一种自适应低延迟内存计算引擎的数据分析方法 | |
CN111061762A (zh) | 分布式任务处理方法、相关设备、系统及存储介质 | |
CN111158904A (zh) | 一种任务调度方法、装置、服务器及介质 | |
CN113641487B (zh) | 一种大数据平台sql任务执行引擎智能自动切换的方法 | |
CN113010315A (zh) | 资源分配方法及分配装置、计算机可读存储介质 | |
CN112948113A (zh) | 一种集群资源管理调度方法、装置、设备及可读存储介质 | |
CN117194445A (zh) | 物化视图的更新方法及电子设备 | |
US11868353B1 (en) | Fingerprints for database queries | |
CN114860449B (zh) | 数据处理方法、装置、设备和存储介质 | |
CN115858499A (zh) | 一种数据库分区处理方法、装置、计算机设备和存储介质 | |
CN112001617B (zh) | 一种报表生成进度方法、装置、设备及可读存储介质 | |
CN115061730A (zh) | 一种线程并发管理方法及装置 | |
CN112540843B (zh) | 资源的分配方法、装置、存储设备及存储介质 | |
CN113835953A (zh) | 作业信息的统计方法、装置、计算机设备和存储介质 | |
CN109902067B (zh) | 文件处理方法、装置、存储介质及计算机设备 |
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 |