申请内存的方法和装置

著录项
  • CN201510570126.7
  • 20150909
  • CN106528551A
  • 20170322
  • 北京国双科技有限公司
  • 谢宁
  • G06F17/30
  • G06F17/30

  • 北京市海淀区双榆树小区知春路76号翠宫饭店8层A间
  • 北京(11)
  • 北京鼎佳达知识产权代理事务所(普通合伙)
  • 王伟锋;刘铁生
摘要
本发明公开了一种申请内存的方法和装置,涉及互联网技术领域,能够解决现有技术中因申请的内存量不够而造成数据查询失败的问题。本发明的方法,包括:获取待执行的数据查询语句;根据所述数据查询语句获取查询计划树,并从所述查询计划树中读取目标内存使用量,所述目标内存使用量为执行所述数据查询语句时实际需要的内存总大小;将内存控制参数的参数值设置为所述目标内存使用量,并根据设置后的内存控制参数向资源管理系统申请内存,以便基于申请的内存执行所述数据查询语句。本发明适用于impala向yarn申请内存进行语句查询的场景中。
权利要求

1.一种申请内存的方法,其特征在于,所述方法包括:

获取待执行的数据查询语句;

根据所述数据查询语句获取查询计划树,并从所述查询计划树中读取 目标内存使用量,所述目标内存使用量为执行所述数据查询语句时实际需 要的内存总大小;

将内存控制参数的参数值设置为所述目标内存使用量,并根据设置后 的内存控制参数向资源管理系统申请内存,以便基于申请的内存执行所述 数据查询语句。

2.根据权利要求1所述的方法,其特征在于,所述根据所述数据查询 语句获取查询计划树,包括:

生成所述数据查询语句的解释语句;

执行所述解释语句,以便获得所述查询计划树。

3.根据权利要求1所述的方法,其特征在于,所述从所述查询计划树 中读取目标内存使用量,包括:

从所述查询计划树中查特征字符串,所述特征字符串中记录有所述 目标内存使用量;

从所述特征字符串中获取所述目标内存使用量。

4.根据权利要求3所述的方法,其特征在于,所述从所述特征字符串 中获取所述目标内存使用量,包括:

加载预设程序,并基于所述预设程序从所述特征字符串中截取所述目 标内存使用量。

5.根据权利要求1至4中任一项所述的方法,其特征在于,所述方法 还包括:

在执行完所述数据查询语句后,释放向所述资源管理系统申请的内存。

6.一种申请内存的装置,其特征在于,所述装置包括:

获取单元,用于获取待执行的数据查询语句;

所述获取单元,还用于根据所述数据查询语句获取查询计划树;

读取单元,用于从所述获取单元获取的所述查询计划树中读取目标内 存使用量,所述目标内存使用量为执行所述数据查询语句时实际需要的内 存总大小;

设置单元,用于将内存控制参数的参数值设置为所述读取单元读取的 所述目标内存使用量;

申请单元,用于根据所述设置单元设置后的内存控制参数向资源管理 系统申请内存,以便基于申请的内存执行所述数据查询语句。

7.根据权利要求6所述的装置,其特征在于,所述获取单元,包括:

生成模块,用于生成所述数据查询语句的解释语句;

执行模块,用于执行所述生成模块生成的所述解释语句,以便获得所 述查询计划树。

8.根据权利要求6所述的装置,其特征在于,所述读取单元,包括:

查模块,用于从所述查询计划树中查特征字符串,所述特征字符 串中记录有所述目标内存使用量;

获取模块,用于从所述查模块查的所述特征字符串中获取所述目 标内存使用量。

9.根据权利要求8所述的装置,其特征在于,所述获取模块,用于加 载预设程序,并基于所述预设程序从所述特征字符串中截取所述目标内存 使用量。

10.根据权利要求6至9中任一项所述的装置,其特征在于,所述装 置还包括:

释放单元,用于在执行完所述数据查询语句后,释放向所述资源管理 系统申请的内存。

说明书
技术领域

本发明涉及互联网技术领域,尤其涉及一种申请内存的方法和装置。

随着互联网技术的发展,对数据库或者数据仓库进行数据查询的软件 越来越多,数据查询的功能也越来越多。例如,hive、impala等是目前普遍 使用的数据查询系统。

其中,impala是hadoop集中的数据查询系统。在利用impala进行数 据查询的过程中,需要基于llama向yarn申请数据查询过程中所需的内存 资源。在现有技术中,在impala执行数据查询语句之前,会利用内存控制 参数通过llama向yarn提前申请一定的内存资源,然后impala再利用申请 到的内存资源实现数据查询功能。然而,执行不同的查询语句所需的内存 资源存在差异。当实际需要的内存资源大于申请的内存资源时,会造成内 存资源不够,需再次申请的现象。而当impala再次通过llama向yarn申请 内存资源时,yarn中可能已没有剩余的内存资源(被其他操作占用),从 而造成impala申请内存失败的现象,进而使得impala查询失败。

有鉴于此,本发明提供一种申请内存的方法和装置,能够解决现有技 术中因申请的内存量不够而造成数据查询失败的问题。

依据本发明一个方面,提供了一种申请内存的方法,所述方法包括:

获取待执行的数据查询语句;

根据所述数据查询语句获取查询计划树,并从所述查询计划树中读取 目标内存使用量,所述目标内存使用量为执行所述数据查询语句时实际需 要的内存总大小;

将内存控制参数的参数值设置为所述目标内存使用量,并根据设置后 的内存控制参数向资源管理系统申请内存,以便基于申请的内存执行所述 数据查询语句。

依据本发明的另一个方面,提供了一种申请内存的装置,所述装置包 括:

获取单元,用于获取待执行的数据查询语句;

所述获取单元,还用于根据所述数据查询语句获取查询计划树;

读取单元,用于从所述获取单元获取的所述查询计划树中读取目标内 存使用量,所述目标内存使用量为执行所述数据查询语句时实际需要的内 存总大小;

设置单元,用于将内存控制参数的参数值设置为所述读取单元读取的 所述目标内存使用量;

申请单元,用于根据所述设置单元设置后的内存控制参数向资源管理 系统申请内存,以便基于申请的内存执行所述数据查询语句。

借由上述技术方案,本发明提供的申请内存的方法和装置,能够在获 得待执行的数据查询语句后,先获得该数据查询语句的查询计划树,再从 查询计划树中获得目标内存使用量,并将内存控制参数的参数值设置为该 目标内存使用量,最后再根据内存控制参数向资源管理系统申请内存,最 终基于申请到的内存执行该数据查询语句。与现有技术中直接基于设置好 的内存控制参数的参数值向资源管理系统申请内存相比,本发明通过从获 取的待执行数据查询语句的查询计划树中读取目标内存使用量(即执行该 数据查询语句时实际需要的内存总大小),并将该目标内存使用量赋值给内 存控制参数,最后根据内存控制参数向资源管理系统申请内存,从而使得 每次数据查询所申请的内存均为实际需要的内存,而无需再次申请内存, 进而使得每次数据查询都能够快速得到查询结果。

上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的 技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和 其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。

通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于 本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目 的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符 号表示相同的部件。在附图中:

图1示出了本发明实施例提供的一种申请内存的方法的流程图;

图2示出了本发明实施例提供的一种申请内存的装置的组成框图;

图3示出了本发明实施例提供的另一种申请内存的装置的组成框图。

下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显 示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开 而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更 透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术 人员。

在实际应用中,数据查询系统在实现数据查询的过程中,需要先向资 源管理系统申请一部分内存,然后基于申请的内存实现数据查询功能。现 有技术中,impala实现申请内存的具体操作方式为:在impala执行数据查 询语句之前,会利用提前设置的内存控制参数通过llama向yarn提前申请 一定的内存资源,然后impala再利用申请到的内存资源实现数据查询功能。 然而,由于不同的数据查询语句在查询过程中需要的内存不同,所以现有 的申请内存方法存在以下问题:

(1)当申请的内存资源小于实际需要的内存资源时,会造成内存资源 不够,需再次申请的现象。而当impala再次通过llama向yarn申请内存资 源时,yarn中可能已没有剩余的内存资源(被其他操作占用),从而造成 impala申请内存失败的现象,进而使得impala查询失败。

(2)当申请的内存资源大于实际需要的内存资源时,会造成内存资源 浪费的现象。又由于资源管理系统中的内存资源是共享的,所以当本次数 据查询占用过多的内存资源时,会造成其他操作无法申请到足够内存的现 象。

因此,如何合理设置内存控制参数成为当今一大难题。

为了解决现有技术中因申请的内存量不够而造成数据查询失败的问 题,本发明实施例提供了一种申请内存的方法,如图1所示,该方法包括:

101、获取待执行的数据查询语句。

当用户在数据查询系统的界面输入一条数据查询语句后,数据查询系 统不立即执行该数据查询语句,而是先向资源管理系统申请内存,再基于 申请的内存执行该数据查询语句。

102、根据数据查询语句获取查询计划树,并从查询计划树中读取目标 内存使用量。

其中,查询计划树(或者称为执行计划树)用于描述数据查询语句的 执行过程,如数据查询语句执行过程中需要的内存总大小、执行时间、所 使用的索引、所查表的大小以及查询顺序等等。目标内存使用量为执行该 数据查询语句时实际需要的内存总大小。由此可知,数据查询系统能够从 查询计划树中读取执行该数据查询语句时实际需要的内存总大小(即目标 内存使用量),以便后续根据该内存总大小向资源管理系统申请内存。

103、将内存控制参数的参数值设置为目标内存使用量,并根据设置后 的内存控制参数向资源管理系统申请内存,以便基于申请的内存执行数据 查询语句。

其中,内存控制参数用于在数据查询系统执行数据查询语句之前,预 先向资源管理系统申请一部分内存作为预留,供数据查询系统在执行数据 查询语句过程中使用。

本步骤中,在数据查询系统将内存控制参数的参数值设置为目标内存 使用量后,根据内存控制参数向资源管理系统所申请的内存的大小为执行 该数据查询语句实际需要的内存总大小。因此,数据查询系统在整个数据 查询过程中不会因内存不够需再次向资源管理系统申请内存,而造成申请 超时甚至申请失败的现象。

此外,由于数据查询系统向资源管理系统申请的内存大小为实际需要 的大小,所以也不存在因申请的内存大于实际所需的内存,而造成资源浪 费的情况。

本发明实施例提供的申请内存的方法,能够在获得待执行的数据查询 语句后,先获得该数据查询语句的查询计划树,再从查询计划树中获得目 标内存使用量,并将内存控制参数的参数值设置为该目标内存使用量,最 后再根据内存控制参数向资源管理系统申请内存,最终基于申请到的内存 执行该数据查询语句。与现有技术中直接基于设置好的内存控制参数的参 数值向资源管理系统申请内存相比,本发明通过从获取的待执行数据查询 语句的查询计划树中读取目标内存使用量(即执行该数据查询语句时实际 需要的内存总大小),并将该目标内存使用量赋值给内存控制参数,最后根 据内存控制参数向资源管理系统申请内存,从而使得每次数据查询所申请 的内存均为实际需要的内存,而无需再次申请内存,进而使得每次数据查 询都能够快速得到查询结果。

进一步的,上述方法实施例中根据数据查询语句获取查询计划树的具 体实现方式可以为:数据查询系统先生成数据查询语句的解释语句,再执 行该解释语句,从而获得查询计划树。

其中,查询计划树为解释语句的执行结果。在数据查询系统中常用的 解释命令为explain命令,当获取待执行的数据查询语句后,数据查询系统 利用explain命令自动生成并执行解释该数据查询语句的解释语句,从而获 得解释结果(即查询计划树)。

示例性的,若待执行的数据查询语句为“select browserbrief,count(*)as cnt from session where day=20150401 group by browserbrief order by cnt desc limit 10;”,则数据查询系统利用explain命令生成的解释语句为“explain select browserbrief,count(*)as cnt from session where day=20150401 group by browserbrief order by cnt desc limit 10;”。在执行该解释语句后,能够获 得数据查询语句“select browserbrief,count(*)as cnt from session where day=20150401 group by browserbrief order by cnt desc limit 10;”的查询计划 树。

进一步的,在获得数据查询语句的查询计划树之后,需要从该查询计 划树中读取目标内存使用量,以便根据该内存使用量向资源管理系统申请 内存。其中,从查询计划树中读取目标内存使用量的具体实现方式为:数 据查询系统先从查询计划树中查特征字符串,再从该特征字符串中获取 目标内存使用量。

其中,特征字符串中记录有目标内存使用量。在数据查询系统获得数 据查询语句的查询计划树之后,会逐行扫描该查询计划树中的内容,并从 中查到特征字符串,最后从查到的特征字符串中获得所需的目标内存 使用量。

在实际应用中,与字符串“Estimated Per-Host Requirements:”相邻的 字符串中包含执行数据查询语句所需的总内存大小,所以本步骤中的特征 字符串为包含“Estimated Per-Host Requirements:”的至少一行字符串。

示例性的,若获得的特征字符串为:“Estimated Per-Host Requirements: Memory=98.00MB VCores=2”,则可以从该字符串中获得目标内存使用量 98.00MB。若内存控制参数为mem_limit,将98.00MB赋值给mem_limit, 即mem_limit=98.00MB。由此数据查询系统执行有关mem_limit的程序,实 现向资源管理系统申请98.00MB内存的功能,从而利用98.00MB的内存完 成数据查询语句的执行操作。

进一步的,从特征字符串中获取目标内存使用量的具体实现方式可以 为加载预设程序,并基于预设程序从特征字符串中截取目标内存使用量。

具体的,该预设程序的截取过程可以为:从该特征字符串中查出含 有Memory的表达式,再从该Memory的表达式中截取“=”后面的数值(包 含单位)。

进一步的,由于资源管理系统中的资源是共享的,所以当数据查询系 统执行完数据查询语句后,需要释放占用的内存,以便供其他操作使用。

进一步的,数据查询系统可以为impala查询系统,即申请内存可以在 impala环境下进行。

需要说明的是,impala是基于hadoop集的数据查询系统,可以对 hadoop集上的海量数据进行查询。在impala执行用户输入的数据查询语 句之前,会通过hadoop集中的资源调度框架llama向资源管理系统yarn 申请内存,并基于申请的内存执行该数据查询语句,执行完数据查询语句 后,返回查询结果供用户查看,同时释放向资源管理系统yarn申请的内存。

进一步的,依据上述方法实施例,本发明的另一个实施例还提供了一 种申请内存的装置,如图2所示。该装置包括:获取单元21、读取单元22、 设置单元23和申请单元24。其中,

获取单元21,用于获取待执行的数据查询语句;

获取单元21,还用于根据数据查询语句获取查询计划树;

读取单元22,用于从获取单元21获取的查询计划树中读取目标内存使 用量,目标内存使用量为执行数据查询语句时实际需要的内存总大小;

设置单元23,用于将内存控制参数的参数值设置为读取单元22读取的 目标内存使用量;

申请单元24,用于根据设置单元23设置后的内存控制参数向资源管理 系统申请内存,以便基于申请的内存执行数据查询语句。

本发明实施例提供的申请内存的装置,能够在获得待执行的数据查询 语句后,先获得该数据查询语句的查询计划树,再从查询计划树中获得目 标内存使用量,并将内存控制参数的参数值设置为该目标内存使用量,最 后再根据内存控制参数向资源管理系统申请内存,最终基于申请到的内存 执行该数据查询语句。与现有技术中直接基于设置好的内存控制参数的参 数值向资源管理系统申请内存相比,本发明通过从获取的待执行数据查询 语句的查询计划树中读取目标内存使用量(即执行该数据查询语句时实际 需要的内存总大小),并将该目标内存使用量赋值给内存控制参数,最后根 据内存控制参数向资源管理系统申请内存,从而使得每次数据查询所申请 的内存均为实际需要的内存,而无需再次申请内存,进而使得每次数据查 询都能够快速得到查询结果。

需要说明的是,由于申请单元24向资源管理系统申请的内存为执行数 据查询语句实际需要的内存总大小,所以也不存在因申请的内存大于实际 需要的内存而造成资源浪费的情况。

进一步的,如图3所示,获取单元21,包括:

生成模块211,用于生成数据查询语句的解释语句;

执行模块212,用于执行生成模块211生成的解释语句,以便获得查询 计划树。

进一步的,如图3所示,读取单元22,包括:

查模块221,用于从查询计划树中查特征字符串,特征字符串中记 录有目标内存使用量;

获取模块222,用于从查模块221查的特征字符串中获取目标内存 使用量。

进一步的,获取模块222,用于加载预设程序,并基于预设程序从特征 字符串中截取目标内存使用量。

进一步的,如图3所示,该装置还包括:

释放单元25,用于在执行完数据查询语句后,释放向资源管理系统申 请的内存。

在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没 有详述的部分,可以参见其他实施例的相关描述。

可以理解的是,上述方法及装置中的相关特征可以相互参考。另外, 上述实施例中的“第一”、“第二”等是用于区分各实施例,而并不代表各实施 例的优劣。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述 描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的 对应过程,在此不再赘述。

在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备 固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的 描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对 任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本 发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实 施方式。

在此处所提供的说明书中,说明了大量具体细节。然而,能够理解, 本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中, 并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。

类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一 个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征 有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将 该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个 权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要 求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特 征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方 式,其中每个权利要求本身都作为本发明的单独实施例。

本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行 自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。 可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及 此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或 过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明 书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开 的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本 说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提 供相同、等同或相似目的的替代特征来代替。

此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括 其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征 的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下 面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合 方式来使用。

本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处 理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员 应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现 根据本发明实施例的随身电子防丢设备的状态检测方法、设备、服务器及 系统设备中的一些或者全部部件的一些或者全部功能。本发明还可以实现 为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例 如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在 计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号 可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他 形式提供。

应该注意的是上述实施例对本发明进行说明而不是对本发明进行限 制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出 替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成 对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步 骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明 可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实 现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通 过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示 任何顺序。可将这些单词解释为名称。

本文发布于:2024-09-25 10:24:19,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/3/85685.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议