用户任务的处理方法、装置、电子设备和计算机可读介质与流程

文档序号:21361542发布日期:2020-07-04 04:35阅读:182来源:国知局
用户任务的处理方法、装置、电子设备和计算机可读介质与流程

本发明涉及计算机的技术领域,尤其是涉及一种用户任务的处理方法、装置、电子设备和计算机可读介质。



背景技术:

apachespark是一个开源集群运算框架,最初是由加州大学柏克莱分校amplab所开发。spark本身是支持认证的,即需要使用spark的使用者,需要通过用户名和密码的方式进行登录才能正常使用,但是,不同的用户有不同的文件访问权限,因此需要在spark运行的时候,需要设置用户权限。spark本身是支持用户权限认证,但是当多个用户需要同时提交任务到一个spark应用中的时候。由于,spark无法知道是哪个用户提交的任务,因此,spark不能认证多个用户权限,也就是说spark本身不支持多用户提交。

在现有技术中,可以通过对各目标数据库进行不同维度的分权控制,各sparksql引擎在获取用户输入的语句时,判断其是否具有执行该语句的权限,当多用户协同开发时,每个用户被赋予的权限不同,各自只能在自身所被赋予的权限内操作,实现了更细粒度的按需的保证用户各自数据的安全。该方法需要单独简历数据库,管理权限,并且无法和hadoop的权限系统集成。同时每次请求需要和全量信息比对,效率低下。本专利的方法直接集成hadoop权限,且执行效率较高。

除此之外,还可以利用spark任务间调度的特性,对于一些耗时较长的任务,给予用户是否终止该任务的权限,能够让web用户终止正在运行的spark任务。该方法启动了多个进程来启动多个sparkapp,其实并没有解决spark应用中的多用户权限的问题。



技术实现要素:

有鉴于此,本发明的目的在于提供一种用户任务的处理方法、装置、电子设备和计算机可读介质,以缓解了传统的spark应用不支持多用户提交任务的技术问题。

第一方面,本发明实施例提供了一种用户任务的处理方法,应用于spark的驱动节点,所述方法包括:获取到目标用户通过客户端提交的spark任务;在获取到所述spark任务之后,通过超级用户模拟所述目标用户;其中,在将超级用户模拟目标用户之后,允许超级用户利用目标用户的身份信息向spark工作节点提交spark任务;控制所述超级用户以所述目标用户的身份向spark工作节点提交所述spark任务;以使所述spark工作节点对所述spark任务进行处理。

进一步地,控制所述超级用户以所述目标用户的身份向spark工作节点提交所述spark任务包括:获取所述目标用户的用户信息;将所述目标用户的用户信息作为所述spark任务的任务属性添加到所述spark任务的任务队列中,得到目标任务队列;向spark工作节点发送所述目标任务队列,以实现所述超级用户以所述目标用户的身份向spark工作节点提交所述spark任务。

进一步地,所述方法还包括:在获取到目标用户通过客户端提交的spark任务之前,对所述超级用户进行身份认证。

进一步地,对所述超级用户进行身份认证包括:向认证服务器发送身份认证请求;其中,所述身份认证请求中包含所述超级用户的身份信息;获取所述认证服务器基于所述身份认证请求返回的第一认证凭证信息,并根据所述第一认证凭证信息认证所述超级用户的身份信息。

进一步地,通过超级用户模拟所述目标用户包括:向认证服务器发送第一模拟认证请求,其中,所述第一模拟认证请求表示超级用户请求模拟为目标用户;获取所述认证服务器基于所述第一模拟认证请求反馈的第二认证凭证信息,并根据所述第二认证凭证信息模拟所述目标用户;其中,所述第二认证凭证信息为所述认证服务器在验证出所述目标用户存在的情况下发送的凭证信息。

进一步地,所述方法还包括:若所述目标用户不存在,则获取所述认证服务器基于所述模拟认证请求反馈的认证失败信息。

第二方面,本发明实施例提供了另一种用户任务的处理方法,应用于spark的工作节点,所述方法包括:获取spark的驱动节点发送的spark任务,其中,所述spark任务为spark的驱动节点在获取到目标用户通过客户端提交的spark任务之后,控制超级用户模拟所述目标用户,并以所述目标用户的身份向spark工作节点提交的spark任务;基于所述spark任务的任务内容对所述spark任务进行处理。

进一步地,基于所述spark任务的任务内容对所述spark任务进行处理包括:若确定出用于执行所述spark任务的任务数据未存储在所述spark的工作节点中,则向hdfs文件系统提交所述spark任务。

进一步地,获取spark的驱动节点发送的spark任务包括:获取所述spark的驱动节点发送的目标任务队列,其中,所述目标任务队列中包含用于表征所述spark任务的任务属性的所述目标用户的用户信息。

进一步地,向hdfs文件系统提交所述spark任务包括:对所述目标任务队列进行解析,得到所述目标用户的用户信息,并通过所述用户信息将所述超级用户模拟为所述目标用户;控制所述超级用户以所述目标用户的身份向所述hdfs文件系统提交所述spark任务;以使所述hdfs文件系统对所述spark任务进行处理。

进一步地,通过所述用户信息将所述超级用户模拟为所述目标用户包括:向认证服务器发送第二模拟认证请求,其中,所述第二模拟认证请求表示超级用户请求模拟为目标用户,且所述模拟认证请求中携带所述用户信息;获取所述认证服务器基于所述第二模拟认证请求反馈的第三认证凭证信息,并根据所述第三认证凭证信息模拟所述目标用户;其中,所述第三认证凭证信息为所述认证服务器在验证出所述目标用户存在的情况下发送的凭证信息。

第三方面,本发明实施例提供了一种用户任务的处理装置,设置于spark的驱动节点,所述装置包括:驱动节点获取单元,用于获取到目标用户通过客户端提交的spark任务;驱动节点模拟单元,用于在获取到所述spark任务之后,通过超级用户模拟所述目标用户;其中,在将超级用户模拟目标用户之后,允许超级用户利用目标用户的身份信息向spark工作节点提交spark任务;驱动节点控制单元,用于控制所述超级用户以所述目标用户的身份向spark工作节点提交所述spark任务;以使所述spark工作节点对所述spark任务进行处理。

第四方面,本发明实施例提供了一种用户任务的处理装置,设置于spark的工作节点,所述装置包括:工作节点获取单元,用于获取spark的驱动节点发送的spark任务,其中,所述spark任务为spark的驱动节点在获取到目标用户通过客户端提交的spark任务之后,控制超级用户模拟所述目标用户,并以所述目标用户的身份向spark工作节点提交的spark任务;工作节点处理单元,用于基于所述spark任务的任务内容对所述spark任务进行处理。

第五方面,本发明实施例提供了一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述第一方面或者第二方面中任一项所述的方法的步骤。

第六方面,本发明实施例提供了一种具有处理器可执行的非易失的程序代码的计算机可读介质,所述程序代码使所述处理器执行上述第一方面或者第二方面中任一项所述的方法的步骤。

在本发明实施例中,首先,获取到目标用户通过客户端提交的spark任务;然后,在获取到spark任务之后,通过超级用户模拟目标用户;最后,控制超级用户以目标用户的身份向spark工作节点提交spark任务;以使spark工作节点对spark任务进行处理。在本实施例中,采用超级用户模拟目标用户的方式,能够保证spark启动一个应用就能够为多用户提供服务,且能够高效的利用计算机资源,进而缓解了传统的spark应用不支持多用户提交任务的技术问题,从而实现了spark应用支持多用户提交任务的技术效果。

本发明的其他特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点在说明书、权利要求书以及附图中所特别指出的结构来实现和获得。

为使本发明的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。

附图说明

为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是根据本发明实施例的第一种用户任务的处理方法的流程图;

图2是根据本发明实施例的第二种用户任务的处理方法的流程图;

图3是根据本发明实施例的第三种用户任务的处理方法的流程图;

图4是根据本发明实施例的第四种用户任务的处理方法的流程图

图5是根据本发明实施例的第一种用户任务的处理装置的示意图;

图6是根据本发明实施例的第二种用户任务的处理装置的示意图;

图7是根据本发明实施例的一种电子设备的结构示意图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合附图对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

实施例一:

根据本发明实施例,提供了一种用户任务的处理方法的实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。

图1是根据本发明实施例的一种用户任务的处理方法的流程图,如图1所示,该方法包括如下步骤s102至步骤s106,需要说明的是,下述步骤可以应用在spark的驱动节点driver中。

步骤s102,获取到目标用户通过客户端提交的spark任务。

在本实施例中,目标用户在通过客户端向spark提交spark任务之后,spark的驱动节点driver端(以下均简称为driver端)获取该spark任务。

步骤s104,在获取到所述spark任务之后,通过超级用户模拟所述目标用户;其中,在将超级用户模拟目标用户之后,允许超级用户利用目标用户的身份信息向spark工作节点提交spark任务。

在本申请中,driver端在获取到spark任务之后,就可以将超级用户模拟为目标用户。其中,用户模拟是指具有完整模拟权限的用户都可模拟所属系统中的任何其他用户并执行任意操作,在操作记录中,模拟用户(超级用户)会显示为其本人(例如,目标用户)。

也就是说,在本申请中,在将超级用户模拟为目标用户之后,就可以利用目标用户的身份向spark工作节点(以下简称为worker端)提交spark任务,以使worker端对该spark任务进行处理。

步骤s106,控制所述超级用户以所述目标用户的身份向spark工作节点提交所述spark任务;以使所述spark工作节点对所述spark任务进行处理。

需要说明的是,上述步骤可以应用在spark的驱动节点driver中。进一步需要说明的是,针对每个向spark提交spark任务的用户,都可以采用上述步骤所描述的过程对spark任务进行处理。在下述实施例中,仅以一个目标用户为例来进行介绍。

在本发明实施例中,首先,获取到目标用户通过客户端提交的spark任务;然后,在获取到spark任务之后,通过超级用户模拟目标用户;最后,控制超级用户以目标用户的身份向spark工作节点提交spark任务;以使spark工作节点对spark任务进行处理。在本实施例中,采用超级用户模拟目标用户的方式,能够保证spark启动一个应用就能够为多用户提供服务,且能够高效的利用计算机资源,进而缓解了传统的spark应用不支持多用户提交任务的技术问题,从而实现了spark应用支持多用户提交任务的技术效果。

在本实施例的一个可选实施方式中,在获取到目标用户通过客户端提交的spark任务之前,还可以对所述超级用户进行身份认证。其中,可以通过认证服务器(例如,as-authentication认证服务器)来对超级用户进行身份认证,具体过程描述如下:

首先,向认证服务器发送身份认证请求;其中,所述身份认证请求中包含所述超级用户的身份信息;

然后,获取所述认证服务器基于所述身份认证请求返回的第一认证凭证信息,并根据所述第一认证凭证信息认证所述超级用户的身份信息。

在本实施例中,driver端可以向as-authenticationserver认证服务器发送身份认证请求,其中,在该身份认证请求中,携带超级用户的身份信息。as-authenticationserver认证服务器在获取到该身份认证请求之后,基于超级用户的身份信息对该超级用户进行身份认证,在认证通过的情况下,向driver端反馈第一认证凭证信息,其中,该第一认证凭证信息表示对超级用户认证通过。driver端在获取到该第一认证凭证信息之后,在driver端的主线程中登陆超级用户,从而完成超级用户的初始化。

需要说明的是,身份认证请求为kerberos认证请求。kerberos是一种计算机网络授权协议,用来在非安全网络中,对个人通信以安全的手段进行身份认证。kerberos可以用于防止窃听、防止重放攻击、保护数据完整性等场合,是一种应用对称密钥体制进行密钥管理的系统。kerberos的扩展产品也使用公开密钥加密方法进行认证。

在超级用户身份认证通过之后,如果driver端获取到目标用户通过客户端提交的spark任务,则通过超级用户模拟目标用户,从而使得超级用户利用目标用户的身份信息向spark工作节点提交spark任务。

在一个可选的实施方式中,步骤s104,通过超级用户模拟所述目标用户包括如下过程:

(1)、向认证服务器发送第一模拟认证请求,其中,所述第一模拟认证请求表示超级用户请求模拟为目标用户;

(2)、获取所述认证服务器基于所述第一模拟认证请求反馈的第二认证凭证信息,并根据所述第二认证凭证信息模拟所述目标用户;其中,所述第二认证凭证信息为所述认证服务器在验证出所述目标用户存在的情况下发送的凭证信息。

在本实施例中,driver端首先向认证服务器(例如,as-authenticationserver认证服务器)发送第一模拟认证请求,其中,在该第一模拟认证请求中,携带目标用户的身份信息,以及表示超级用户请求模拟为目标用户的相关信息。as-authenticationserver认证服务器在获取到该第一模拟认证请求之后,基于目标用户的身份信息验证目标用户是否存在。若所述目标用户不存在,则获取所述认证服务器基于所述模拟认证请求反馈的认证失败信息。如果验证出目标用户存在,则向driver端反馈第二认证凭证信息。driver端在获取到该第二认证凭证信息之后,就可以确认能够将超级用户模拟为目标用户。

在本实施例中,利用超级用户模拟目标用户,能够使得spark的driver端在执行spark任务时,利用目标用户的账号(即,利用目标用户的身份信息)来向worker端提交spark任务。

通过上述描述可知,在本申请中,在spark中集成了kerberos权限,在spark应用中模拟普通用户请求,从而提供了spark多用户请求访问的方案。同时,本申请采用用户模拟的方式,通过直接将kerberos认证集成到spark中,大大降低了用户接入的成本。

在本申请中,在通过超级用户模拟目标用户之后,就可以控制超级用户已目标用户的身份向spark工作节点提交所述spark任务;以使spark工作节点对spark任务进行处理。

在本实施例的另一个可选的实施方式中,步骤s106,控制所述超级用户以所述目标用户的身份向spark工作节点提交所述spark任务包括如下步骤:

(1)、获取所述目标用户的用户信息;

(2)、将所述目标用户的用户信息作为所述spark任务的任务属性添加到所述spark任务的任务队列中,得到目标任务队列;

(3)、向spark工作节点发送所述目标任务队列,以实现所述超级用户以所述目标用户的身份向spark工作节点提交所述spark任务。

在本实施例中,spark的driver端获取当前执行的线程的认证用户(即,目标用户)的用户信息(例如,用户名);然后,将目标用户的用户信息作为spark任务的任务属性添加到spark任务的任务队列中,从而得到目标任务队列。将目标用户的用户信息,添加到spark任务的任务队列中,是为了下一步将用户信息传给worker,因为worker和driver分别在不同的服务器或者线程中,因此在driver端模拟的普通账号,需要通过添加的spark任务中,在传输给worker端。worker端在获取到该spark任务之后,基于spark任务的任务属性对所述spark任务进行处理。其中,若确定出用于执行所述spark任务的任务数据未存储在所述spark的工作节点中,则向hdfs文件系统提交所述spark任务。

具体地,向hdfs文件系统提交所述spark任务的过程可以描述如下:

首先,对所述目标任务队列进行解析,得到所述目标用户的用户信息。然后,向认证服务器发送第二模拟认证请求,其中,所述第二模拟认证请求表示超级用户请求模拟为目标用户,且所述模拟认证请求中携带所述用户信息;如果认证服务器验证出目标用户存在,则向worker端反馈第三认证凭证信息。worker端获取所述认证服务器基于所述第二模拟认证请求反馈的第三认证凭证信息,并根据所述第三认证凭证信息模拟所述目标用户;其中,所述第三认证凭证信息为所述认证服务器在验证出所述目标用户存在的情况下发送的凭证信息。在将超级用户模拟为目标用户之后,就可以控制所述超级用户以所述目标用户的身份向所述hdfs文件系统提交所述spark任务;以使所述hdfs文件系统对所述spark任务进行处理。

通过上述描述可知,本申请利用超级用户模拟普通用户的方式,避免了管理keytab的复杂性;用户模拟的执行速度优于普通用户直接登录;增加了维护性,因为后续新增的用户直接用户模拟即可,不需要在程序中新增keytab。本申请无需单独部署数据库,避免了自己开发权限系统的问题,减少了系统的复杂性的同时,提高了程序的易用性。

实施例二:

图2是根据本发明实施例的一种用户任务的处理方法的流程图,如图2所示,该方法包括如下步骤s202至步骤s204,需要说明的是,上述步骤可以应用在spark的驱动节点worker中:

步骤s202,获取spark的驱动节点发送的spark任务,其中,所述spark任务为spark的驱动节点在获取到目标用户通过客户端提交的spark任务之后,控制超级用户模拟所述目标用户,并以所述目标用户的身份向spark工作节点提交的spark任务。

步骤s204,基于所述spark任务的任务内容对所述spark任务进行处理。

在本发明实施例中,首先,获取spark的驱动节点发送的spark任务,其中,spark任务为spark的驱动节点在获取到目标用户通过客户端提交的spark任务之后,控制超级用户模拟普通用户,并以目标用户的身份向spark工作节点提交的spark任务;然后,基于所述spark任务的任务内容对所述spark任务进行处理。在本实施例中,采用超级用户模拟目标用户的方式,能够保证spark启动一个应用就能够为多用户提供服务,且能够高效的利用计算机资源,进而缓解了传统的spark应用不支持多用户提交任务的技术问题,从而实现了spark应用支持多用户提交任务的技术效果。

在本申请中,spark的驱动节点driver端在向worker端发送spark任务之前,对所述超级用户进行身份认证。其中,可以通过认证服务器(例如,as-authenticationserver认证服务器)来对超级用户进行身份认证,具体过程描述如下:

首先,向认证服务器发送身份认证请求;其中,所述身份认证请求中包含所述超级用户的身份信息;

然后,获取所述认证服务器基于所述身份认证请求返回的第一认证凭证信息,并根据所述第一认证凭证信息认证所述超级用户的身份信息。

在本实施例中,driver端可以向as-authenticationserver认证服务器发送身份认证请求,其中,在该身份认证请求中,携带超级用户的身份信息。as-authenticationserver认证服务器在获取到该身份认证请求之后,基于超级用户的身份信息对该超级用户进行身份认证,在认证通过的情况下,向driver端反馈第一认证凭证信息,其中,该第一认证凭证信息表示对超级用户认证通过。driver端在获取到该第一认证凭证信息之后,在driver端的主线程中登陆超级用户,从而完成超级用户的初始化。

在完成超级用户的身份验证之后,如果driver端获取到spark任务之后,通过超级用户模拟所述目标用户,其中,模拟过程描述如下:

(1)、向认证服务器发送第一模拟认证请求,其中,所述第一模拟认证请求表示超级用户请求模拟为目标用户;

(2)、获取所述认证服务器基于所述第一模拟认证请求反馈的第二认证凭证信息,并根据所述第二认证凭证信息模拟所述目标用户;其中,所述第二认证凭证信息为所述认证服务器在验证出所述目标用户存在的情况下发送的凭证信息。

在本实施例中,driver端首先向认证服务器(例如,as-authenticationserver认证服务器)发送第一模拟认证请求,其中,在该第一模拟认证请求中,携带目标用户的身份信息,以及表示超级用户请求模拟为目标用户的相关信息。as-authenticationserver认证服务器在获取到该第一模拟认证请求之后,基于目标用户的身份信息验证目标用户是否存在。若所述目标用户不存在,则获取所述认证服务器基于所述模拟认证请求反馈的认证失败信息。如果验证出目标用户存在,则向driver端反馈第二认证凭证信息。driver端在获取到该第二认证凭证信息之后,就可以确认能够将超级用户模拟为目标用户。

在本实施例中,利用超级用户模拟目标用户,能够使得spark的driver端在执行spark任务时,利用目标用户的账号(即,利用目标用户的身份信息)来向worker端提交spark任务。

driver端在将超级用户模拟为目标用户之后,就可以控制所述超级用户以所述目标用户的身份向spark工作节点提交所述spark任务;以使所述spark工作节点对所述spark任务进行处理。

具体地,控制所述超级用户以所述目标用户的身份向spark工作节点提交所述spark任务包括如下步骤:

(1)、获取所述目标用户的用户信息;

(2)、将所述目标用户的用户信息作为所述spark任务的任务属性添加到所述spark任务的任务队列中,得到目标任务队列;

(3)、向spark工作节点发送所述目标任务队列,以实现所述超级用户以所述目标用户的身份向spark工作节点提交所述spark任务。

在本实施例中,spark的driver端获取当前执行的线程的认证用户(即,目标用户)的用户信息(例如,用户名);然后,将目标用户的用户信息作为spark任务的任务属性添加到spark任务的任务队列中,从而得到目标任务队列。将目标用户的用户信息,添加到spark任务的任务队列中,是为了下一步将用户信息传给worker,因为worker和driver分别在不同的服务器或者线程中,因此在driver端模拟的普通账号,需要通过添加的spark任务中,在传输给worker端。worker端在获取到该spark任务之后,基于spark任务的任务属性对所述spark任务进行处理。其中,若确定出用于执行所述spark任务的任务数据未存储在所述spark的工作节点中,则向hdfs文件系统提交所述spark任务。

需要说明的是,获取spark的驱动节点发送的spark任务包括:获取所述spark的驱动节点发送的目标任务队列,其中,所述目标任务队列中包含用于表征所述spark任务的任务属性的所述目标用户的用户信息。

在获取到spark的驱动节点发送的目标任务队列之后,就可以根据目标任务队列中的任务内容对spark任务进行处理。

具体地,若确定出用于执行所述spark任务的任务数据未存储在所述spark的工作节点中,则向hdfs文件系统提交所述spark任务。若确定出worker端能够执行该spark任务,则worker端对该spark任务进行处理。

在本实施例的一个可选实施方式中,向hdfs文件系统提交所述spark任务包括如下过程:

(1)、对所述目标任务队列进行解析,得到所述目标用户的用户信息,并通过所述用户信息将所述超级用户模拟为所述目标用户;

(2)、控制所述超级用户以所述目标用户的身份向所述hdfs文件系统提交所述spark任务;以使所述hdfs文件系统对所述spark任务进行处理。

在本申请中,worker端在获取到目标任务队列之后,对目标任务队列进行解析,得到目标用户的用户信息和spark任务的任务内容。之后,worker端就可以通过用户信息将超级用户模拟为目标用户。

可选地,通过所述用户信息将所述超级用户模拟为所述目标用户包括如下过程:

首先,向认证服务器发送第二模拟认证请求,其中,所述第二模拟认证请求表示超级用户请求模拟为目标用户,且所述模拟认证请求中携带所述用户信息;

然后,获取所述认证服务器基于所述第二模拟认证请求反馈的第三认证凭证信息,并根据所述第三认证凭证信息模拟所述目标用户;其中,所述第三认证凭证信息为所述认证服务器在验证出所述目标用户存在的情况下发送的凭证信息。

在本实施例中,worker端首先向认证服务器(例如,as-authenticationserver认证服务器)发送第二模拟认证请求,其中,在该第二模拟认证请求中,携带目标用户的身份信息,以及表示超级用户请求模拟为目标用户的相关信息。as-authenticationserver认证服务器在获取到该第二模拟认证请求之后,基于目标用户的身份信息验证目标用户是否存在。若所述目标用户不存在,则获取所述认证服务器基于第二模拟认证请求反馈的认证失败信息。如果验证出目标用户存在,则向worker端反馈第三认证凭证信息。worker端在获取到该第三认证凭证信息之后,就可以确认能够将超级用户模拟为目标用户。并控制超级用户以目标用户的身份向hdfs文件系统提交所述spark任务。其中,超级用户以目标用户的身份向hdfs文件系统提交所述spark任务可以表示为:向hdfs文件系统发送的spark任务的任务队列中携带目标用户的身份信息,此时,hdfs文件系统就可以认为该spark任务为目标用户提交的任务。

通过上述描述可知,在本申请中,在spark中集成了kerberos权限,在spark应用中模拟普通用户请求,从而提供了spark多用户请求访问的方案。同时,本申请采用用户模拟的方式,通过直接将kerberos认证集成到spark当中,大大降低了用户接入的成本。

通过上述描述可知,本申请利用超级用户模拟普通用户的方式,避免了管理keytab的复杂性;用户模拟的执行速度优于普通用户直接登录;增加了维护性,因为后续新增的用户直接用户模拟即可,不需要在程序中新增keytab。本申请无需单独部署数据库,避免了自己开发权限系统的问题,减少了系统的复杂性的同时,提高了程序的易用性。

实施例三:

图3是根据本发明实施例的一种用户任务的处理方法的流程图,如图3所示,该方法包括如下步骤:

1)、在spark中driver端,用超级用户进行kerberos认证;该步骤是为了让spark程序,在driver的主线程中,登陆超级用户,进行初始化。

如图4所示,driver端可以向as-authenticationserver认证服务器发送身份认证请求,其中,在该身份认证请求中,携带超级用户的身份信息。as-authenticationserver认证服务器在获取到该身份认证请求之后,基于超级用户的身份信息对该超级用户进行身份认证,在认证通过的情况下,向driver端反馈第一认证凭证信息,其中,该第一认证凭证信息表示对超级用户认证通过。driver端在获取到该第一认证凭证信息之后,在driver端的主线程中登陆超级用户,从而完成超级用户的初始化。

2)、目标用户(比如小王)在客户端提交spark任务。

3)、在spark的driver端,用超级用户模拟目标用户(比如小王);该步骤使得,在spark执行spark任务的时候,用某个用户的身份来提交作业。

如图4所示,driver端首先向认证服务器(例如,as-authenticationserver认证服务器)发送第一模拟认证请求,其中,在该第一模拟认证请求中,携带目标用户的身份信息,以及表示超级用户请求模拟为目标用户的相关信息。as-authenticationserver认证服务器在获取到该第一模拟认证请求之后,基于目标用户的身份信息验证目标用户是否存在。若所述目标用户不存在,则获取所述认证服务器基于所述模拟认证请求反馈的认证失败信息。如果验证出目标用户存在,则向driver端反馈第二认证凭证信息。driver端在获取到该第二认证凭证信息之后,就可以确认能够将超级用户模拟为目标用户。

4)、在driver端,spark在调度提交的作业时,获取当前执行的线程的认证用户小王。然后,将用户名小王,添加到sparktask(任务队列)的任务属性当中。将目标用户的用户名,添加到sparktask中(任务队列),是为了下一步将用户信息传给worker端,因为worker端和driver端分别在不同的服务器或者线程中,因此在driver端模拟的普通账号,需要通过添加的目标任务队列中,在传输给worker端。

5)、在worker端,sparkexecutor(分布式执行器)在获取到目标任务队列的时候,解析目标任务队列,并获取用户名属性(例如,小王);

6)、在worker端sparkexecutor(分布式执行器)在执行任务前,再用超级用户模拟该用户(小王)执行任务。在executor执行任务的时候,需要模拟普通用户的身份,来执行任务,这样才能保证用户执行权限。

如图4所示,worker端首先向认证服务器(例如,as-authenticationserver认证服务器)发送第二模拟认证请求,其中,在该第二模拟认证请求中,携带目标用户的身份信息,以及表示超级用户请求模拟为目标用户的相关信息。as-authenticationserver认证服务器在获取到该第二模拟认证请求之后,基于目标用户的身份信息验证目标用户是否存在。若所述目标用户不存在,则获取所述认证服务器基于第二模拟认证请求反馈的认证失败信息。如果验证出目标用户存在,则向worker端反馈第三认证凭证信息。worker端在获取到该第三认证凭证信息之后,就可以确认能够将超级用户模拟为目标用户。如图4所示,控制超级用户以目标用户的身份向hdfs文件系统提交所述spark任务。其中,超级用户以目标用户的身份向hdfs文件系统提交所述spark任务可以表示为:向hdfs文件系统发送的spark任务的任务队列中携带目标用户的身份信息,此时,hdfs文件系统就可以认为该spark任务为目标用户提交的任务。

7)、hdfs文件系统执行任务,最终,spark通知客户端任务执行完成。

通过上述描述可知,本申请利用超级用户模拟普通用户的方式,避免了管理keytab的复杂性;用户模拟的执行速度优于普通用户直接登录;增加了维护性,因为后续新增的用户直接用户模拟即可,不需要在程序中新增keytab。本申请无需单独部署数据库,避免了自己开发权限系统的问题,减少了系统的复杂性的同时,提高了程序的易用性。

实施例四:

本发明实施例还提供了一种用户任务的处理装置,该用户任务的处理装置主要用于执行本发明实施例上述内容所提供的用户任务的处理方法,以下对本发明实施例提供的用户任务的处理装置做具体介绍。

图5是根据本发明实施例的一种用户任务的处理装置的示意图,如图2所示,该用户任务的处理装置主要包括驱动节点获取单元51,驱动节点模拟单元52和驱动节点控制单元53,其中:

驱动节点获取单元51,用于获取到目标用户通过客户端提交的spark任务;

驱动节点模拟单元52,用于在获取到所述spark任务之后,通过超级用户模拟所述目标用户;其中,在将超级用户模拟目标用户之后,允许超级用户利用目标用户的身份信息向spark工作节点提交spark任务;

驱动节点控制单元53,用于控制所述超级用户以所述目标用户的身份向spark工作节点提交所述spark任务;以使所述spark工作节点对所述spark任务进行处理。

在本发明实施例中,首先,获取到目标用户通过客户端提交的spark任务;然后,在获取到spark任务之后,通过超级用户模拟目标用户;最后,控制超级用户以目标用户的身份向spark工作节点提交spark任务;以使spark工作节点对spark任务进行处理。在本实施例中,采用超级用户模拟目标用户的方式,能够保证spark启动一个应用就能够为多用户提供服务,且能够高效的利用计算机资源,进而缓解了传统的spark应用不支持多用户提交任务的技术问题,从而实现了spark应用支持多用户提交任务的技术效果。

可选地,驱动节点控制单元用于:获取所述目标用户的用户信息;将所述目标用户的用户信息作为所述spark任务的任务属性添加到所述spark任务的任务队列中,得到目标任务队列;向spark工作节点发送所述目标任务队列,以实现所述超级用户以所述目标用户的身份向spark工作节点提交所述spark任务。

可选地,该装置还用于:在获取到目标用户通过客户端提交的spark任务之前,对所述超级用户进行身份认证。

可选地,该装置还用于:向认证服务器发送身份认证请求;其中,所述身份认证请求中包含所述超级用户的身份信息;获取所述认证服务器基于所述身份认证请求返回的第一认证凭证信息,并根据所述第一认证凭证信息认证所述超级用户的身份信息。

可选地,驱动节点模拟单元用于:向认证服务器发送第一模拟认证请求,其中,所述第一模拟认证请求表示超级用户请求模拟为目标用户;获取所述认证服务器基于所述第一模拟认证请求反馈的第二认证凭证信息,并根据所述第二认证凭证信息模拟所述目标用户;其中,所述第二认证凭证信息为所述认证服务器在验证出所述目标用户存在的情况下发送的凭证信息。

可选地,该装置还用于:若所述目标用户不存在,则获取所述认证服务器基于所述模拟认证请求反馈的认证失败信息。

实施例五:

图6是根据本发明实施例的一种用户任务的处理装置的示意图,如图6所示,该用户任务的处理装置主要包括工作节点获取单元61和工作节点处理单元62,其中:

工作节点获取单元61,用于获取spark的驱动节点发送的spark任务,其中,所述spark任务为spark的驱动节点在获取到目标用户通过客户端提交的spark任务之后,控制超级用户模拟所述目标用户,并以所述目标用户的身份向spark工作节点提交的spark任务;

工作节点处理单元62,用于基于所述spark任务的任务内容对所述spark任务进行处理。

在本发明实施例中,首先,获取spark的驱动节点发送的spark任务,其中,spark任务为spark的驱动节点在获取到目标用户通过客户端提交的spark任务之后,控制超级用户模拟普通用户,并以目标用户的身份向spark工作节点提交的spark任务;然后,基于所述spark任务的任务内容对所述spark任务进行处理。在本实施例中,采用超级用户模拟目标用户的方式,能够保证spark启动一个应用就能够为多用户提供服务,且能够高效的利用计算机资源,进而缓解了传统的spark应用不支持多用户提交任务的技术问题,从而实现了spark应用支持多用户提交任务的技术效果。

可选地,工作节点处理单元用于:若确定出用于执行所述spark任务的任务数据未存储在所述spark的工作节点中,则向hdfs文件系统提交所述spark任务。

可选地,工作节点获取单元用于:获取spark的驱动节点发送的spark任务包括:获取所述spark的驱动节点发送的目标任务队列,其中,所述目标任务队列中包含用于表征所述spark任务的任务属性的所述目标用户的用户信息。

可选地,工作节点获取单元还用于:对所述目标任务队列进行解析,得到所述目标用户的用户信息,并通过所述用户信息将所述超级用户模拟为所述目标用户;控制所述超级用户以所述目标用户的身份向所述hdfs文件系统提交所述spark任务;以使所述hdfs文件系统对所述spark任务进行处理。

可选地,工作节点获取单元还用于:向认证服务器发送第二模拟认证请求,其中,所述第二模拟认证请求表示超级用户请求模拟为目标用户,且所述模拟认证请求中携带所述用户信息;获取所述认证服务器基于所述第二模拟认证请求反馈的第三认证凭证信息,并根据所述第三认证凭证信息模拟所述目标用户;其中,所述第三认证凭证信息为所述认证服务器在验证出所述目标用户存在的情况下发送的凭证信息。

实施例六:

本发明实施例所提供的装置,其实现原理及产生的技术效果和前述方法实施例相同,为简要描述,装置实施例部分未提及之处,可参考前述方法实施例中相应内容。

参见图7,本发明实施例还提供一种电子设备100,包括:处理器70,存储器71,总线72和通信接口73,所述处理器70、通信接口73和存储器71通过总线72连接;处理器70用于执行存储器71中存储的可执行模块,例如计算机程序。

其中,存储器71可能包含高速随机存取存储器(ram,randomaccessmemory),也可能还包括非不稳定的存储器(non-volatilememory),例如至少一个磁盘存储器。通过至少一个通信接口73(可以是有线或者无线)实现该系统网元与至少一个其他网元之间的通信连接,可以使用互联网,广域网,本地网,城域网等。

总线72可以是isa总线、pci总线或eisa总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图7中仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。

其中,存储器71用于存储程序,所述处理器70在接收到执行指令后,执行所述程序701,前述本发明实施例任一实施例揭示的流过程定义的装置所执行的方法可以应用于处理器70中,或者由处理器70实现。

处理器70可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器70中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器70可以是通用处理器,包括中央处理器(centralprocessingunit,简称cpu)、网络处理器(networkprocessor,简称np)等;还可以是数字信号处理器(digitalsignalprocessing,简称dsp)、专用集成电路(applicationspecificintegratedcircuit,简称asic)、现成可编程门阵列(field-programmablegatearray,简称fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本发明实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器71,处理器70读取存储器71中的信息,结合其硬件完成上述方法的步骤。

另外,在本发明实施例的描述中,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。

在本发明的描述中,需要说明的是,术语“中心”、“上”、“下”、“左”、“右”、“竖直”、“水平”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。此外,术语“第一”、“第二”、“第三”仅用于描述目的,而不能理解为指示或暗示相对重要性。

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

在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。

所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。

最后应说明的是:以上所述实施例,仅为本发明的具体实施方式,用以说明本发明的技术方案,而非对其限制,本发明的保护范围并不局限于此,尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1