首页> 中国专利> 一种混合语言任务执行方法、装置及集群

一种混合语言任务执行方法、装置及集群

摘要

本发明实施例提供了一种混合语言任务执行方法、装置及集群,其中,所述方法应用于集群,所述方法包括:获取待执行的任务,将所述待执行的任务划分为至少两个子任务;其中,不同的子任务采用不同编程语言的代码进行编写;判断所述子任务中代码的语言类型;采用与所述子任务中代码的语言类型对应的方式执行所述子任务;将执行结果存储到Java虚拟机,以使后续计算时从所述Java虚拟机中读取所述执行结果。本发明实施例提供的技术方案可以将一个任务中采用多种语言进行编写,可以克服单语言实现分布式任务的功能局限性,可以实现更多的业务功能。

著录项

  • 公开/公告号CN110109748A

    专利类型发明专利

  • 公开/公告日2019-08-09

    原文格式PDF

  • 申请/专利权人 星环信息科技(上海)有限公司;

    申请/专利号CN201910425952.0

  • 发明设计人 刘铖;

    申请日2019-05-21

  • 分类号G06F9/48(20060101);

  • 代理机构11332 北京品源专利代理有限公司;

  • 代理人孟金喆

  • 地址 200233 上海市徐汇区虹漕路88号B栋11-12楼

  • 入库时间 2024-02-19 12:27:16

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2020-03-17

    授权

    授权

  • 2019-09-03

    实质审查的生效 IPC(主分类):G06F9/48 申请日:20190521

    实质审查的生效

  • 2019-08-09

    公开

    公开

说明书

技术领域

本发明实施例涉及分布式技术领域,尤其涉及一种混合语言任务执行方法、装置及集群。

背景技术

集群是由一些互相连接在一起的计算机构成的一个并行或分布式系统,集群中的单个计算机通常称为节点,通常通过局域网连接,但也有其它的可能连接方式。集群计算机通常用来改进单个计算机的计算速度和/或可靠性。

分布式计算框架是用于处理大数据的分布式系统的运行和编程框架,例如,Storm用于处理高速、大型数据流的分布式实时计算系统,为Hadoop添加了可靠的实时数据处理功能;Spark采用了内存计算,从多迭代批处理出发,允许将数据载入内存作反复查询,此外还融合数据仓库,流处理和图形计算等多种计算范式。Spark构建在Hadoop分布式文件系统(HDFS)上,能与Hadoop很好的结合,其中,Spark有多个版本,例如有Spark1、Spark2等。

目前,分布式计算框架可以支持多种语言,例如,Spark2可以支持Python语言,也可以支持R语言,也就是说Spark2可以支持分布式执行Python语言的任务,也可以支持分布式执行R语言的任务。但是现有技术中,由于每种语言在实现业务上具有一定的局限性,需要多语言混合实现任务才能满足用户的需求,但是分布式计算框架仅仅可以支持分布式执行单语言的任务,并不支持分布式执行混合语言的任务,从而导致分布式执行单语言的任务在实现业务上具有一定的局限性,无法实现一些特定的功能,从而不能满足用户的需求。

发明内容

本发明实施例提供一种混合语言任务执行方法、装置及集群,可以克服执行单语言任务实现业务的局限性,可以实现更多的业务功能。

第一方面,本发明实施例提供了一种混合语言任务执行方法,所述方法应用于集群,所述方法包括:

获取待执行的任务,将所述待执行的任务划分为至少两个子任务;

其中,不同的子任务采用不同编程语言的代码进行编写;

判断所述子任务中代码的语言类型;

采用与所述子任务中代码的语言类型对应的方式执行所述子任务;

将执行结果存储到Java虚拟机,以使后续计算时从所述Java虚拟机中读取所述执行结果。

第二方面,本发明实施例还提供了一种混合语言任务执行装置,其特征在于,所述装置应用于集群,所述装置包括:

获取模块,用于获取待执行的任务,将所述待执行的任务划分为至少两个子任务;其中,不同的子任务采用不同编程语言的代码进行编写;

判断模块,用于判断所述子任务中代码的语言类型;

执行模块,用于采用与所述子任务中代码的语言类型对应的方式执行所述子任务;

存储模块,用于将执行结果存储到Java虚拟机,以使后续计算时从所述Java虚拟机中读取所述执行结果。

第三方面,本发明实施例还提供了一种集群,包括本发明实施例提供的一种混合语言任务执行装置。

本发明实施例提供的技术方案,通过将任务划分成至少两个子任务,其中,不同子任务通过采用不同编程语言的代码进行编写,通过采用与子任务中代码的语言类型对应的方式执行子任务,即通过将任务划分成不同语言代码编写的子任务,采用与子任务中代码的语言类型对应的方式执行子任务,可以将一个待执行的任务中采用多种语言进行编写,可以克服运行单语言任务实现业务的局限性,可以实现更多的业务功能,通过将每个子任务的执行结果反馈给虚拟机进行存储,以使后续计算时从虚拟机中读取计算结果,从而避免了计算结果通过中间文件进行交互的情况,保证了处理结果的准确性和可控性。

附图说明

图1是本发明实施例提供的一种混合语言任务执行方法流程图;

图2是本发明实施例提供的一种混合语言任务执行方法流程图;

图3a是本发明实施例提供的一种混合语言任务执行方法流程图;

图3b是本发明实施例提供的一种执行除Python和R语言之外的子任务的方法流程图;

图3c是本发明实施例提供的一种混合语言任务执行方法流程图;

图4是本发明实施例提供的一种混合语言任务执行装置结构框图;

图5是本发明实施例提供的一种集群的结构示意图。

具体实施方式

下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。

图1是本发明实施例提供的一种混合语言任务执行方法的流程图,所述方法可以由一种混合语言任务执行装置来执行,所述装置可以由软件和/或硬件来实现,所述装置可以配置在集群中。所述方法可以应用于对大数据进行计算的场景中,具体的所述方法可以应用于对大数据进行多种方式计算的场景中。

本发明实施例以集群中配置有Spark2为例进行说明。可选的,集群中可以至少包括三台服务器,本发明实施例中的集群可以是hadoop集群。

其中,Spark2分布式计算框架充分利用集群的优势,相比单机计算,突破单机服务器对内存,CPU和存储的限制。采用分布式的计算方法,可以加速大数据的计算。传统单机计算,当业务和数据量提升时,单机资源容易出现瓶颈,伴随着频繁的垃圾回收(garbagecollection,gc)和写回磁盘的高输入输出IO,影响业务的功能和结果的正确性。而分布式的计算框架Spark2,可以横向扩展计算资源,可以自由的分配任务所需要的资源,根据所选资源,将任务分配到对应节点进行计算,结合spark2的分布式算法和特征工程,对数据进行分布式处理。

Spark2支持Scala、Python和R语言,可以提供相关接口调用Spark2实现的分布式算法等。其中,Spark2的核心算法使用Scala语言实现,Python和R可以提供调用Scala实现的函数,对基础算法提供分布式的功能。同时,Spark2包含map,mappartion等函数,支持自定义实现分布式的功能。

在相关技术中,Spark2支持用户自定义实现分布式的功能,提供python,R和scala的接口,支持分布式执行单语言任务,但是不支持分布式执行混合语言任务,导致在实现业务上具有一定的局限性,无法实现一些特定的功能。本发明实施例提供通过将任务划分成不同语言代码编写的子任务,采用与子任务中代码的语言类型对应的方式执行子任务,可以将一个待执行的任务中采用多种语言进行编写,可以克服运行单语言任务实现业务的局限性,可以实现更多的业务功能。

如图1所示,本发明实施例提供的技术方案包括:

S110:获取待执行的任务,将所述待执行的任务划分为至少两个子任务;其中,不同的子任务采用不同语言的代码进行编写。

在本发明实施例中,用户设备可以与集群进行通信。可选的,用户设备上可以配置有与集群进行通信的系统,用户可以在该系统中采用代码编写任务。当用户编写任务时,可以采用不同的语言编写任务。在本发明实施例中,集群可以通过接口获取待执行的任务,将待执行的任务进行划分成至少两个子任务,具体的,可以根据待执行任务中的代码的标识将任务划分成子任务。例如,不同编程语言的子任务中代码的标识不同,可以根据代码中的标识将任务划分成至少两个子任务。S120:判断所述子任务中代码的语言类型。

在本发明实施例中,可选的,不同子任务的代码存储于不同的功能模块中;所述判断所述子任务中代码的语言类型,包括:基于子任务中代码所在功能模块的标识判断所述子任务中代码的语言类型。

其中,每个子任务的代码可以存储于不同的功能模块中,不同语言的编写的子任务存储的功能模块并不相同。每一个存储子任务的功能模块具有区别于其他功能模块的标识,通过功能模块的标识可以判断该功能模块中子任务中代码的语言类型。其中,判断子任务中代码的语言类型的方式并不局限与上述的方式,还可以是其他方式。

S130:采用与所述子任务中代码的语言类型对应的方式执行所述子任务。

在本发明实施例中,若子任务中代码的语言类型不相同,则执行子任务的方式也可以不相同。其中,子任务代码的语言类型可以是Python语言、R语言或者其他语言。执行子任务的具体方式可以参见下述实施例的介绍。

在本发明实施例中,执行至少两个子任务的方式可以串行执行,或者也可以并行执行。其中,当各个子任务之间具有依赖关系时,集群执行子任务的方式可以是串行执行,即按照依赖关系中的顺序执行各个子任务。当各个子任务之间不具有依赖关系时,集群执行子任务的方式可以并行执行,从而可以节省时间,提高效率。

S140:将执行结果存储到Java虚拟机,以使后续计算时从所述Java虚拟机中读取所述执行结果。

在本发明实施例中,执行结果在Java虚拟机中可以是Data Frame的形式进行存储。

在相关技术中,Spark2支持用户自定义实现分布式的功能,提供Python,R和Scala的接口,支持分布式执行单语言任务,但是不支持分布式执行混合语言任务,导致在实现业务上具有一定的局限性,无法实现一些特定的功能,从而不能满足用户的需求。为了满足用户的需求,往往需要采用不同的语言编写多个任务,由配置有Spark2的集群执行多个任务才能达到目的,当每个任务执行完毕后,每个任务的执行结果之间往往需要中间文件进行交互,导致处理结果的准确性和稳定性并不可控。本发明实施例中通过将任务划分成不同语言代码编写的子任务,采用与子任务中代码的语言类型对应的方式执行子任务,可以将一个待执行的任务中采用多种语言进行编写,即在Spark资源生存周期,多种语言可以混合使用,可以克服运行单语言任务实现业务的局限性,可以实现更多的业务功能;本发明实施例通过将任务进行划分成子任务,通过Java虚拟机存储执行结果从而避免了计算结果通过中间文件进行交互的情况,保证了处理结果的准确性和可控性。

需要说明的是,本发明实施例提供的方法并不局限应用于配置有Spark2分布式计算框架的集群,还可以应用于配置有其他分布式计算框架的集群中。

本发明实施例提供的一种任务执行方法,通过将任务划分成子任务,其中,子任务通过采用不同语言的代码进行编写,通过采用与子任务中代码的语言类型对应的方式执行子任务,即通过将任务划分成不同语言代码编写的子任务,采用与子任务中代码的语言类型对应的方式执行子任务,可以将一个待执行的任务中采用多种语言进行编写,可以克服运行单语言任务的功能局限性,可以实现更多的功能,本发明实施例通过将每个子任务的执行结果反馈给虚拟机进行存储,以使后续计算时从虚拟机中读取计算结果,从而避免了计算结果通过中间文件进行交互的情况,保证了处理结果的准确性和可控性。

图2是本发明实施例提供的一种混合语言任务执行方法流程图,在本发明实施例中,对“所述采用与所述子任务中代码的语言类型对应的方式执行所述子任务”进行了具体的细化,如图2所示,本发明实施例提供的技术方案,包括:

S210:获取待执行的任务,将所述待执行的任务划分为至少两个子任务,其中,不同的子任务采用不同编程语言的代码进行编写。

S220:判断所述子任务中代码的语言类型。

S230:若判断子任务中代码的语言类型为目标语言,建立目标语言接口与Java虚拟机的连接;其中,所述目标语言包括Python语言或者R语言,所述目标语言接口包括Pyspark接口或者SparkR接口。

在本发明实施例中,可选的,集群中配置有Spark2,其中,目标语言接口可以是执行设定功能的接口。

在本发明实施例中,在集群中,若子任务中代码的语言类型为Python语言,建立Pyspark接口与Java虚拟机的连接。若子任务中代码的语言类型为R语言,建立SparkR接口与Java虚拟机的连接。其中,Java虚拟机可以创建于集群中的主节点上,Java虚拟机可以用于存储数据或者变量。可选的,Pyspark接口与Java虚拟机通过gateway的方式进行连接。SparkR接口与所述Java虚拟机通过callJStatic的方式进行连接,其中,在SparkR接口与Java虚拟机建立连接之前,SparkR接口和Java虚拟机之间可以先进行Socket参数交互,从而实现SparkR接口与Java虚拟机的连接。

S240:通过所述目标语言接口读取虚拟机中存储的数据或者变量,并对读取的所述数据进行分布式计算,或者对所述变量对应的数据进行分布式计算,得到计算结果。

在本发明实施例中,若子任务中代码的语言是Python语言,建立Pyspark接口与Java虚拟机的连接,通过Pyspark接口基于子任务中的代码从虚拟机中存储的数据或者变量。具体的,子任务中的代码中包含变量,可以通过Pyspark接口基于子任务中代码中包含的变量从虚拟机中读取变量,由集群对变量对应的数据进行分布式计算。其中,当通过Pyspark接口从Java虚拟机中读取变量时,变量对应的数据可以存储在集群中的从节点中。对变量进行分布式计算的方法可以按照Spark2分布式计算框架所遵循的方法进行计算。

具体的,还可以通过Pyspark接口基于子任务中代码包含的变量从虚拟机中读取对应的数据,由集群对读取的数据进行分布式计算。例如,子任务代码中包含的变量为Table 1,则通过Pyspark接口可以从虚拟机中读取Table 1中的数据。其中,对数据进行分布式计算的方法可以按照Spark2分布式计算框架所遵循的方法进行计算。

S250:将所述计算结果反馈给所述Java虚拟机,以使后续计算时从所述Java虚拟机中读取所述计算结果。

在本发明实施例中,具体的,通过集群中的主节点对从节点分配计算任务,由从节点进行计算,得到计算结果,并将计算结果反馈给集群中的主节点,通过集群中的主节点将计算结果反馈给Java虚拟机,以使后续计算时从Java虚拟机中读取计算结果。可选的,计算结果在Java虚拟机中可以是Data Frame的形式进行存储。

S260:若通过集群中的主节点判断子任务中代码的语言类型为除所述目标语言之外的语言,通过所述主节点基于所述子任务中的代码从所述虚拟机中读取变量或者数据。

在本发明实施例中,可选的,若通过集群中的主节点判断子任务中代码的语言类型为除Python语言和R语言之外的语言,通过主节点基于子任务中的代码从Java虚拟机中读取变量或者数据。具体的,可以通过集群中的主节点从基于子任务中代码包含的变量,从Java虚拟机中读取变量。其中,当通过主节点从Java虚拟机中读取变量时,Java虚拟机中可能并不存在子任务代码包含的变量对应的数据,变量对应的数据可以存储在从节点中。或者具体的,可以通过主节点基于子任务代码中包含的变量,从Java虚拟机中读取该变量对应的数据,其中,变量对应的数据可以存储到Java虚拟机中。

S270:通过所述主节点对所述变量进行修改,将修改后的变量以及所述子任务中的代码发送至对应的从节点,或者对读取的数据进行划分,并将所述子任务中的代码以及划分的数据发送至从节点。

在本发明实施例的一个实施方式中,可选的,将修改后的变量以及所述子任务中的代码发送至对应的从节点,或者对读取的数据进行划分,并将所述子任务中的代码以及划分数据发送至从节点,包括:将修改后的变量以及所述子任务中的代码发送至分布式文件系统,或者将所述划分数据以及所述子任务中的代码发送至分布式文件系统;通过所述从节点从所述分布式文件系统中下载所述子任务中的代码以及对应的修改后的变量,或者下载所述子任务中的代码以及对应的划分数据。

其中,不同的从节点对应不同的修改后的变量,或者不同的从节点对应不同的划分数据。具体的,当集群执行对数据的计算任务时,集群中的主节点可以将任务分配给各个从节点进行执行,每个从节点可以执行对部分数据的计算任务。因此,当通过主节点基于所述子任务中的代码从所述虚拟机中读取变量或者数据后,需要通过主节点对读取的变量进行修改,或者对读取的数据进行划分,以使各个从节点对不同的数据进行计算,从而完成对读取的数据的计算,或者完成对读取的变量对应的数据的计算。

在本发明实施例中,分布式文件系统可以是Hadoop分布式文件系统,每个从节点从分布式文件系统下载子任务中的代码以及修改后的变量(或者划分数据)。每个从节点从分布式文件系统中下载修改后的变量或者划分数据的方法可以是:建立修改后的变量和从节点编号的对应关系,从节点可以根据该关系下载对应的修改后的变量;或者建立划分数据和从节点编号的对应关系,从节点可以根据该关系下载对应的划分数据。并且每个从节点从分布式文件系统中下载修改后的变量或者划分数据的方法还可以是其他方式。

S280:通过所述从节点运行所述子任务中的代码,对所述修改后的变量对应的数据进行计算,或者对划分数据进行计算,得到计算结果,并将所述计算结果反馈给所述主节点。

在本发明实施例中,通过从节点运行子任务中的代码,根据修改后的变量在从节点的存储位置查询对应的数据,并对数据进行计算。或者通过从节点对下载的划分数据进行计算,得到计算结果。其中,每个从节点的计算结果均反馈给主节点。

S290:通过主节点接收所述从节点反馈的计算结果,并将所述计算结果反馈给虚拟机。

对S260-S290的技术方案进行举例说明,若子任务是:对Table 1中的每行数据进行求和计算;其中,子代码中包含的变量是Table 1。通过集群中的主节点从Java虚拟机中基于子任务代码读取变量是Table 1,并将读取的变量进行修改。若修改后的变量可以是:Lines 1 to 100 of Table 1(表1的第1-100行),Lines 101 to 200 of Table 1(表1的第101-200行)。通过集群中的主节点将修改后的变量和子任务代码发送至分布式文件系统中,通过从节点1可以从分布式系统中下载子任务代码和修改后的变量(Lines 1 to 100of Table 1),以使从节点1运行子任务代码时,查询表1中第1-100行的数据,并对表1中第1-100行的每行数据进行求和;通过从节点2可以从分布式系统中下载子任务代码和修改后的变量(Lines 101 to 200 of Table 1),以使从节点2运行子任务代码时,基于下载的修改后的变量查询表1中第101-200行的数据,并对表1中第101-200行的每行数据进行求和计算,将每个节点的计算结果汇总,使得在主节点的JVM中能够得到计算结果供后续任务计算。

在相关技术中,集群中实现分布式计算时,分布式执行的任务的语言具有一定的局限性,例如,仅仅局限于Scala语言、R语言和Python语言,对于其他语言的任务,并不支持分布式执行,同时用户可以使用的语言也比较单一。本发明实施例提供的方法,当子任务中的代码的语言类型为除了目标语言之外的语言,可以通过主节点将子任务中的代码和数据分发给从节点,以使从节点运行子任务中的代码,以对分发的数据进行计算,从而实现分布式计算,可以克服分布式执行任务的语言的局限性,对于多种语言的任务均可以实现分布式执行任务,避免了用户对固定语言的依赖性,丰富了用户可使用的语言。

在相关技术中,有些任务的执行是由单机来完成,若需要分布式执行任务,需要重新修改单机中的程序,往往是需要将单机中的程序删除,重新编写程序,导致修改成分布式执行难度较大。本发明实施例提供的方法,通过对任务中代码语言类型的判断,通过采用对应的方式进行分布式执行任务,可以无需修改单机的程序,仅仅在原有程序的基础上添加本发明实施例提供的方法的代码程序,从而实现分布式执行任务的目的,可以节省时间,降低将单机计算修改成分布式计算的难度。

需要说明的是,本发明实施例示例性的将S210-S290组成一个实施例执行一种任务执行方法,但是本实施例仅仅是一种示例,在本发明其他实施例中,S210-S250可以组成一个实施例执行一种任务执行方法,或者S210、S220和S260-S290组成一个实施例执行一种任务执行方法。

图3a是本发明实施例提供的一种混合语言任务执行方法流程图,如图3a所示,本发明实施例提供的技术方案包括:

S310:初始化Spark资源。

在本发明实施例中,初始化Spark资源可以包括申请Spark资源。本发明实施例中,可以预先设置需要的Spark资源,预先申请Spark资源。

S320:JVM存储数据和变量。

在本发明实施例中,JVM可以存储申请的Spark资源列表,可以存储数据和变量,也可以存储了分布式计算过程中产生的中间数据和变量,或者也可以存储其他的一些数据。

S330:获取待执行的任务,将待执行的任务划分成至少两个子任务;其中,不同的子任务采用不同编程语言的代码进行编写。

S340:判断所述子任务中代码的语言类型。

S350:若判断子任务中代码的类型为Python语言,通过Pyspark接口基于gateway方式与JVM连接,从JVM中读取数据;并调用Pyspark的接口进行分布式计算,计算结果转存至JVM,以使Python资源释放。

在本发明实施例中,Pyspark实现了Spark对于Python的API,通过Pyspark用户可以编写运行在Spark之上的Python程序,从而利用到Spark分布式计算的特点。

相关技术中,通过原生的Pyspark采用java_gateway的方式调用Spark接口,为Python提供调用Scala语言实现的sparkcontext等方法初始化资源以及调用分布式算法实现分布式计算,相关技术中的上述方法在初始化资源时,每执行一个任务均需要初始化资源,处理机制繁琐,浪费时间。本发明实施例通过预先初始化资源,当执行的子任务中的代码语言是Python语言时,可以创建gatewayServer实例,允许集群中的Python程序与JVM通信,并将JVM中的数据、Spark对象进行序列化,以通过Pyspark接口从JVM读取数据或者Spark对象等,然后基于读取的数据等进行分布式计算,本发明实施例提供的先进行初始化资源,再进行分布式计算的方法,可以避免处理每个任务均需要进行初始化资源的情况,可以提高效率。

S360:若判断子任务中代码的类型为R语言,通过SparkR接口与JVM之间进行Socket参数交互,以使SparkR接口通过callJStatic与JVM连接,从JVM中读取数据;并进行SparkR计算,将计算结果转存,并释放资源。

在本发明实施例中,SparkR是一个R语言包,它提供了轻量级的方式使得可以在R语言中使用Apache Spark,SparkR实现了分布式的data frame,支持类似查询、过滤以及聚合的操作。

相关技术中,原生的SparkR采用callJStatic的方法调用scala语言定义的初始化资源的方法,完成对资源的初始化,然后通过调用初始化的资源进行分布式计算,将计算结果通过socket进行交互。相关技术中的上述方法每执行一个R语言的任务均需要初始化资源,处理机制繁琐,浪费时间。本发明实施例预先初始化资源,通过SparkR接口连接JVM,从而可以连接至已申请的资源,可以实现与JVM的数据交互,当集群获取数据之后,实现分布式计算,并将计算结果反馈给JVM,可以避免处理每个R语言任务均需要进行初始化资源的情况,可以提高效率。

S370:若判断子任务中的代码的语言类型为除Python语言和R语言之外的语言,通过主节点将子任务代码和数据进行分发,以使从节点单机运行子任务代码,单机执行对数据的计算,并反馈计算结果给主节点,以及通过主节点将计算结果进行整合,反馈给JVM。

在本发明实施例中,如图3b所示,通过主节点可以利用mapPartition的方法,将子任务代码和数据通过HDFS中转,分发至已申请资源中包括的每个从节点,以使从节点利用运行环境中的所支持的指令对数据继续计算(python2,python3,bash,rscript等),计算完毕后,通过主节点收集计算结果,并转换成spark dataFrame的形式供后续数据处理,存储和分布式算法等。

本发明实施例提供的混合语言任务执行方法也可以参考如图3c所示的流程。

图4是本发明实施例提供的一种混合语言任务执行装置结构框图,所述装置配置在集群中,所述装置包括:获取模块410、判断模块420、执行模块430和存储模块440。

获取模块410,用于获取待执行的任务,将所述待执行的任务划分为至少两个子任务;其中,不同的子任务采用不同编程语言的代码进行编写;

判断模块420,用于判断所述子任务中代码的语言类型;

执行模块430,用于采用与所述子任务中代码的语言类型对应的方式执行所述子任务;

存储模块440,用于将执行结果存储到Java虚拟机,以使后续计算时从所述Java虚拟机中读取所述执行结果。

可选的,执行模块430,用于:若判断子任务中代码的语言类型为目标语言,建立目标语言接口与Java虚拟机的连接;其中,所述目标语言包括Python语言或者R语言,所述目标语言接口包括Pyspark接口或者SparkR接口;

通过所述目标语言接口基于所述子任务中的代码从所述Java虚拟机中读取数据或者变量,对所述变量或数据进行分布式计算,得到计算结果。

可选的,所述Pyspark接口与虚拟机通过gateway的方式进行连接,SparkR接口与所述虚拟机通过callJStatic的方式进行连接。

可选的,执行模块430,用于:

若通过集群中的主节点判断子任务中代码的语言类型为除所述目标语言之外的语言,通过所述主节点基于所述子任务中的代码从所述Java虚拟机中读取变量或者数据;

通过所述主节点对所述变量进行修改,将修改后的变量以及所述子任务中的代码发送至对应的从节点,或者对读取的数据进行划分,并将所述子任务中的代码以及划分的数据发送至从节点;

通过所述从节点运行所述子任务中的代码,对所述修改后的变量对应的数据进行计算,或者对划分的数据进行计算,得到计算结果,并将所述计算结果反馈给所述主节点;

相应的,存储模块440,用于通过主节点接收所述从节点反馈的计算结果,并将所述计算结果反馈给虚拟机。

可选的,通过所述主节点对所述变量进行修改,将修改后的变量以及所述子任务中的代码发送至对应的从节点,或者对读取的数据进行划分,并将所述子任务中的代码以及划分数据发送至从节点,包括:

将修改后的变量以及所述子任务中的代码发送至分布式文件系统,或者将所述划分数据以及所述子任务中的代码发送至分布式文件系统;

通过所述从节点从所述分布式文件系统中下载所述子任务中的代码以及对应的修改后的变量,或者下载所述子任务中的代码以及对应的划分数据;其中,不同的从节点对应不同的修改后的变量,或者不同的从节点对应不同的划分数据。

可选的,不同子任务的代码存储于不同的功能模块中,判断模块420,用于基于子任务中代码所在功能模块的标识判断所述子任务中代码的语言类型。

可选的,所述集群为所述集群为Hadoop集群。

可选的,所述集群中配置有Spark2。

上述装置可执行本发明任意实施例所提供的方法,具备执行方法相应的功能模块和有益效果。

图5是本发明实施例提供的一种集群的结构框图,如图5所示,本发明实施例提供的集群500包括本发明实施例提供的一种任务处理装置501。

注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号