YARN资源分配方法及装置转让专利

申请号 : CN201810392267.8

文献号 : CN108563508B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 户蕾蕾史宁宁

申请人 : 新华三大数据技术有限公司

摘要 :

本公开涉及一种YARN资源分配方法及装置,所述方法应用于服务器中,所述方法包括:Thrift server启动;Thrift server接收至少一个客户端发送的连接请求;对于任一客户端:Thrift server根据连接请求启动与客户端对应的Spark进程,以使Spark进程向YARN请求资源;在Spark进程向YARN请求资源成功后,Thrift server接收Spark进程的注册请求;在Spark进程注册成功后,Thrift server通知所述客户端连接成功。实现了每个客户端在YARN中都有与之对应的资源队列,可以提高各客户端的任务执行效率。

权利要求 :

1.一种资源协调者YARN资源分配方法,其特征在于,所述方法包括:跨语言的服务部署框架Thrift server启动;

Thrift server接收至少一个客户端发送的连接请求;

对于任一所述客户端:

所述Thrift server根据所述连接请求启动与所述客户端对应的Spark进程,以使所述Spark进程向YARN请求资源;其中,不同的客户端启动的Spark进程不同,所述客户端与YARN中的资源队列一一对应;

在所述Spark进程向YARN请求资源成功后,所述Thrift server接收所述Spark进程的注册请求;所述注册请求中携带所述客户端标识;

在所述Spark进程注册成功后,所述Thrift server通知所述客户端连接成功;

在所述Spark进程注册成功后,所述方法还包括:

所述Thrift server根据所述客户端标识建立所述客户端与所述Spark进程的映射关系。

2.根据权利要求1所述的方法,其特征在于,所述Thrift server根据所述连接请求启动与所述客户端对应的Spark进程,包括:所述Thrift server根据所述连接请求调用Spark Context接口,通过启动命令启动与所述客户端对应的Spark进程。

3.根据权利要求2所述的方法,其特征在于,所述启动命令包括客户端标识和Thrift server的通信地址,以使所述Spark进程启动后获取并记录所述客户端标识和Thrift server的通信地址:所述Thrift server接收所述Spark进程的注册请求,包括:所述Thrift server接收所述Spark进程根据所述Thrift server的通信地址发送的注册请求。

4.根据权利要求1所述的方法,其特征在于,所述客户端连接成功后,所述方法还包括:所述Thrift server接收所述客户端发送的任务;

所述Thrift server根据客户端与Spark进程之间的映射关系,将所述任务发送至与所述客户端对应的Spark进程;

所述Thrift server向所述Spark进程获取任务的执行结果,并将所述执行结果发送至所述客户端。

5.根据权利要求4所述的方法,其特征在于,所述Thrift server向所述Spark进程获取任务的执行结果,并将所述执行结果发送至所述客户端,包括:所述Thrift server向所述Spark进程获取所述任务的执行状态;

所述Thrift server根据所述执行状态确定所述任务的执行结果,并将所述执行结果发送至客户端。

6.一种YARN资源分配装置,其特征在于,所述装置包括:启动模块,用于启动跨语言的服务部署框架Thrift server;连接请求接收模块,用于接收至少一个客户端发送的连接请求:Spark进程启动模块,用于对于任一所述客户端:根据所述连接请求启动与所述客户端对应的Spark进程,以使所述Spark进程向YARN请求资源;其中,不同的客户端启动的Spark进程不同,所述客户端与YARN中的资源队列一一对应;

注册请求消息接收模块,用于在所述Spark进程向YARN请求资源成功后,接收所述Spark进程的注册请求;

连接成功消息发送模块,用于在所述Spark进程注册成功后,通知所述客户端连接成功;

映射关系建立模块,用于在所述Spark进程注册成功后,根据所述客户端标识建立所述客户端与所述Spark进程的映射关系。

7.根据权利要求6所述的装置,其特征在于,所述Spark进程启动模块,包括:第一Spark进程启动子模块,用于根据所述连接请求调用Spark Context接口,通过启动命令启动与所述客户端对应的Spark进程。

8.根据权利要求7所述的装置,其特征在于,所述启动命令包括客户端标识和Thrift server的通信地址,以使所述Spark进程启动后获取并记录所述客户端标识和Thrift server的通信地址;所述注册请求消息接收模块,包括:第二注册请求消息接收子模块,用于接收所述Spark进程根据所述Thrift server的通信地址发送的注册请求,所述注册请求中携带所述客户端标识。

9.根据权利要求6所述的装置,其特征在于,所述装置还包括:任务接收模块,用于接收所述客户端发送的任务;

任务发送模块,用于根据客户端与Spark进程之间的映射关系,将所述任务发送至与所述客户端对应的Spark进程;

执行结果发送模块,用于向所述Spark进程获取任务的执行结果,并将所述执行结果发送至所述客户端。

10.根据权利要求9所述的装置,其特征在于,所述执行结果发送模块,包括:执行状态获取子模块,用于向所述Spark进程获取所述任务的执行状态;

第一执行结果发送子模块,用于根据所述执行状态确定所述任务的执行结果,并将所述执行结果发送至客户端。

说明书 :

YARN资源分配方法及装置

技术领域

[0001] 本公开涉及计算机技术领域,尤其涉及一种YARN资源分配方法及装置。

背景技术

[0002] 在传统的YARN资源的分配方法中,YARN是以层级队列的方式组织分 配资源的,有利于资源在不同队列间的分配和共享,可以提高集群资源的利 用率。当客户端通过Thrift server向YARN请求资源时,利用Thrift server启动 时启动的Spark进程向YARN申请资源。不同的客户端申请的资源都在一个资 源队列中,无法根据客户端区分不同的资源队列,导致客户端执行任务时等 待资源的时间较长。

发明内容

[0003] 有鉴于此,本公开提出了一种YARN资源分配方法及装置,用以解决 YARN资源浪费的问题。
[0004] 根据本公开的一方面,提供了一种YARN资源分配方法,所述方法应用 于服务器中,所述方法包括:
[0005] 跨语言的服务部署框架Thrift server启动;
[0006] Thrift server接收至少一个客户端发送的连接请求;
[0007] 对于任一所述客户端:
[0008] 所述Thrift server根据所述连接请求启动与所述客户端对应的Spark进 程,以使所述Spark进程向YARN请求资源;
[0009] 在所述Spark进程向YARN请求资源成功后,所述Thrift server接收所述 Spark进程的注册请求;
[0010] 在所述Spark进程注册成功后,所述Thrift server通知所述客户端连接成 功。
[0011] 根据本公开的另一方面,提供了一种YARN资源分配装置,所述装置包 括:
[0012] 启动模块,用于启动跨语言的服务部署框架Thrift server;
[0013] 连接请求接收模块,用于接收至少一个客户端发送的连接请求;
[0014] Spark进程启动模块,用于对于任一所述客户端:根据所述连接请求启 动与所述客户端对应的Spark进程,以使所述Spark进程向YARN请求资源;
[0015] 注册请求消息接收模块,用于在所述Spark进程向YARN请求资源成功 后,接收所述Spark进程的注册请求;
[0016] 连接成功消息发送模块,用于在所述Spark进程注册成功后,通知所述 客户端连接成功。
[0017] 在本公开实施例中,Thrift server根据客户端发送的连接请求,为客户端 启动与之对应的Spark进程。每个客户端在YARN中都有与之对应的资源队 列,提高了客户端任务的执行效率,也避免了没有客户端接入时YARN的资 源浪费。
[0018] 根据下面参考附图对示例性实施例的详细说明,本公开的其它特征及方 面将变得清楚。

附图说明

[0019] 包含在说明书中并且构成说明书的一部分的附图与说明书一起示出了 本公开的示例性实施例、特征和方面,并且用于解释本公开的原理。
[0020] 图1示出根据本公开一实施例的YARN资源分配方法的流程图;
[0021] 图2示出根据本公开一实施例的YARN资源分配方法的流程图;
[0022] 图3示出根据本公开一实施例的YARN资源分配方法的流程图;
[0023] 图4示出根据本公开一实施例的YARN资源分配方法的流程图;
[0024] 图5示出根据本公开一实施例的YARN资源分配方法的流程图;
[0025] 图6示出根据本公开一实施例的YARN资源分配方法中步骤S90的流程 图;
[0026] 图7示出根据本公开一实施例的YARN资源分配方法的系统架构框图;
[0027] 图8示出根据本公开一实施例的YARN资源分配装置的框图。

具体实施方式

[0028] 以下将参考附图详细说明本公开的各种示例性实施例、特征和方面。附 图中相同的附图标记表示功能相同或相似的元件。尽管在附图中示出了实施 例的各种方面,但是除非特别指出,不必按比例绘制附图。
[0029] 在这里专用的词“示例性”意为“用作例子、实施例或说明性”。这里作为 “示例性”所说明的任何实施例不必解释为优于或好于其它实施例。
[0030] 为了更加清楚的说明书本公开,下面对以下几个概念进行介绍。
[0031] YARN是集群的资源管理系统,在YARN中是以层级队列方式组织资源 的,这种组织方式有利于资源在不同队列间分配和共享,进而提高集群资源 利用率。
[0032] 在Spark Thrift Server的架构中,Thrift Server提供接口,用户可以通过接 口连接Thrift Server来访问Spark进程。Thrift Server在启动时,会启动一个 Spark进程,不同的客户端共同分享Spark进程的资源,不同的客户端之间可 以共享数据。
[0033] 由于Spark Thrift Server启动时启动了Spark进程,Spark进程使用的是 YARN的默认资源队列。当多个客户端通过JDBC接口连接Spark Thrift Server 时,各客户端提交的包括任务信息的SQL语句都在Spark进程对应的资源队列 中执行,各客户端的任务需要排队等待。
[0034] 图1示出根据本公开一实施例的YARN资源分配方法的流程图,所述方法 应用于服务器中,如图1所示,所述YARN资源分配方法包括:
[0035] 步骤S10,跨语言的服务部署框架Thrift server启动;
[0036] 步骤S20,Thrift server接收至少一个客户端发送的连接请求;
[0037] 对于任一所述客户端:
[0038] 步骤S30,所述Thrift server根据所述连接请求启动与所述客户端对应的 Spark进程,以使所述Spark进程向YARN请求资源;
[0039] 步骤S40,在所述Spark进程向YARN请求资源成功后,所述Thrift server 接收所述Spark进程的注册请求;
[0040] 步骤S50,在所述Spark进程注册成功后,所述Thrift server通知所述客户 端连接成功。
[0041] 在一种可能的实现方式中,客户端可以包括安装在客户端硬件载体上的 客户端进程。当Thrift server接收到客户端发送的连接请求时,Thrift server 可以为发送连接请求的客户端启动对应的Spark进程。
[0042] Thrift server可以接收到多个客户端发送的连接请求。Thrift server可以根 据各客户端发送的连接请求,启动与各客户端一一对应的Spark进程。
[0043] 在一种可能的实现方式中,Spark进程可以设置在Thrift server所在的服 务器中,也可以设置在Thrift server所在的服务器之外的服务器中。Spark进 程在启动后,向YARN请求分配资源队列,当YARN中的资源队列分配成功 后,Spark进程启动成功。YARN可以为每个Spark进程分配单独的资源队列。 在向YARN请求资源队列成功后,Spark进程可以向Thrift server发送注册请 求。
[0044] 当Spark进程注册成功时,Thrift server向所述客户端发送连接成功消息, 客户端与Thrift server连接成功。
[0045] 在本实施例中,Thrift server根据客户端发送的连接请求,为客户端启动 与之对应的Spark进程。Spark进程向YARN请求分配与Spark进程对应的资源 队列。在资源队列分配成功,且Spark进程注册成功后,客户端连接ThriftServer 成功。每个客户端在YARN中都有与之对应的资源队列,可以提高各客户端 的任务执行效率。同时避免了没有客户端接入时YARN中的资源队列浪费。
[0046] 在一种可能的实现方式中,在所述Thrift server启动时,提供Java数据库 连接JDBC接口。所述Thrift server通过所述JDBC接口接收客户端发送的连接 请求。
[0047] JDBC接口是一种用于执行SQL语句的Java应用程序接口,可以为多种关 系数据库提供统一访问,JDBC接口由一组用Java语言编写的类和接口组成。 Thrift server启动时,可以不启动Spark进程,也不通过Spark进程向YARN请 求资源队列。
[0048] Thrift server启动时,可以提供JDBC接口。客户端可以通过JDBC接口发 送连接请求。当客户端发送连接请求时,Thrift server可以根据连接请求为不 同的客户端启动与之对应的Spark进程,并通过Spark进程向YARN请求资源 队列,提高YARN中资源队列的使用效率。
[0049] 图2示出根据本公开一实施例的YARN资源分配方法的流程图,如图2所 示,所述YARN资源分配方法中步骤S30包括:
[0050] 步骤S31,所述Thrift server根据所述连接请求调用Spark Context接口, 通过启动命令启动与所述客户端对应的Spark进程。
[0051] 在一种可能的实现方式中,Spark Context接口是Spark进程的入口,由 Spark Context接口负责Spark进程与外部的交互。Thrift server可以调用Spark Context接口,通过发送启动命令,启动一个与发送连接请求的客户端对应的 Spark进程。
[0052] 图3示出根据本公开一实施例的YARN资源分配方法的流程图,所述启动 命令包括客户端标识和Thrift server的通信地址,以使所述Spark进程启动后 获取并记录所述客户端标识和Thrift server的通信地址;如图3所示,所述 YARN资源分配方法中步骤S40包括:
[0053] 步骤S41,所述Thrift server接收所述Spark进程根据所述Thrift server的通 信地址发送的注册请求,所述注册请求中携带所述客户端标识。
[0054] 在一种可能的实现方式中,Thrift server启动Spark进程的启动命令中, 可以包括客户端标识和Thrift server的通信地址。Thrift server的通信地址可以 包括Thrift server的IP地址。启动命令中的客户端标识可以用于标识Thrift server启动的Spark进程所对应的客户端。启动命令中的Thrift server的通信地 址可以使得Spark进程更加方便地向Thrift server发送注册请求。
[0055] 在一种可能的实现方式中,根据Thrift server的发送启动命令,Spark进程 向YARN请求资源队列,并在请求成功后,根据启动命令中的客户端标识和 Thrift server的通信地址,向Thrift server发送注册请求。在Spark进程发送的 注册请求中,可以包括客户端标识。
[0056] 在本实施例中,Thrift server发送的启动命令包括客户端标识和Thrift server的通信地址。根据Thrift server的通信地址,Thrift server可以方便地建 立Spark进程与Thrift server之间的通信通道。根据客户端标识,Thrift server 可以便捷地确认Spark进程与客户端之间的对应关系。
[0057] 图4示出根据本公开一实施例的YARN资源分配方法的流程图,如图4所 示,在所述Spark进程注册成功后,所述YARN资源分配方法还包括:
[0058] 步骤S60,所述Thrift server根据所述客户端标识建立所述客户端与所述 Spark进程的映射关系。
[0059] 在一种可能的实现方式中,Thrift server可以根据注册请求中的客户端标 识建立客户端与Spark进程的映射关系。Thrift server与Spark进程之间可以使 用Netty通信框架。Spark进程可以根据启动命令中的Thrift server的通信地址 确定Thrift server,建立与Thrift server之间的通信通道。而后Spark进程和Thrift server的之间的交互都是基于建立好的通信通道。
[0060] 图5示出根据本公开一实施例的YARN资源分配方法的流程图,所述客户 端连接成功后,如图5所示,所述YARN资源分配方法还包括:
[0061] 步骤S70,所述Thrift server接收所述客户端发送的任务。
[0062] 步骤S80,所述Thrift server根据客户端与Spark进程之间的映射关系,将 所述任务发送至与所述客户端对应的Spark进程。
[0063] 步骤S90,所述Thrift server向所述Spark进程获取任务的执行结果,并将 所述执行结果发送至所述客户端。
[0064] 在一种可能的实现方式中,客户端与Thrift server连接成功后,当客户端 有任务需要执行时,客户端可以向Thrift server发送包含任务信息的SQL语 句。Thrift server可以根据客户端与Spark进程之间的映射关系,将包含任务 信息的SQL语句发送给与客户端对应的Spark进程。
[0065] 在一种可能的实现方式中,Spark进程可以根据接收到的包含任务信息 的SQL语句,利用YARN中为客户端分配的资源队列执行任务。
[0066] 在一种可能的实现方式中,Thrift server可以向Spark进程获取任务的执 行结果,执行结果可以包括任务执行成功或执行失败。Thrift server可以将获 取到的任务的执行结果发送至客户端。
[0067] 当多个客户端向Thrift server发送包括任务信息的SQL语句时,Thrift server可以根据与各客户端对应的Spark进程,通过各客户端的对应的Spark 进程,使用YARN中与客户端对应的资源队列执行任务。避免了传统的YARN 资源队列分配方法中,多个客户端并发任务时,需要使用YARN中相同的资 源队列而出现的等待现象。
[0068] 在本实施例中,当客户端有任务需要执行时,Thrift server将任务发送至 与客户端对应的Spark进程,并向Spark进程获取任务的执行结果后发送至客 户端。各客户端可以通过Thrift server使用YARN中对应的资源队列,提高了 客户端的任务执行效率。
[0069] 图6示出根据本公开一实施例的YARN资源分配方法中步骤S90的流程 图,如图6所示,所述YARN资源分配方法中步骤S90包括:
[0070] 步骤S91,所述Thrift server向所述Spark进程获取所述任务的执行状态。
[0071] 步骤S92,所述Thrift server根据所述执行状态确定所述任务的执行结果, 并将所述执行结果发送至客户端。
[0072] 在一种可能的实现方式中,Thrift server可以周期性地向Spark进程获取 任务的执行状态。可以为任务的不同设置不同的周期。也可以为所有的任务 设置相同的周期。任务的执行状态可以包括执行中、执行成功和执行失败中 的任意一种。
[0073] 当Thrift server获取到的任务的执行状态为执行成功或执行失败时,可以 将执行成功或执行失败确定为任务的执行结果,并将执行结果发送至客户 端。
[0074] 应用示例:
[0075] 图7示出根据本公开一实施例的YARN资源分配方法的系统架构框图,如 图7所示的系统架构图所示,客户端user1、客户端user2和客户端user3接入 Thrift server。图中的三个客户端可以同时接入Thrift server,也可以分别接入 Thrift server。Thrift server通过调用Spark Context1为客户端user1启动Spark进 程1,通过调用Spark Context2为客户端user2启动Spark进程2,通过调用Spark Context3为客户端user3启动Spark进程3。
[0076] 在YARN中,Spark进程1对应资源队列queue1,Spark进程2对应资源队列 queue2,Spark进程3对应资源队列queue3。当客户端有任务需要执行时,可 以在YARN中调用对应的资源队列执行。
[0077] 图8示出根据本公开一实施例的YARN资源分配装置的框图,如图8所示, 所述YARN资源分配装置包括:
[0078] 启动模块10,用于启动跨语言的服务部署框架Thrift server;
[0079] 连接请求接收模块20,用于接收至少一个客户端发送的连接请求;
[0080] Spark进程启动模块30,用于对于任一所述客户端:根据所述连接请求 启动与所述客户端对应的Spark进程,以使所述Spark进程向YARN请求资源;
[0081] 注册请求消息接收模块40,用于在所述Spark进程向YARN请求资源成功 后,接收所述Spark进程的注册请求;
[0082] 连接成功消息发送模块50,用于在所述Spark进程注册成功后,通知所 述客户端连接成功。
[0083] 在一种可能的实现方式中,所述Spark进程启动模块30,包括:
[0084] 第一Spark进程启动子模块,用于根据所述连接请求调用Spark Context 接口,通过启动命令启动与所述客户端对应的Spark进程。
[0085] 在一种可能的实现方式中,所述启动命令包括客户端标识和Thrift server 的通信地址,以使所述Spark进程启动后获取并记录所述客户端标识和Thrift server的通信地址;所述注册请求消息接收模块40,包括:
[0086] 第一注册请求消息接收子模块,用于接收所述Spark进程根据所述Thrift server的通信地址发送的注册请求,所述注册请求中携带所述客户端标识。
[0087] 在一种可能的实现方式中,所述装置还包括:
[0088] 映射关系建立模块,用于在所述Spark进程注册成功后,根据所述客户 端标识建立所述客户端与所述Spark进程的映射关系。
[0089] 在一种可能的实现方式中,所述装置还包括:
[0090] 任务接收模块,用于接收所述客户端发送的任务;
[0091] 任务发送模块,用于根据客户端与Spark进程之间的映射关系,将所述 任务发送至与所述客户端对应的Spark进程;
[0092] 执行结果发送模块,用于向所述Spark进程获取任务的执行结果,并将 所述执行结果发送至所述客户端。
[0093] 在一种可能的实现方式中,所述执行结果发送模块,包括:
[0094] 执行状态获取子模块,用于向所述Spark进程获取所述任务的执行状态;
[0095] 第一执行结果发送子模块,用于根据所述执行状态确定所述任务的执行 结果,并将所述执行结果发送至客户端。
[0096] 以上已经描述了本公开的各实施例,上述说明是示例性的,并非穷尽性 的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和 精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显 而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际 应用或对市场中的技术的技术改进,或者使本技术领域的其它普通技术人员 能理解本文披露的各实施例。