一种任务处理方法、装置、设备、存储介质及产品与流程

文档序号:29861303发布日期:2022-04-30 11:10阅读:80来源:国知局
一种任务处理方法、装置、设备、存储介质及产品与流程

1.本技术涉及通信技术领域,具体而言,涉及一种任务处理方法、任务处理装置、电子设备、计算机可读存储介质及计算机产品。


背景技术:

2.为了满足使用对象各种使用需求,业务系统会开发出符合使用对象需求的业务,但相关技术中需要业务系统的开发人员开发出一个独立的平台,通过该平台实现对应的业务,需要较高的开发和维护成本,且随着业务的开发,平台需要处理的任务越来越多,而平台在处理任务时,采用单线程执行任务,导致任务处理效率低下。


技术实现要素:

3.为解决上述技术问题,本技术的实施例提供了一种任务处理方法、信息处理装置、电子设备、计算机可读存储介质及计算机程序产品,配置多个子任务,由多个工人节点同时执行多个子任务,提高了业务系统中多任务的处理效率。
4.本技术的其他特性和优点将通过下面的详细描述变得显然,或部分地通过本技术的实践而习得。
5.根据本技术实施例的一个方面,提供了一种任务处理方法,应用于批任务系统,所述批任务系统包括宿主节点和多个工人节点,所述宿主节点用于基于处理任务生成多个子任务,并将多个子任务分发至所述多个工人节点,所述方法由所述工人节点执行,包括:接收所述宿主节点发送的目标脚本和所述子任务,所述目标脚本是所述宿主节点基于所述处理任务和嵌入式脚本语言编写的;通过所述工人节点的宿主语言将任务参数写入所述目标脚本,并执行所述目标脚本,以得到所述子任务的处理结果,所述任务参数为根据所述子任务确定的;将所述子任务的处理结果发送给所述宿主节点,以使所述宿主节点基于各工人节点返回的处理结果形成所述处理任务的任务结果。
6.根据本技术实施例的一个方面,提供了一种任务处理装置,应用于批任务系统,所述批任务系统包括宿主节点和多个工人节点,所述宿主节点用于基于处理任务生成多个子任务,并将多个子任务分发至所述多个工人节点,所述装置配置在所述工人节点上,包括:接收模块,用于接收所述宿主节点发送的目标脚本和所述子任务,所述目标脚本是所述宿主节点基于所述处理任务和嵌入式脚本语言编写的;处理模块,用于通过所述工人节点的宿主语言将任务参数写入所述目标脚本,并执行所述目标脚本,以得到所述子任务的处理结果,所述任务参数为根据所述子任务确定的;发送模块,用于将所述子任务的处理结果发送给所述宿主节点,以使所述宿主节点基于各工人节点返回的处理结果形成所述处理任务的任务结果。
7.在本技术的一实施例中,所述处理模块包括写入单元,写入单元用于通过所述工人节点的宿主语言创建虚拟机,所述虚拟机用于运行所述目标脚本;将所述任务参数放入所述虚拟机的堆栈,所述虚拟机的堆栈用于存储所述目标脚本的变量参数,以将所述任务
参数作为所述目标脚本的变量参数。
8.在本技术的一实施例中,所述目标脚本包括用于描述执行所述子任务的任务内容的表达式;所述处理模块还包括执行单元,执行单元启动所述目标脚本,以使得所述目标脚本从所述虚拟机的堆栈中获取所述任务参数作为变量参数,并通过执行写入所述变量参数后的表达式,对所述子任务所属任务对象的数据进行处理得到处理数据,并将所述处理数据放入所述虚拟机的堆栈;从所述虚拟机的堆栈中获取所述目标脚本返回的处理数据,并根据所述处理数据得到所述处理结果。
9.在本技术的一实施例中,所述装置还包括设置模块,用于在执行单元启动所述目标脚本之前,为所述目标脚本设置调试参数,以使得所述目标脚本在通过执行写入所述变量参数后的表达式,对所述子任务所属任务对象的数据进行处理时,为所述调试参数进行赋值,并将赋值后的调试参数和所述目标脚本处理得到的输出数据作为所述处理数据;其中,所述调试参数包括目标脚本执行数和过程信息值,所述目标脚本执行数用于记录所述目标脚本执行的次数,所述过程信息值用于记录所述目标脚本的执行过程。
10.在本技术的一实施例中,所述执行单元进一步用于若所述调试参数中的过程信息值未存在异常,将所述输出数据作为所述处理结果;若所述调试参数中过程信息值存在异常,根据所述调试参数中的目标脚本执行数,定位所述输出数据中的错误记录,对所述错误记录对应错误的数据进行标注,并携带标注的输出数据作为所述处理结果。
11.在本技术的一实施例中,所述装置还包括删除模块,在处理模块通过工人节点的宿主语言将任务参数写入所述目标脚本之前,删除所述目标脚本中的输入和输出接口,以屏蔽所述目标脚本中的输入语法和输出语法。
12.在本技术的一实施例中,所述接收模块还用于在通过工人节点的宿主语言将任务参数写入所述目标脚本之前,接收所述宿主节点发送的模拟目标脚本,所述模拟目标脚本为向所述目标脚本写入模拟任务参数后得到的;处理模块还用于执行所述模拟目标脚本,以确定所述目标脚本是否存在语法错误。
13.根据本技术实施例的一个方面,提供了一种电子设备,包括一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个被所述一个或多个处理器执行时,使得所述电子设备实现如上所述的任务处理方法。
14.根据本技术实施例的一个方面,提供了一种计算机可读存储介质,其上存储有计算机可读指令,当所述计算机可读指令被计算机的处理器执行时,使计算机执行如上所述的任务处理方法。
15.根据本技术实施例的一个方面,提供了一种计算机程序产品,包括计算机指令,所述计算机指令被处理器执行时实现如上所述的任务处理方法。
16.在本技术的实施例所提供的技术方案中,应用于批任务系统,宿主节点基于处理任务和嵌入式脚本语言编写目标脚本,基于嵌入式脚本语言编写的目标脚本可灵活嵌入到任务处理过程中,为批任务系统提供灵活的定制功能,降低了业务开发的成本和复杂度;且通过任务系统中的宿主节点将处理任务拆分为多个子任务,并将子任务和目标脚本分发至多个工人节点,进而多个工人节点可并行通过宿主语言将子任务对应的任务参数写入目标脚本,以执行各自的子任务得到处理结果,宿主节点基于各工人节点返回的处理结果形成该处理任务的任务结果,进而提高了任务处理效率。
17.应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本技术。
附图说明
18.此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本技术的实施例,并与说明书一起用于解释本技术的原理。显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域普通技术者来讲,在不付出创造性劳动的前提下还可以根据这些附图获得其他的附图。在附图中:
19.图1是本技术涉及的一种实施环境的示意图;
20.图2是本技术的一示例性实施例示出的一种任务处理方法的流程图;
21.图3是图2所示实施例中的步骤s120中将任务参数写入目标脚本的流程示意图;
22.图4是工人节点通过宿主语言与目标脚本交互的过程示意图;
23.图5是图2所示实施例中的步骤s120中的执行目标脚本的流程示意图;
24.图6是图5所示实施例中的步骤s124中的根据处理数据得到处理结果的流程示意图;
25.图7是图2所示实施例中的在步骤s110之前的流程示意图;
26.图8是本技术的一示例性实施例示出的批任务系统的架构示意图;
27.图9是本技术的一示例性实施例示出的一种任务处理装置的示意图;
28.图10示出了适于用来实现本技术实施例的电子设备的计算机系统的结构示意图。
具体实施方式
29.这里将详细地对示例性实施例执行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本技术相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本技术的一些方面相一致的装置和方法的例子。
30.附图中所示的方框图仅仅是功能实体,不一定必须与物理上独立的实体相对应。即,可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。
31.附图中所示的流程图仅是示例性说明,不是必须包括所有的内容和操作/步骤,也不是必须按所描述的顺序执行。例如,有的操作/步骤还可以分解,而有的操作/步骤可以合并或部分合并,因此实际执行的顺序有可能根据实际情况改变。
32.还需要说明的是:在本技术中提及的“多个”是指两个或者两个以上。“和/或”描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。
33.在此,介绍与本技术涉及的缩略词和关键术语定义:
34.批任务系统:指在计算机上自动执行系列程序的系统,互联网场景一般常见于海量数据处理的离线任务处理。
35.lua:是一种轻量脚本语言,其设计目的是为了嵌入应用程序中,为应用程序提供灵活的扩展和定制功能,lua由标准c语言编写而成,几乎在所有操作系统和平台上都可以
编译。lua脚本可以很容易的被c/c++代码调用,也可以反过来调用c/c++的函数,这使得lua在应用程序中可以被广泛应用。不仅仅作为扩展脚本,也可以作为普通的配置文件,代替xml,ini等文件格式,并且更容易理解和维护。
36.宿主语言:是开发宿主环境的程序语言,也被称作系统开发语言。
37.云技术(cloud technology):基于云计算商业模式应用的网络技术、信息技术、整合技术、管理平台技术、应用技术等的总称,可以组成资源池,按需所用,灵活便利。云计算技术将变成重要支撑。技术网络系统的后台服务需要大量的计算、存储资源,如视频网站、图片类网站和更多的门户网站。伴随着互联网行业的高度发展和应用,将来每个物品都有可能存在自己的识别标志,都需要传输到后台系统进行逻辑处理,不同程度级别的数据将会分开处理,各类行业数据皆需要强大的系统后盾支撑,只能通过云计算来实现。云计算(cloud computing)是一种计算模式,它将计算任务分布在大量计算机构成的资源池上,使各种应用系统能够根据需要获取计算力、存储空间和信息服务。
38.云存储(cloud storage)是在云计算概念上延伸和发展出来的一个新的概念,分布式云存储系统(以下简称存储系统)是指通过集群应用、网格技术以及分布存储文件系统等功能,将网络中大量各种不同类型的存储设备(存储设备也称之为存储节点)通过应用软件或应用接口集合起来协同工作,共同对外提供数据存储和业务访问功能的一个存储系统。
39.目前,存储系统的存储方法为:创建逻辑卷,在创建逻辑卷时,就为每个逻辑卷分配物理存储空间,该物理存储空间可能是某个存储设备或者某几个存储设备的磁盘组成。客户端在某一逻辑卷上存储数据,也就是将数据存储在存储系统上,存储系统将数据分成许多部分,每一部分是一个对象,对象不仅包含数据而且还包含数据标识(id,id entity)等额外的信息,存储系统将每个对象分别写入该逻辑卷的物理存储空间,且存储系统会记录每个对象的存储位置信息,从而当客户端请求访问数据时,存储系统能够根据每个对象的存储位置信息让客户端对数据进行访问。
40.请参阅图1,图1是本技术涉及的一种实施环境的示意图。该实施环境包括客户端10、批任务系统20,客户端10和批任务系统20之间通过有线或者无线网络进行通信。其中批任务系统20包括宿主节点201(master)和多个工人节点202(worker),多个工人节点202与宿主节点201之间通过有线或者无线网络进行通信;
41.其中,客户端10用于将数据存储在批任务系统20,并通过请求访问批任务系统20中存储的数据。
42.宿主节点201,用于对工人节点202进行管理,并基于客户端10的请求实现任务调度和脚本的管理。
43.工人节点202,用于接受来自宿主节点201派发的子任务,执行完成后将聚合信息交付给宿主节点201汇总。
44.下面结合云存储技术对本技术涉及的实施环境进行描述:
45.在本技术中,批任务系统20是一种分布式云存储系统,客户端10将数据存储在批任务系统20上,批任务系统20将数据分成许多部分,每一部分是一个对象,批任务系统20将每个对象分别写入该逻辑卷的物理存储空间,且批任务系统20会记录每个对象的存储位置信息;
46.客户端10请求访问批任务系统20中的数据时,例如请求查询数据时,批任务系统20的宿主节点201能够生成数据查询任务,然后根据每个对象的存储位置信息确定该对象对应的数据存储在哪些物理存储空间,此时可以根据存储位置空间生成多个子任务,将该多个子任务发送给工人节点202,进而由工人节点202基于子任务对应的物理存储空间中的数据进行查询,执行完成后将数据查询结果交付给宿主节点201汇总,由宿主节点201将数据查询结果发送给客户端10,以展示数据查询结果给使用对象。
47.其中,客户端10可以是智能手机、平板、笔记本电脑、计算机、智能语音交互设备、智能家电、车载客户端等电子设备;宿主节点和工人节点20可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、cdn(content delivery network,内容分发网络)以及大数据和智能平台等基础云计算服务的云服务器,本处不对此进行限制。
48.如图2所示,图2是根据一示例性实施例示出的一种任务处理方法的流程图。该方法可以应用于图1所示的实施环境,宿主节点201基于处理任务生成多个子任务,并将多个子任务分发至多个工人节点202,并由图1所示实施例环境中的工人节点202具体执行。该任务处理方法可以包括步骤s110至步骤s130,详细介绍如下:
49.s110、接收宿主节点发送的目标脚本和子任务,目标脚本是宿主节点基于处理任务和嵌入式脚本语言编写的。
50.在本技术的一实施例中,宿主节点可以基于客户端的请求生成处理任务,处理任务可以根据实际客户端的需求进行灵活调整,如请求内容为处理任务的任务内容,例如请求查询满足条件a的数据,则处理任务为从所有数据中筛选出满足条件a的数据。
51.需要说明的是,宿主节点还可以基于处理任务生成多个子任务,并将多个子任务分发至多个工人节点,例如处理任务为筛选出满足条件a的数据,而由于数据分散存储在多个物理存储空间,则可基于物理存储空间生成多个子任务,如子任务1为从物理存储空间1中筛选出满足条件a的数据;子任务2为从物理存储空间2中筛选出满足条件a的数据;子任务3为从物理存储空间3中筛选出满足条件a的数据。又例如处理任务为从指定数据中筛选出满足条件a或满足条件b的数据,则子任务1为从指定数据中筛选出满足条件a的数据,则子任务2为从指定数据中筛选出满足条件b的数据。
52.同时,宿主节点还可基于处理任务编写和嵌入式脚本语言得到目标脚本,该目标脚本用于实现对应的处理任务,还将该目标脚本分发至多个工人节点。
53.可选的,嵌入式脚本语言为可嵌入应用程序的脚本语言,例如嵌入式脚本语言为lua,目标脚本为lua脚本,lua脚本可通过灵活嵌入应用程序中从而为应用程序提供灵活的扩展和定制功能,灵活而又不损失性能。
54.在本技术的一实施例中,工人节点接收宿主节点发送的目标脚本和子任务,其中该子任务可以是一个子任务,也可以是多个子任务,在次不进行限定。
55.可以理解的是,在一示例中,该目标脚本所实现的内容与子任务的子任务内容可以相同,例如处理任务为筛选出满足条件a的数据,目标脚本所实现的功能为筛选出满足条件a的数据,子任务为从物理存储空间2中筛选出满足条件a的数据,工人节点可以直接基于目标脚本实现子任务。
56.在另一示例中,工人节点还可以在接收到目标脚本后,基于子任务对该目标脚本进行修改;例如处理任务为从指定数据中筛选出满足条件a或满足条件b的数据,目标脚本所实现的功能为从指定数据中筛选出满足条件a或满足条件b的数据,而子任务1为从指定数据中筛选出满足条件a的数据,则工人节点对该目标脚本进行修改,如删除满足条件b对应的代码,以使得与子任务的任务内容对应。
57.s120、通过工人节点的宿主语言将任务参数写入目标脚本,并执行目标脚本,以得到子任务的处理结果,任务参数为根据子任务确定的。
58.在本技术的一个实施例中,工人节点的宿主语言为c语言或c++语言,工人节点通过编写c语言或c++语言将任务参数写入目标脚本中,并执行写入任务参数后的目标脚本,使得目标脚本能实现子任务的任务内容。
59.其中任务参数为根据子任务确定的,在一示例中,例如子任务为筛选出大于1kb的数据,则任务参数包括任务变量,如1024byte,目标脚本所能实现的内容为筛选出大于x的数据,则将任务参数写入该x,即赋值于x。在另一示例中,根据子任务的任务内容可以确定用于描述该任务内容的表达式,则任务参数还包括该表达式所对应的表达式名称,即任务参数包括表达式名称和任务变量,如size》1024byte。
60.可以理解的是,工人节点可以通过执行目标脚本得到子任务的处理结果。
61.s130、将子任务的处理结果发送给宿主节点,以使宿主节点基于各工人节点返回的处理结果形成处理任务的任务结果。
62.当工人节点得到子任务的处理结果后,将处理结果发送给宿主节点,进而宿主节点收集各工人节点返回的处理结果,整合后得到该处理任务的任务结果,宿主节点还可将任务结果发送给客户端。
63.基于嵌入式脚本语言编写的目标脚本可灵活嵌入到业务中,为批任务系统提供灵活的定制功能,降低了业务开发的成本和复杂度;且通过任务系统中的宿主节点将处理任务拆分为多个子任务,并将子任务和目标脚本分发至多个工人节点,进而多个工人节点可并行通过宿主语言将子任务对应的任务参数写入目标脚本,以动态执行各自的子任务得到处理结果,宿主节点基于各工人节点返回的处理结果形成该处理任务的任务结果,进而提高了任务处理效率。
64.请参见图3,图3是图2所示实施例中的步骤s120中将任务参数写入目标脚本的流程示意图,包括:
65.s121、通过工人节点的宿主语言创建虚拟机,虚拟机用于运行目标脚本。
66.在本技术的一个实施例中,通过宿主语言编写代码来创建lua虚拟机,例如通过lua_newstate函数来创建一个lua虚拟机,该lua虚拟机用于运行lua脚本。
67.s122、将任务参数放入虚拟机的堆栈,虚拟机的堆栈用于存储目标脚本的变量参数,以将任务参数作为目标脚本的变量参数。
68.在此,以目标脚本为lua脚本为例进行说明,如图4所示,图4为工人节点通过宿主语言与目标脚本交互的过程,lua虚拟机包括堆栈和lua程序,该堆栈用于lua程序与宿主语言进行交互,lua程序用于编译lua脚本的代码,其中堆栈的特点是先进后出。堆栈就是一个struct(结构体),堆栈索引的方式可以是正数也可以是负数,区别是:正数索引1永远表示栈底,负数索引-1永远表示栈顶;通过宿主语言将任务参数放入堆栈的栈顶中,可以理解的
是,将存在多个任务参数时,则通过宿主语言将多个任务参数依次从堆栈的栈顶放入;堆栈用于将任务参数作为lua脚本的变量参数,并存储该变量参数,也就是说,通过堆栈将宿主语言环境的任务变量转换为lua脚本的变量参数,将任务参数写入了该lua脚本。
69.需要说明的是,在一示例中,目标脚本包括用于描述执行子任务的任务内容的表达式,即通过表达式来描述子任务的任务内容,例如子任务的任务内容为文件存储量筛选大于某个数的文件,则该表达式为size》x。如图5所示,图5是图2所示实施例中的步骤s120中的执行目标脚本的流程示意图,包括:
70.s123、启动目标脚本,以使得目标脚本从虚拟机的堆栈中获取任务参数作为变量参数,并通过执行写入变量参数后的表达式,对子任务所属任务对象的数据进行处理得到处理数据,并将处理数据放入lua虚拟机的堆栈。
71.参加图4所示,启动目标脚本,如启动lua脚本,进而lua脚本在运行时,lua脚本的lua程序从堆栈的栈顶中取出该变量参数,将变量参数写入表达式中;例如表达式为size》x,变量参数为1024时,则执行表达式size》1024,以对子任务所属任务对象的数据进行处理得到处理结果。其中子任务所属任务对象可以是存储数据的数据库,该数据库与子任务对应;例如子任务所属任务对象为物理存储空间1,则执行表达式,对物理存储空间1中存储的数据进行处理,如筛选存储量筛选大于1024的数据,得到处理数据。当lua脚本得到处理数据后,将处理数据压入lua堆栈的栈顶中。
72.在另一示例中,当任务参数包括表达式的表达式名称和任务变量时,目标脚本从虚拟机的堆栈中获取表达式名称和任务变量作为表达式参数和对象参数,通过该表达式参数调用对应的表达式,将对象参数写入该表达式中,并执行该表达式,对子任务所属任务对象的数据进行处理得到处理数据。
73.s124、从虚拟机的堆栈中获取目标脚本返回的处理数据,并根据处理数据得到处理结果。
74.在本技术的一个实施例中,通过宿主语言从lua虚拟机的堆栈的栈顶取出lua脚本返回的处理数据,并根据处理数据得到处理结果,例如将处理数据作为该处理结果。
75.可选的,当得到处理结果后,还可以通过宿主语言关闭虚拟机,以释放资源。
76.值得注意的是,为了便于调试与定位目标脚本的执行过程,本技术的一个实施例中,工人节点还可以设置调试参数,可选的,在启动目标脚本之前,本技术提供的任务处理方法包括:
77.为目标脚本设置调试参数,以使得目标脚本在通过执行写入变量参数后的表达式,对子任务所属任务对象的数据进行处理时,为调试参数进行赋值,并将赋值后的调试参数和目标脚本处理得到的输出数据作为处理数据。
78.在本技术的一个实施例中,调试参数用于调试与定位目标脚本的执行过程;例如,当lua脚本在将变量参数写入表达式中,并执行表达式,对子任务所属任务对象的数据进行处理时,根据执行过程为调试参数进行赋值;可以理解的是,当lua脚本对子任务所属任务对象的数据进行处理时,会得到针对该表达式的输出数据,lua脚本可将赋值后的调试参数和输出数据作为处理数据。
79.其中,调试参数包括目标脚本执行数和过程信息值,目标脚本执行数用于记录目标脚本执行的次数,过程信息值用于记录目标脚本的执行过程。
80.应当理解的是,子任务所属任务对象的数据可能存在多个,对于每个数据都需要执行一次lua脚本,在对子任务所属任务对象的数据进行处理的过程中,可以记录lua脚本执行数,进而后续可通过lua脚本执行数确定是否漏掉了数据;过程信息值用于记录lua脚本的执行过程,例如在lua脚本的执行过程中是否存在异常,如存在异常,则将过程信息值赋值为1;若不存在异常,则将过程信息值赋值于0,其中异常包括但不限于lua脚本未完整执行,lua脚本未执行,lua脚本错误执行等。
81.可以理解的是,每执行一次lua脚本,则对应一个过程信息值。
82.本技术的另一个实施例的一示例中,可以由宿主节点为lua脚本设置调试参数,也就是说,工人节点接收的lua脚本中已经设置调试参数。在另一实施例中的另一示例中,可以是工人节点先接收到lua脚本,再接收到宿主节点为lua脚本设置的调试参数,进而工人节点将该调试参数通过lua虚拟机写入lua脚本。
83.在本技术的一实施例中,处理数据包括调试参数和表达式输出的调试参数时,如图6所示,图6是图5所示实施例中的步骤s124中的根据处理数据得到处理结果的流程示意图,包括:
84.s1241、若调试参数中的过程信息值未存在异常,将输出数据作为处理结果。
85.例如调试参数中的过程信息值为0,则表示lua脚本执行时未存在异常,输出数据为正确的数据,则将输出数据作为处理结果。
86.s1242、若调试参数中过程信息值存在异常,根据调试参数中的目标脚本执行数,定位输出数据中的错误记录,对错误记录对应错误的数据进行标注,并将携带标注的输出数据作为处理结果。
87.如调试参数中的过程信息值为1,则表示lua脚本执行时存在异常,由于过程信息值与lua脚本执行数对应,则可以根据lua脚本执行数找到是哪次lua脚本执行时,出现异常;可以理解的是,输出数据中包括多个数据,进而定位输出数据中的出现异常那次的错位记录,对错误记录对应的错误的数据进行标注,进而输出数据中会包含一标记的数据,将携带标记的输出数据作为处理结果。例如定位出第3次lua脚本执行出现异常,则定位到输出数据中第三次输出的输出记录,对第3次输出的输出记录对应的数据3进行标记,进而输出数据包含数据1、数据2和标记的数据3,将携带标记的输出数据作为处理结果。
88.在本实施例中,通过为目标脚本设置调试参数,进而后续可根据调试参数中的赋值来确定目标脚本在运行过程的运行情况,具体通过目标脚本执行数和过程信息值来定位与调试目标脚本的运行过程,且保证了目标脚本的处理结果的准确性和可靠性。
89.需要说明的是,在本技术的一个实施例中,嵌入式脚本语言可以直接通过标准输入和输出,而本技术提供的任务处理方法,是通过宿主语言与嵌入式动态脚本进行交互实现的任务处理,因此为了避免工人节点在执行嵌入式动态脚本直接通过标准输入和输出,导致线程阻塞、磁盘和内存消耗不可控,本技术的提供的任务处理方法在通过工人节点的宿主语言将任务参数写入目标脚本之前,还包括:
90.删除目标脚本中的输入和输出接口,以屏蔽目标脚本中的输入语法和输出语法。
91.在本技术的一实施例中,在创建lua虚拟机后,会打开lua中的标准库,如i/o(input/output)库,i/o库提供了两套不同风格的文件处理接口。第一种风格使用隐式的文件句柄;它提供设置默认输入文件及默认输出文件的操作,所有的输入输出操作都针对这
些默认文件。第二种风格使用显式的文件句柄。当使用隐式文件句柄时,所有的操作都由表io提供。若使用显式文件句柄,io.open会返回一个文件句柄,且所有的操作都由该文件句柄的方法来提供。
92.因此,本实施例中可删除lua脚本中的输入和输出接口,以屏蔽lua脚本中的输入语法和输出语法,进而工人节点在执行lua脚本时,不会通过lua脚本标准i/o输入输出,而是通过宿主语言与lua交互实现输入和输出。
93.本技术的另一个实施例中,可以由宿主节点删除lua脚本中的输入和输出接口,也就是说,工人节点接收的lua脚本中已经屏蔽了lua脚本中的输入语言和输出语法。
94.需要说明的是,在本技术的一个实施例中,为了测试lua脚本的正确性,如图7所示,图7是图2所示实施例中的在步骤s110之前的流程示意图,包括:
95.s710、接收宿主节点发送的模拟目标脚本,模拟目标脚本为向目标脚本写入模拟任务参数后得到的。
96.在本技术的一实施例中,例如,宿主节点在根据处理任务生成lua脚本之后,将模拟任务参数写入lua脚本中,得到模拟lua脚本,进而将该模拟lua脚本发送给工人节点。
97.s720、执行模拟目标脚本,以确定目标脚本是否存在语法错误。
98.需要说明的是,模拟lua脚本与lua脚本在执行语法并没有不同,区别在于,模拟lua脚本是写入了具体的任务参数,因此执行模拟lua脚本时,相当于执行一个模拟任务,通过执行模拟lua脚本,便可发现模拟lua脚本是否存在语法错误,当模拟lua脚本存在语法错误时,则表示lua脚本也存在语法错位,进而可以根据lua脚本运行记录对lua脚本进行修改。
99.在本实施例中,通过运行模拟lua脚本测试lua脚本的正确性,避免了后续工人节点实际执行任务时才发现脚本错误,避免在实际执行任务时,由于脚本错误影响了最终任务没法正确交付。
100.为了便于理解,本技术的一实施例中,以一个具体的例子对任务处理方法进行说明,如图8所示,图8为批任务系统的架构示意图,该批任务系统为分布式结构,即包括宿主节点master和多个工人节点worker,通过master和多个worker形成分布式结构;其中,master负责集群管理、任务调度及lua脚本的管理,master将一个任务拆解成多个子任务,worker接受来自master派发的子任务,执行完成后将聚合信息交付给master汇总。
101.其中在批任务处理系统中,需要开发查询、过滤聚合功能时,相关技术中常见方案为1)c++硬编码。业务系统中,为支持某类特殊规则的查询、聚合,快速实现的方式往往是通过业务模块的宿主语言,将规则实现;但这种方式对于平台型的系统,后续新业务接入或者业务规则变更,将持续的打扰平台系统的开发人员,有较高的接入和维护成本。2)结构化规则,并通过api(application programming interface,应用程序接口)的方式把能力开放出来;这种方式设计成本非常高,比如要实现一个字段的比较操作,就需要定义大于、小于、等于、不等于,如果还要支持条件、循环等能力,规则将极为复杂,接入业务来理解这套规则的学习成本也非常高。3)sql(结构化查询语言,structured query language)语言;sql有强大的查询过滤能力,但在应对上下文变量传递、一次执行兼顾过滤和聚合等多类操作时,能力较为受限。4)python(计算机编程语言)、shell(一种脚本语言)等脚本注入,这是后台开发人员的常见语言,业务接入人员学习成本低,但在性能和c++交互上支持较差。
102.本技术的实施例引入lua语言为批任务系统提供查询、过滤聚合功能;例如worker接受来自master派发的子任务,该子任务为数据查询、过滤聚合,具体的,worker通过c++语言与lua语言交互执行该子任务。
103.其中work通过c++与lua进行交互,交互流程如下表1所示:
[0104][0105]
表1
[0106]
可以理解的是,c++通过lual_loadstring函数初始化lua脚本;c++通过lua_setglobal函数将c++变量设置到lua环境,即将任务参数放入lua虚拟机的堆栈中,该任务参数可以是查询、过滤条件;c++通过lua_pcall函数执行预定的lua脚本,进而lua脚本从虚拟机的堆栈中获取任务参数作为变量参数,并根据变量参数执行lua脚本中的lua函数得到处理数据,然后lua脚本将处理数据放入堆栈中,该lua函数用于表征任务内容的表达式,c++通过lua_getglobal从lua虚拟机的堆栈中提取处理结果。
[0107]
其中,lual_loadstring函数表示加载一个字符串,字符串中包含了lua脚本,lua_setglobal函数表示从lua虚拟机的堆栈里将数据写入到lua的全局变量中,lua_pcall函数表示以保护模式执行脚本,lua_getglobal表示从lua中得到数据放到lua虚拟机的堆栈里。
[0108]
若work处理的子任务为数据过滤并聚合,则自定义lua脚本为:
[0109][0110][0111]
例如子任务为需要统计某个存储桶(类似于一个数据库)下文件大于1kb的文件数、总存储量,及文件列表,则该lua脚本编写如下:
[0112]
lua_task_init=“count=0;storage=0”#一般用于任务启动时全局变量定义
[0113]
lua_file_begin=“count=0;storage=0”#单个文件维度初始化统计变量
[0114]
lua_filter=“if(size》1024){count+=1;storage+=size;}return size》1024”#聚合统计数据,查询过滤条件,其中size变量由任务数据源注入
[0115]
lua_file_end=“return count,storage”#返回聚合数据,由worker收集lua返回数据
[0116]
需要说明的是,为了提高lua脚本开发调试效率,本实施例中通过模拟数据灌入lua脚本得到模拟lua脚本,预处理lua脚本一次便可发现lua脚本是否存在语法等错误,以降低后续实际任务调度时才发现,最终任务没法正确交付。例如如上的统计某个存储桶下文件大于1kb的文件数、总存储量及文件列表的lua脚本为注入了模拟数据1024的模拟脚本,通过运行该模拟脚本以确定是否存在语法错位。
[0117]
为了提高lua脚本开发调试效率,本实施例中还设置两种调试参数:usercount(计数器)和appdix(附加字符),lua脚本每执行一次,可将lua脚本执行数和执行过程值赋值在这两调试参数中,进而worker的c++语言可获取这赋值后的调试参数,进而根据这两调试参数对lua脚本的执行过程进行定位与调试。
[0118]
需要说明的是,相比纯lua脚本的交互式编程,可以直接通过标准输入、输出调试。但如上描述,本实施例中通过c++方式与lua交互,因此需要屏蔽lua自身io能力,即屏蔽lua脚本中的“输入”语法(会导致批任务系统线程阻塞),和屏蔽lua脚本中的“输出”语法,以避免worker线程阻塞以及worker的磁盘和内存消耗不可控。例如如上的统计某个存储桶下文件大于1k的文件数、总存储量及文件列表的lua脚本为删除输入和输出接口后的脚本。
[0119]
本实施例的任务处理方法,引入lua脚本,利用c++与lua语言的实现任务处理,对lua原生脚本做适当裁剪,以支持语法预检测、屏蔽io输入输出、便于调试的数据输出等能力;其中master将一个任务会拆解成多个子任务,将lua脚本分到各个worker执行,使其适用于天级万亿级数据处理系统中,支持数据查询过滤、行聚合、上下文环境等能力,灵活而又不损失性能,较低成本的实现了个性化的业务诉求,大大降低了接入业务开发复杂度。
[0120]
下面对本技术提供的任务处理方法的应用场景进行说明。
[0121]
本技术各实施例提及的批任务处理系统为对象存储(cloud object storage,cos)中的一个系统,对象存储(cloud object storage,cos)是腾讯云提供的一种存储海量文件的分布式存储服务,具有高扩展性、低成本、可靠安全等优点。通过控制台、api、sdk和工具等多样化方式,使用对象可简单、快速地接入cos,进行多格式文件的上传、下载和管理,实现海量数据存储和管理。
[0122]
该批任务处理系统可以基于lua脚本实现各种对象存储中的任务,例如对象存储中数据管理服务中的清单任务,实现自定义数据过滤与聚合场景;还可以对象存储中接入数据管理服务中的生命周期、跨区域复制、对账等应用,实现天级处理万亿级对象索引处理,极大的降低了万亿级索引查询管理成本。
[0123]
介绍本技术的装置实施例,可以用于执行本技术上述实施例中的任务处理方法。对于本技术装置实施例中未披露的细节,请参照本技术上述的任务处理方法的实施例。
[0124]
本技术实施例提供了一种任务处理装置,应用于批任务系统,批任务系统包括宿主节点和多个工人节点,宿主节点用于基于处理任务生成多个子任务,并将多个子任务分发至多个工人节点,装置配置在工人节点上;图9示出了根据本技术的一个实施例的任务处理装置的框图,信息处理装置,包括接收模块910、处理模块920和发送模块930;
[0125]
接收模块910,用于接收宿主节点发送的目标脚本和子任务,目标脚本是宿主节点基于处理任务和嵌入式脚本语言编写的;
[0126]
处理模块920,用于通过工人节点的宿主语言将任务参数写入目标脚本,并执行目标脚本,以得到子任务的处理结果,任务参数为根据子任务确定的;
[0127]
发送模块930,用于将子任务的处理结果发送给宿主节点,以使宿主节点基于各工人节点返回的处理结果形成处理任务的任务结果。
[0128]
在本技术的一个实施例中,基于前述方案,处理模块920包括写入单元,写入单元用于通过工人节点的宿主语言创建虚拟机,虚拟机用于运行目标脚本;将任务参数放入虚拟机的堆栈,虚拟机的堆栈用于存储目标脚本的变量参数,以将任务参数作为目标脚本的变量参数。
[0129]
在本技术的一个实施例中,基于前述方案,目标脚本包括用于描述执行子任务的任务内容的表达式;处理模块920还包括执行单元,执行单元启动目标脚本,以使得目标脚本从虚拟机的堆栈中获取任务参数作为变量参数,并通过执行写入变量参数后的表达式,对子任务所属任务对象的数据进行处理得到处理数据,并将处理数据放入虚拟机的堆栈;从虚拟机的堆栈中获取目标脚本返回的处理数据,并根据处理数据得到处理结果。
[0130]
在本技术的一个实施例中,基于前述方案,装置还包括设置模块,用于在执行单元启动目标脚本之前,为目标脚本设置调试参数,以使得目标脚本在通过执行写入变量参数后的表达式,对子任务所属任务对象的数据进行处理时,为调试参数进行赋值,并将赋值后的调试参数和目标脚本处理得到的输出数据作为处理数据;其中,调试参数包括目标脚本执行数和过程信息值,目标脚本执行数用于记录目标脚本执行的次数,过程信息值用于记录目标脚本的执行过程。
[0131]
在本技术的一个实施例中,基于前述方案,执行单元进一步用于若调试参数中的过程信息值未存在异常,将输出数据作为处理结果;若调试参数中过程信息值存在异常,根据调试参数中的目标脚本执行数,定位输出数据中的错误记录,对错误记录对应错误的数据进行标注,并携带标注的输出数据作为处理结果。
[0132]
在本技术的一个实施例中,基于前述方案,装置还包括删除模块,在处理模块通过工人节点的宿主语言将任务参数写入目标脚本之前,删除目标脚本中的输入和输出接口,以屏蔽目标脚本中的输入语法和输出语法。
[0133]
在本技术的一个实施例中,基于前述方案,接收模块910还用于在通过工人节点的宿主语言将任务参数写入目标脚本之前,接收宿主节点发送的模拟目标脚本,模拟目标脚本为向目标脚本写入模拟任务参数后得到的;处理模块还用于执行模拟目标脚本,以确定目标脚本是否存在语法错误。
[0134]
本实施例提供的任务处理装置,应用于批任务系统,宿主节点基于处理任务和嵌入式脚本语言编写目标脚本,通过嵌入式脚本语言灵活嵌入到业务中,提供灵活的定制功能,降低了业务开发的复杂度;且通过任务系统中的宿主节点将处理任务拆分为多个子任务,并将子任务和目标脚本分发至多个工人节点,进而多个工人节点可并行通过宿主语言将子任务对应的任务参数写入目标脚本,以动态执行各自的子任务得到处理结果,宿主节点基于各工人节点返回的处理结果形成该处理任务的任务结果,进而提高了任务处理效率。
[0135]
需要说明的是,上述实施例所提供的装置与上述实施例所提供的方法属于同一构思,其中各个模块和单元执行操作的具体方式已经在方法实施例中进行了详细描述,此处不再赘述。
[0136]
本技术的实施例还提供了一种电子设备,包括一个或多个处理器,以及存储装置,
其中,存储装置,用于存储一个或多个程序,当一个或多个被一个或多个处理器执行时,使得所述电子设备实现如上所述的任务处理方法。
[0137]
图10示出了适于用来实现本技术实施例的电子设备的计算机系统的结构示意图。
[0138]
需要说明的是,图10示出的电子设备的计算机系统1000仅是一个示例,不应对本技术实施例的功能和使用范围带来任何限制。
[0139]
如图10所示,计算机系统1000包括中央处理单元(central processing unit,cpu)1001,其可以根据存储在只读存储器(read-only memory,rom)1002中的程序或者从储存部分1008加载到随机访问存储器(random access memory,ram)1003中的程序而执行各种适当的动作和处理,例如执行上述实施例中所述的方法。在ram 1003中,还存储有系统操作所需的各种程序和数据。cpu 1001、rom 1002以及ram 1003通过总线1004彼此相连。输入/输出(input/output,i/o)接口1005也连接至总线1004。
[0140]
以下部件连接至i/o接口1005:包括键盘、鼠标等的输入部分1006;包括诸如阴极射线管(cathode ray tube,crt)、液晶显示器(liquid crystal display,lcd)等以及扬声器等的输出部分1007;包括硬盘等的储存部分1008;以及包括诸如lan(local area network,局域网)卡、调制解调器等的网络接口卡的通信部分1009。通信部分1009经由诸如因特网的网络执行通信处理。驱动器1010也根据需要连接至i/o接口1005。可拆卸介质1011,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器1010上,以便于从其上读出的计算机程序根据需要被安装入储存部分1008。
[0141]
特别地,根据本技术的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本技术的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的计算机程序。在这样的实施例中,该计算机程序可以通过通信部分1009从网络上被下载和安装,和/或从可拆卸介质1011被安装。在该计算机程序被中央处理单元(cpu)1001执行时,执行本技术的系统中限定的各种功能。
[0142]
需要说明的是,本技术实施例所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(erasable programmable read only memory,eprom)、闪存、光纤、便携式紧凑磁盘只读存储器(compact disc read-only memory,cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本技术中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本技术中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的计算机程序。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的计算机程序可以用任何适当的介质传输,包括但不限于:无线、有线等等,或者上述的任意合适的组合。
[0143]
附图中的流程图和框图,图示了按照本技术各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。其中,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
[0144]
描述于本技术实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现,所描述的单元也可以设置在处理器中。其中,这些单元的名称在某种情况下并不构成对该单元本身的限定。
[0145]
本技术的另一方面还提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如前所述的方法。该计算机可读存储介质可以是上述实施例中描述的电子设备中所包含的,也可以是单独存在,而未装配入该电子设备中。
[0146]
本技术的另一方面还提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述各个实施例中提供如前所述的方法。
[0147]
应当注意,尽管在上文详细描述中提及了用于动作执行的设备的若干模块或者单元,但是这种划分并非强制性的。实际上,根据本技术的实施方式,上文描述的两个或更多模块或者单元的特征和功能可以在一个模块或者单元中具体化。反之,上文描述的一个模块或者单元的特征和功能可以进一步划分为由多个模块或者单元来具体化。
[0148]
通过以上的实施方式的描述,本领域的技术人员易于理解,这里描述的示例实施方式可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本技术实施方式的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是cd-rom,u盘,移动硬盘等)中或网络上,包括若干指令以使得一台计算设备(可以是个人计算机、服务器、触控终端、或者网络设备等)执行根据本技术实施方式的方法。
[0149]
本领域技术人员在考虑说明书及实践这里公开的实施方式后,将容易想到本技术的其它实施方案。本技术旨在涵盖本技术的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本技术的一般性原理并包括本技术未公开的本技术领域中的公知常识或惯用技术手段。
[0150]
上述内容,仅为本技术的较佳示例性实施例,并非用于限制本技术的实施方案,本领域普通技术人员根据本技术的主要构思和精神,可以十分方便地进行相应的变通或修改,故本技术的保护范围应以权利要求书所要求的保护范围为准。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1