CN111736923A - 数据处理方法、装置、电子设备及可读存储介质 - Google Patents
数据处理方法、装置、电子设备及可读存储介质 Download PDFInfo
- Publication number
- CN111736923A CN111736923A CN202010731829.4A CN202010731829A CN111736923A CN 111736923 A CN111736923 A CN 111736923A CN 202010731829 A CN202010731829 A CN 202010731829A CN 111736923 A CN111736923 A CN 111736923A
- Authority
- CN
- China
- Prior art keywords
- code
- executed
- spark
- file
- programming language
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44568—Immediately runnable code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
Abstract
本申请实施例提供了一种数据处理方法、装置、电子设备及可读存储介质。该方法由终端设备执行,该方法包括:获取数据处理请求,数据处理请求中包括待执行代码文件;加载待执行代码文件所对应的Spark任务执行文件;通过运行Spark任务执行文件,生成待执行代码文件对应的Spark对象;启动Spark对象对应的线程,通过线程将待执行代码文件中的待执行代码发送至Spark集群,以使Spark集群运行待执行代码,并返回运行待执行代码的运行结果。在本申请实施例中,在获取到待执行代码时,只需设置核心处理逻辑即可在终端设备中将待执行代码发送至Spark集群,简化了运行待执行代码的流程,还提高了灵活性和扩展性。
Description
技术领域
本申请涉及计算机技术领域,具体而言,本申请涉及一种数据处理方法、装置、电子设备及可读存储介质。
背景技术
如图1所示,现有技术中在使用NiFi工具执行Spark任务时,需要启动额外的livy服务器(图中的Livy服务器)将Spark任务提交到Spark集群中运行,具体可以包括:NiFi处理器在获取到待执行代码后,通过http(HyperText Transfer Protocol,超文本传输协议)请求方式将待执行代码发送到livy服务器,然后由livy服务器将执行代码提交到Spark集群中运行,Spark集群运行待执行代码后将运行结果返回至NiFi中。
但是,在这过程中需要额外安装配置livy服务器,进而在使用NiFi执行Spark任务时便增加了使用的复杂度、降低了处理效率,并且在扩展灵活性等方面不够灵活。
发明内容
本申请的目的旨在至少能解决上述的技术缺陷之一。
一方面,本申请实施例提供了一种数据处理方法,该方法由终端设备执行,该方法包括:
获取数据处理请求,数据处理请求中包括待执行代码文件;
加载待执行代码文件所对应的Spark任务执行文件;
通过运行Spark任务执行文件,生成待执行代码文件对应的Spark对象;
启动Spark对象对应的线程,通过线程将待执行代码文件中的待执行代码发送至Spark集群,以使Spark集群运行待执行代码,并返回运行待执行代码的运行结果。
另一方面,本申请实施例提供了一种数据处理装置,该装置包括:
处理请求获取模块,用于获取数据处理请求,数据处理请求中包括待执行代码文件;
文件加载模块,用于加载待执行代码文件所对应的Spark任务执行文件;
对象生成模块,用于通过运行Spark任务执行文件,生成待执行代码对应的Spark对象;
代码发送模块,用于启动Spark对象对应的线程,通过线程将待执行代码发送至Spark集群,以使Spark集群运行待执行代码文件,并返回运行待执行代码文件的运行结果。
又一方面,本申请实施例提供了一种电子设备,包括处理器以及存储器:存储器被配置用于存储计算机程序,计算机程序在由处理器执行时,使得处理器执行上述各方面中的各方法。
再一方面,本申请实施例提供了一种计算机可读存储介质,计算机可读存储介质用于存储计算机程序,当计算机程序在计算机上运行时,使得计算机可以执行上述各方面中的各方法。
本申请实施例提供的技术方案带来的有益效果是:
在本申请实施例中,终端设备在获取数据处理请求后,可以通过运行待执行代码文件对应于的Spark任务执行文件,生成待执行代码文件对应的Spark对象,然后可以通过Spark对象对应的线程将待执行代码发送至Spark集群,以使Spark集群可以运行待执行代码。可见,在本申请实施例中,可以将执行待执行代码的底层功能抽象至终端设备内,此时在获取到待执行代码时,即可在终端设备中灵活方便的直接将待执行代码发送至Spark集群,相比于现有技术中以http请求的方式将待执行代码发送至livy服务器,然后再通过livy服务器将待执行代码发送至Spark集群,此时不再需要配置任何外部环境(即livy服务器),只需在终端设备中设置待执行代码的核心处理逻辑即可灵活方便的将待执行代码发送至Spark集群,极大的简化了运行待执行代码的流程;并且对应不同的待执行代码,由于此时不再需要通过livy服务器,便不再需要对livy服务器中根据不同的待执行代码进行相应的配置,提高了灵活性和扩展性。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对本申请实施例描述中所需要使用的附图作简单地介绍。
图1为现有技术中执行Spark任务的流程示意图;
图2为本申请实施例提供的一种数据处理方法的流程示意图;
图3a为本申请实施例提供的一种数据处理的系统结构图;
图3b为本申请实施例提供的一种运行Scala代码的流程示意图;
图4为本申请实施例提供的又一种数据处理方法的流程示意图;
图5为本申请实施例提供的一种发送待执行代码方法的流程示意图;
图6为本申请实施例提供的一种数据处理装置的结构示意图;
图7为本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
下面详细描述本申请的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本申请,而不能解释为对本申请的限制。
本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本申请的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。应该理解,当我们称元件被“连接”或“耦接”到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在中间元件。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的措辞“和/或”包括一个或更多个相关联的列出项的全部或任一单元和全部组合。
云计算(cloud computing)指IT基础设施的交付和使用模式,指通过网络以按需、易扩展的方式获得所需资源;广义云计算指服务的交付和使用模式,指通过网络以按需、易扩展的方式获得所需服务。这种服务可以是IT和软件、互联网相关,也可是其他服务。云计算是网格计算(Grid Computing)、分布式计算(DistributedComputing)、并行计算(Parallel Computing)、效用计算(Utility Computing)、网络存储(Network StorageTechnologies)、虚拟化(Virtualization)、负载均衡(Load Balance)等传统计算机和网络技术发展融合的产物。
随着互联网、实时数据流、连接设备多样化的发展,以及搜索服务、社会网络、移动商务和开放协作等需求的推动,云计算迅速发展起来。不同于以往的并行分布式计算,云计算的产生从理念上将推动整个互联网模式、企业管理模式发生革命性的变革。
首先对本申请涉及的几个名词进行介绍和解释:
NiFi:开源数据处理工具,用于采集数据、转换数据和存储数据等,可以在其中建立任务流进行数据处理,各任务流由很多独立的处理器节点连接起来。
NiFi处理器:NiFi中的任务流执行单元,用于完成某个独立功能。
Spark集群:开源大数据计算引擎。
下面以具体地实施例对本申请的技术方案以及本申请的技术方案如何解决上述技术问题进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。下面将结合附图,对本申请的实施例进行描述。
图2示出了本申请实施例中所提供的一种数据处理方法的流程示意图,其中,该方法可以由终端设备执行,该终端设备可以是智能手机、平板电脑、笔记本电脑、台式计算机、智能音箱、智能手表等,但并不局限于此,终端设备可以可通过有线或无线通信方式与服务器进行直接或间接地连接。可选的,该服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云计算服务的云服务器,本申请在此不做限制。
如图2所示,该方法可以包括:
步骤S101,获取数据处理请求,数据处理请求中包括待执行代码文件。
其中,待执行代码指的是在处理数据时所需要运行的代码,待执行代码文件指的是包括该待执行代码的文件。在实际应用中,当用户需要处理某些数据时可以触发相关操作,终端设备在接收到用户的相关操作时可以生成数据处理请求,该数据处理请求中可以包括处理该数据时需要运行的代码文件;相应的,当终端接收到该数据处理请求时可以基于数据处理请求中包括的待执行代码文件获取到待执行代码。
步骤S102,加载待执行代码文件所对应的Spark任务执行文件。
步骤S103,通过运行Spark任务执行文件,生成待执行代码文件对应的Spark对象。
其中,可执行文件(executable file)指的是可以由操作系统进行加载执行的文件,在执行可执行文件时可以加载该文件到内存中,由操作系统加载程序执行功能。而Spark任务执行文件即指的是通过Spark集群执行待执行代码功能的可执行文件。在实际应用中,终端设备在接收到待执行代码文件后,可以加载该Spark任务执行文件并运行该Spark任务执行文件,生成待执行代码文件对应的Spark对象,基于该Spark对象可以生成待执行代码文件对应的线程,然后基于该线程将待执行代码文件中的待执行代码发送至Spark集群,进而可以通过Spark集群运行该待执行代码的功能。其中,当待执行代码为Scala编程语言时,在基于该线程将待执行代码文件中的待执行代码发送至Spark集群时,可以生成对应于该待执行代码的解释器对象,然后基于该解释器对象通过Spark集群运行该待执行代码的功能。
本申请的可选实施例中,加载对应于待执行代码文件的Spark执行文件,包括:
确定待执行代码文件的编程语言类型;
根据编程语言类型,加载编程语言类型对应的Spark执行文件。
在实际应用中,为了满足多种编程语言类型,可以对不同的编程语言类型配置不同的Spark执行文件。相应的,在加载对应于待执行代码文件的Spark执行文件时,可以先确定待执行代码文件的编程语言类型,然后可以根据对应的编程语言加载对应的Spark执行文件。
步骤S104,启动Spark对象对应的线程,通过该线程将待执行代码文件中的待执行代码发送至Spark集群,以使Spark集群运行待执行代码,并返回运行待执行代码的运行结果。
其中,Spark对象对应的线程可以用于将执行代码发送至Spark集群。在实际应用中,在生成待执行代码文件对应的Spark对象后,可以启动该Spark对象对应的线程,此时便可以基于该线程将待执行代码文件中的待执行代码发送至Spark集群;相应的,当Spark集群接收到待执行代码时,可以运行该待执行代码得到运行结果,并将该运行结果返回终端设备。进一步的,终端设备可以将接收到的运行结果展示给用户。
其中,Spark集群在将运行结果返回终端设备时,具体所采用的实施方式可以根据实际需求预先配置,本申请实施例不限定。例如,Spark集群可以向终端设备返回不同的标识以表示不同的运行结果,如当Spark集群向终端设备返回标识“1”时,则表示该待执行代码件运行成功,当Spark集群向终端设备返回编码“0”时,则表示该待执行代码未运行成功;也可以仅在待执行代码运行成功时,Spark集群向终端设备返回提示消息,而在待执行代码未运行成功时,Spark集群不再向终端设备返回提示消息,相应的,当终端设备在设定时长内未接收到提示消息,则表示该待执行代码运行未成功。
在本申请可选的实施例中,该终端设备包括基于NiFi的终端设备。
在实际应用中,该终端设备可以指的是基于NiFi的终端设备,也就是说,终端设备中可以包含有NiFi处理器,终端设备内的NiFi可以加载待执行代码文件对应于的执行文件,并通过运行该执行文件生成该待执行代码对应的Spark对象,然后通过Spark对象对应的线程将该待执行代码发送至Spark集群,以使Spark集群可以运行该待执行代码。
在本申请实施例中,终端设备在获取数据处理请求后,可以通过运行待执行代码文件对应于的Spark任务执行文件,生成待执行代码文件对应的Spark对象,然后可以通过Spark对象对应的线程将待执行代码发送至Spark集群,以使Spark集群可以运行待执行代码。可见,在本申请实施例中,可以将发送待执行代码的底层功能抽象至终端设备内,此时在获取到待执行代码时,只需在终端设备中设置待执行代码的核心处理逻辑即可在终端设备中直接灵活方便的将待执行代码发送至Spark集群,不再需要配置任何外部环境来执行发送待执行代码的底层功能,不仅极大的简化了运行待执行代码的流程,还提高了灵活性和扩展性。
在本申请可选的实施例中,编程语言类型为Scala编程语言或python编程语言;
若编程语言类型为Scala编程语言,启动Spark对象对应的线程,通过线程将待执行代码文件中的待执行代码发送至Spark集群,包括:
通过线程创建对应于编程语言类型的解释器对象;
通过解释器对象,将待执行代码文件中的待执行代码发送至Spark集群。
其中,编程语言类型可以为Scala编程语言或python编程语言,在待执行代码文件的编程语言类型为Scala编程语言时,其所对应的Spark任务执行文件为预先配置的jar数据包,而当待执行代码文件的编程语言类型为Python编程语言时,其所对应的Spark任务执行文件为预先配置的py文件。
在实际应用中,若待执行代码文件的编程语言类型为Scala编程语言,在通过线程将待执行代码发送至Spark集群时,并不是直接通过线程将待执行代码发送至Spark集群,而是在启动Spark对象对应的线程后,基于该线程创建对应于待执行代码文件的编程语言类型的解释器对象,然后通过解释器对象将待执行代码发送至Spark集群。
在本申请可选的实施例中,通过解释器对象,将待执行代码文件中的待执行代码发送至Spark集群,包括:
加载待执行代码文件中的待执行代码;
启动解释器对象,并通过解释器对象对加载的待执行代码进行编译,得到编译后的执行代码;
将编译后的执行代码发送至Spark集群。
在实际应用中,Spark集群通常是无法直接运行待执行代码文件中的待执行代码(即Scala代码)。基于此,终端设备在将待执行代码文件发送至Spark集群时,可以加载待执行代码文件,以得到待执行代码文件中的待执行代码,然后可以启动所创建的解释器对象,通过解释器对象对加载的待执行代码进行编译,得到Spark集群可以识别运行的执行代码(即编译后的执行代码),并将编译后的执行代码发送至Spark集群,以使Spark集群在接收到编译后的执行代码时可以运行该编译后的执行代码。
在本申请可选的实施例中,通过解释器对象对加载的待执行代码进行编译,得到编译后的执行代码之前,还包括:
将加载的待执行代码封装为可运行类;
通过解释器对象对加载的待执行代码进行编译,得到编译后的执行代码,包括:
通过解释器对象对可运行类进行编译,得到编译后的执行代码。
在实际应用中,为保证Spark集群可以运行终端设备所发送的待执行代码,在通过解释器对象对加载的待执行代码进行编译之前,还以将待执行代码封装为可运行类,然后通过解释器对象对可运行类进行编译,得到编译后的执行代码。此时由于编译后的执行代码是对可运行类进行编译后得到的,进而可以保证在运行待执行代码时,可以获取到待执行代码的上下文信息,并可以对获取到的上下文信息进行相关操作。
在本申请实施例中,对于Scala编程语言的待执行代码,现有技术中需要通过livy服务器基于网络交互将待执行代码发送至Spark集群,此时所发送的待执行代码没有进行上下文封装。而本申请实施例中可以在基于NiFi的终端设备(即NiFi处理器)内嵌入动态解析器,进而可以单独形成一个发送待执行代码体系,此时终端设备可以基于形成的该发送待执行代码体系直接向Spark集群发送待执行代码。
在实际应用中,由于提交的待执行代码是运行待执行代码中最核心的业务部分,而在直接通过终端设备向Spark集群发送待执行代码时,嵌入的动态执行器可以将待执行代码封装为可运行类,此时得到的待执行代码为进行上下文封装后的待执行代码;进一步的,可以基于解释器对象对可运行类进行编译,得到编译后的执行代码并发送至Spark集群;此时Spark集群在运行该待执行代码时,由于接收到的该待执行代码为进行上下文封装后的待执行代码,此时便可以获取到待执行代码的上下文信息,进而通过上下文信息进行相关的数据操作。
在本申请可选的实施例中,该方法还包括:
接收查询请求,查询请求中包括待查询的执行代码的标识;
将查询请求发送至Spark集群;
接收Spark集群根据查询请求返回的标识对应的运行结果;
展示运行结果。
在实际应用中,Spark集群在运行得到待执行代码对应的运行结果后,可以将运行结果与待执行代码的标识进行关联存储,得到运行结果与待执行代码标识的关联关系,进而在已知执行代码的标识时,即可以基于运行结果与待执行代码的标识的关联关系,得到对应于该执行代码标识的执行代码的运行结果。
可选的,当用户想要查询已运行的执行代码的运行结果时,可以触发包括待查询的执行代码的标识的查询请求,终端设备在接收到该查询请求时,可以将查询请求发送至Spark集群;Spark集群在接收到查询请求时,可以根据存储的运行结果与执行代码的标识的关联关系,确定与该标识对应的执行代码的运行结果,然后可以将查询得到的运行结果返回至终端上设备,以使终端设备可以展示该运行结果。其中,终端设备展示该运行结果的方式可以预先配置,本申请实施例不限定。例如,可以通过语音的方式播报该运行结果或显示该运行结果等。
可选的,本申请实施例中所提供的数据处理方法可以应用于基于NiFi工具进行数据处理的场景,如在需要对大量的数据进行数据分析、数据筛选、数据去重等场景时,可以基于终端设备中的NiFi工具采用本申请实施例中所提供的数据处理方法对数据进行处理。
为了更好的理解本申请实施例所提供的方案,下面结合一个具体示例对本申请的方案进行进一步说明。
在本示例中,终端设备内安装有NiFi工具,且该NiFi工具集成有用于进行数据处理的处理器(即后文中的Spark处理器)和动态执行器,并且配置有对应于不同编程代码(Scala编程语言和python编程语言)、且用于执行不同数据处理功能的执行代码文件。相应的,假设用户想要基于NiFi工具并采用Scala编程语言进行数据处理(如想要进行数据筛选)时,此时用户可以触发相应的操作,终端设备接收到用户的该操作时,可以生成获取数据处理请求,即获取用于执行数据筛选功能的Scala待执行代码文件;进一步的,可以加载对应于Scala编程语言的Spark任务执行文件并运行,生成该Scala待执行代码文件对应的Spark对象;然后启动该Spark对象对应的线程,并通过该线程启动动态执行器,基于该动态执行器加载该Scala待执行代码文件中的待执行代码并封装为可运行类、以及基于该该动态执行器创建对应于Scala编程语言类型的解释器对象(即Scala解释器对象),并将通过该解释器对象对该可运行类进行编译,得到编译后的执行代码,然后将编译后的执行代码发送至Spark集群,以使Spark集群运行该用于执行数据筛选功能的Scala待执行代码,进而得到数据筛选结果。
如图3a所示,本申请实施例还提供了一种数据处理的系统结构图,下面结合该系统架构图对本申请实施例提供的方法进行说明。其中,该系统内包括终端设备和Spark集群,终端设备包括NiFi工具,NiFi工具内包括依次连接的多个处理器(图中以处理1、Spark处理器和处理器2为例)和动态执行器。
其中,Spark处理器的配置参数(即Property)以及对应的取值(即Value)可以如表1所示。具体的,编程语言类型(即Type)对应的取值可以为Scala、执行文件(即ExecuteFile)对应的取值可以为/opt/nifi/tencent-spark-parser.jar(即文件所在的目录)、Scala编程语言的执行主类(即Main Class)对应的取值(也就是具体的配置)为com.tencent.ScalaParser、执行参数(即Execute Args)对应的取值可以为/tmp/tencent/scala、应用程序名称(即Application Name)对应的取值可以为SparkJob、Spark目录(即Spark Home)对应的取值可以为/usr/hdp/current/spark、Spark执行模式(即SparkMaster)对应的取值可以为yarn(即Spark的运行模式为yarn运行模式)、部署模式(即Deploy Mode)对应的取值可以为cluster(集群)、驱动程序内存(即Driver Memory)对应的取值可以为1024m(Megabyte,兆字节)、执行器内存(即Executor Memory)对应的取值可以为1024m、执行器数量(即Executor Numbers)对应的取值可以为1、执行器核数(即ExecutorCores)对应的取值可以为1、Spark配置(即Spark Configs)对应的取值可以为No valueset(即无值集)等。
表1
参数(Property) | 取值(Value) |
编程语言类型 | Scala |
执行文件 | /opt/nifi/tencent-spark-parser.jar |
Scala编程语言时的执行主类 | com.tencent/scala |
执行参数 | /tmp/tencent/scala |
应用程序名称 | SparkJob |
Spark目录 | /usr/hdp/current/spark |
Spark执行模式 | yarn |
部署模式 | cluster |
驱动程序内存 | 1024m |
执行器内存 | 1024m |
执行器数量 | 1 |
执行器核数 | 1 |
Spark配置 | No value set |
在实际应用中,当Spark处理器获取到数据待执行代码文件时,若待执行代码文件的编程语言类型为python编程语言,Spark处理器可以加载对应于python编程语言的Spark任务执行文件,然后通过运行Spark任务执行文件生成待执行代码文件对应的Spark对象,并启动该Spark对象对应的线程,然后通过该线程将待执行代码文件中的待执行代码发送至Spark集群,以使Spark集群运行该待执行代码,并返回运行该待执行代码的运行结果。
如图3b所示,若待执行代码文件的编程语言类型为Scala编程语言,Spark处理器(即图中的处理器)可以加载对应于Scala编程语言的Spark任务执行文件,然后通过运行Spark任务执行文件生成待执行代码文件对应的Spark对象,并启动该Spark对象对应的线程(图中的设置代码);相应的,动态执行器加载待执行代码文件中的待执行代码,并将加载的待执行代码封装为可运行类,然后创建对应于Scala编程语言的解释器对象,并基于启动的该解释器对象对该可运行类进行编译,得到编译后的执行代码(即图中的配置运行时上下文环境),并将该编译后的执行代码发送至Spark集群(即图中的提交任务),以使Spark集群运行该待执行代码,并返回运行该待执行代码的运行结果。其中,当Spark集群运行待执行代码后,若运行成功,可以通过动态执行器向Spark处理器返回运行成功消息。
可选的,当用户想要查询已运行的执行代码的运行结果时,Spark处理器可以接收到包括待查询的执行代码标识的查询结果请求(即图中的查询结果),然后可以将该查询请求发送至Spark集群;Spark集群根据该查询请求向Spark处理器返回该标识对应的运行结果(即图中的结果)。其中,如图3b中的A区域所示,当待执行代码文件的编程语言类型为Scala编程语言时,Spark处理器将该查询请求发送至Spark集群时,需要通过动态执行器将查询请求发送至Spark处理。同理,Spark处理接收Spark集群返回的运行结果时,也需要通过动态执行器来接收。
为了更好的理解本申请实施例中所提供的数据处理方法,下面对针对不同的编程语言类型,对本申请实施例中所提供的数据处理方法进行详细说明。具体流程可以如图4所示:
步骤301,在Spark处理器获取到待执行代码文件后,根据待执行代码文件的编程语言类型,加载对应的Spark任务执行文件;
其中,当待执行代码文件的编程语言类型为Scala编程语言时,对应于Scala编程语言的Spark任务执行文件可以为预先配置的jar包(即tencent-spark-parser.jar),而当待执行代码文件的编程语言类型为python编程语言时,对应于python编程语言的Spark任务执行文件可以为预先配置的py文件。
步骤302,Spark处理器生成待执行代码文件对应的Spark对象;
其中,Spark处理器生成该待执行代码文件对应的Spark对象时,可以创建该待执行代码文件对应的Spark启动对象(对应的代码为org.apache.spark.launcher.SparkLauncher),该Spark对象为ExecuteSpark继承抽象类(对应的代码为g.apache.nifi.processor.AbstractProcessor),ExecuteSpark继承抽象类对应的主要配置参数包括编程语言类型(即Type)、执行文件(即Execute File))、Scala编程语言时的执行主类(即Main Class)、执行参数(即Execute Args)、Spark目录(即Spark Home)和Spark执行模式(即SparkMaster)等。
在实际应用中,在创建Spark启动对象后可以根据待执行代码文件对应的编程语言类型,为该Spark启动对象进行参数配置,进而生成该待执行代码文件对应的Spark对象。
其中,当待执行代码的编程语言类型为Scala编程语言时,Spark启动对象对应的配置所对应的代码可以包括:
launcher.setAppResource(Execute File)//设置Spark启动对象对应的执行文件
launcher.setMainClass(Main Class)//设置Spark启动对象对应的执行主类
launcher.setAppArgs(Execute Args)//设置Spark启动对象对应的执行参数
launcher.setSparkHome(Spark Home)//设置Spark启动对象对应的Spark目录
launcher.setMaster(Spark Master)//设置Spark启动对象对应的Spark执行模式
当待执行代码的编程语言类型为python编程语言时,Spark启动对象的对应的配置参数所对应的代码可以包括:
launcher.setAppResource(Execute File)//设置Spark启动对象对应的执行文件
launcher.setAppArgs(Execute Args)//设置Spark启动对象对应的执行参数
launcher.setSparkHome(Spark Home)//设置Spark启动对象对应的Spark目录
launcher.setMaster(Spark Master)//设置Spark启动对象对应的Spark执行模式
步骤303,Spark处理器启动Spark对象对应的线程,通过该线程将待执行代码文件中的待执行代码发送至Spark集群(对应的代码为Process process=launcher.launch());
步骤304,接收Spark集群运行待执行代码后返回的标识,根据返回的标识确定运行结果,若返回的标识为“0”,执行步骤S305,否则执行步骤S306;
其中,Spark处理器通过Spark对象对应的线程将待执行代码文件中的待执行代码发送至Spark集群之后,在接收到Spark集群运行待执行代码后返回的运行结果之前的过程可以称之为等待进程退出(对应的代码为process.waitFor())。
在实际应用中,Spark集群在将待执行代码的运行结果返回至终端设备时,可以返回不同的标识代表不同的运行进行结果(对应的代码为int code=process.exitValue())。
步骤S305,运行结果为运行成功;
步骤S306,运行结果为运行未成功。
可以理解的是,当待执行代码的编程语言类型为Scala编程语言时,Spark处理器通过该Spark对象对应的线程将待执行代码文件中的待执行代码发送至Spark集群时,还需要经过动态执行器,具体可以如图5所示。
步骤S401,在Spark对象对应的线程启动后,通过该线程启动动态执行器,并加载待执行代码文件中的待执行代码;
其中,若待执行代码的编程语言类型为Scala编程语言,则加载待执行代码文件中的待执行代码时,可以通过ScalaParser入口读取待执行代码文件中的待执行代码。
步骤S402,动态执行器将加载的待执行代码封装为可运行类;
其中,动态执行器可以将待执行代码封装为类WrapScript,并继承ScalaScript,此时待执行代码可以使用ScalaScript提供的SparkContext、SQLContext进行上下文的相关操作。可选的,封装后的待执行代码(即可运行类)如下所示:
在实际应用中,SparkContext和SQLContext是解释器内提供的用于在执行待执行代码时运行上下文,当待执行代码存在SparkContext和SQLContext时,即可以实现提交执行待执行代码的任务。在本申请实施例中,在封装待执行代码时,可以将SparkContext、SQLContext和待执行代共同封装,此时得到封装后的待执行代码中包括了创建好的SparkContext和SQLContext。相应的,由于封装后的待执行代码内包括创建好的SparkContext和SQLContext,此时便可以基于创建好的SparkContext和SQLContext来提交任务和执行SQL(Structured Query Language,结构化查询语言)语句。例如,基于SQLContext来提交SQL查询任务(即sqlContext.sql("select*from table"),以及基于SQLContext用来执行SQL语句。
步骤S403,Spark处理器通过Spark对象对应的线程创建Scala解释器对象;
可选的,Scala解释器对象可以为scala.tools.nsc.interpreter.Imain,对应的代码可以为IMain interpreter=new IMain()。
步骤S404,通过Scala解释器对象对可运行类进行编译,得到编译后的执行代码(对应的代码为interpreter.interpret);
步骤S405,将编译后的执行代码发送至Spark集群。
本申请实施例提供了一种数据处理装置,如图6所示,该数据处理装置60可以包括:处理请求获取模块601、文件加载模块602、对象生成模块603以及代码发送模块604,其中,
处理请求获取模块601,用于获取数据处理请求,数据处理请求中包括待执行代码文件;
文件加载模块602,用于加载待执行代码文件所对应的Spark任务执行文件;
对象生成模块603,用于通过运行Spark任务执行文件,生成待执行代码对应的Spark对象;
代码发送模块604,用于启动Spark对象对应的线程,通过线程将待执行代码发送至Spark集群,以使Spark集群运行待执行代码文件,并返回运行待执行代码文件的运行结果。
可选的,文件加载模块在加载待执行代码文件所对应的Spark任务执行文件时,具体用于:
确定待执行代码文件的编程语言类型;
根据编程语言类型,加载编程语言类型对应的Spark任务执行文件。
可选的,编程语言类型为Scala编程语言或python编程语言;
若编程语言类型为Scala编程语言,代码发送模块在启动Spark对象对应的线程,通过线程将待执行代码文件中的待执行代码发送至Spark集群时,具体用于:
通过线程创建对应于编程语言类型的解释器对象;
通过解释器对象,将待执行代码文件中的待执行代码发送至Spark集群。
可选的,代码发送模块在通过解释器对象,将待执行代码文件中的待执行代码发送至Spark集群,具体用于:
加载待执行代码文件中的待执行代码;
启动解释器对象,并通过解释器对象对加载的待执行代码进行编译,得到编译后的执行代码;
将编译后的执行代码发送至Spark集群。
可选的,代码发送模块还用于:
在通过解释器对象对加载的待执行代码进行编译,得到编译后的执行代码之前,将加载的待执行代码封装为可运行类;
代码发送模块在通过解释器对象对加载的待执行代码进行编译,得到编译后的执行代码时,具体用于:
通过解释器对象对可运行类进行编译,得到编译后的执行代码。
可选的,该装置还包括查询模块,具体用于:
接收查询请求,查询请求中包括待查询的执行代码的标识;
将运行结果查询请求发送至Spark集群;
接收Spark集群根据查询请求返回标识对应的运行结果;
展示运行结果。
可选的,该终端设备包括基于NiFi的终端设备。
本申请实施例的数据处理装置可执行本申请实施例提供的一种数据处理方法,其实现原理相类似,此处不再赘述。
本申请实施例提供了一种电子设备,如图7所示,图7所示的电子设备2000包括:处理器2001和存储器2003。其中,处理器2001和存储器2003相连,如通过总线2002相连。可选地,电子设备2000还可以包括收发器2004。需要说明的是,实际应用中收发器2004不限于一个,该电子设备2000的结构并不构成对本申请实施例的限定。
其中,处理器2001应用于本申请实施例中,用于实现图6所示的各模块的功能。
处理器2001可以是CPU,通用处理器,DSP,ASIC,FPGA或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本申请公开内容所描述的各种示例性的逻辑方框,模块和电路。处理器2001也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,DSP和微处理器的组合等。
总线2002可包括一通路,在上述组件之间传送信息。总线2002可以是PCI总线或EISA总线等。总线2002可以分为地址总线、数据总线、控制总线等。为便于表示,图7中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
存储器2003可以是ROM或可存储静态信息和计算机程序的其他类型的静态存储设备,RAM或者可存储信息和计算机程序的其他类型的动态存储设备,也可以是EEPROM、CD-ROM或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其他磁存储设备、或者能够用于携带或存储或以数据结构形式的期望的计算机程序并能够由计算机存取的任何其他介质,但不限于此。
存储器2003用于存储执行本申请方案的应用程序的计算机程序,并由处理器2001来控制执行。处理器2001用于执行存储器2003中存储的应用程序的计算机程序,以实现图6所示实施例提供的数据处理装置的动作。
本申请实施例提供了一种电子设备,包括处理器以及存储器:存储器被配置用于存储计算机程序,计算机程序在由所述处理器执行时,使得所述处理器上述实施例中的任一项方法。
本申请实施例提供了一种计算机可读存储介质,所述计算机可读存储介质用于存储计算机程序,当所述计算机程序在计算机上运行时,使得计算机可以执行上述实施例中的任一项方法。
根据本申请的一个方面,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行各种可选实现方式中提供的方法。
本申请中的一种计算机可读存储介质所涉及的名词及实现原理具体可以参照本申请实施例中的一种数据处理方法,在此不再赘述。
应该理解的是,虽然附图的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,其可以以其他的顺序执行。而且,附图的流程图中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,其执行顺序也不必然是依次进行,而是可以与其他步骤或者其他步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
以上所述仅是本申请的部分实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本申请的保护范围。
Claims (12)
1.一种数据处理方法,其特征在于,所述方法由终端设备执行,所述方法包括:
获取数据处理请求,所述数据处理请求中包括待执行代码文件;
加载所述待执行代码文件所对应的Spark任务执行文件;
通过运行所述Spark任务执行文件,生成所述待执行代码文件对应的Spark对象;
启动所述Spark对象对应的线程,通过所述线程将所述待执行代码文件中的待执行代码发送至Spark集群,以使所述Spark集群运行所述待执行代码,并返回运行所述待执行代码的运行结果。
2.根据权利要求1所述的方法,其特征在于,所述加载所述待执行代码文件所对应的Spark任务执行文件,包括:
确定所述待执行代码文件的编程语言类型;
根据所述编程语言类型,加载所述编程语言类型对应的Spark任务执行文件。
3.根据权利要求2所述的方法,其特征在于,所述编程语言类型为Scala编程语言或python编程语言;
若所述编程语言类型为Scala编程语言,所述启动所述Spark对象对应的线程,通过所述线程将所述待执行代码文件中的待执行代码发送至Spark集群,包括:
通过所述线程创建对应于所述编程语言类型的解释器对象;
通过所述解释器对象,将所述待执行代码文件中的待执行代码发送至Spark集群。
4.根据权利要求3所述的方法,其特征在于,所述通过所述解释器对象,将所述待执行代码文件中的待执行代码发送至Spark集群,包括:
加载所述待执行代码文件中的待执行代码;
启动所述解释器对象,并通过所述解释器对象对加载的所述待执行代码进行编译,得到编译后的执行代码;
将所述编译后的执行代码发送至Spark集群。
5.根据权利要求4所述的方法,其特征在于,所述通过所述解释器对象对加载的所述待执行代码进行编译,得到编译后的执行代码之前,还包括:
将加载的所述待执行代码封装为可运行类;
所述通过所述解释器对象对加载的所述待执行代码进行编译,得到编译后的执行代码,包括:
通过所述解释器对象对所述可运行类进行编译,得到编译后的执行代码。
6.根据权利要求1至5任一项所述的方法,其特征在于,所述方法还包括:
接收查询请求,所述查询请求中包括待查询的执行代码的标识;
将所述运行结果查询请求发送至所述Spark集群;
接收所述Spark集群根据所述查询请求返回所述标识对应的运行结果;
展示所述运行结果。
7.根据权利要求1至5任一项所述的方法,其特征在于,所述终端设备包括基于NiFi的终端设备。
8.一种数据处理装置,其特征在于,所述装置包括:
处理请求获取模块,用于获取数据处理请求,所述数据处理请求中包括待执行代码文件;
文件加载模块,用于加载所述待执行代码文件所对应的Spark任务执行文件;
对象生成模块,用于通过运行所述Spark任务执行文件,生成所述待执行代码对应的Spark对象;
代码发送模块,用于启动所述Spark对象对应的线程,通过所述线程将所述待执行代码发送至Spark集群,以使所述Spark集群运行所述待执行代码文件,并返回运行所述待执行代码文件的运行结果。
9.根据权利要求8所述的装置,其特征在于,所述文件加载模块在加载所述待执行代码文件所对应的Spark任务执行文件时,具体用于:
确定所述待执行代码文件的编程语言类型;
根据所述编程语言类型,加载所述编程语言类型对应的Spark任务执行文件。
10.根据权利要求8所述的装置,其特征在于,所述编程语言类型为Scala编程语言或python编程语言;
若所述编程语言类型为Scala编程语言,所述代码发送模块在启动所述Spark对象对应的线程,通过所述线程将所述待执行代码文件中的待执行代码发送至Spark集群时,具体用于:
通过所述线程创建对应于所述编程语言类型的解释器对象;
通过所述解释器对象,将所述待执行代码文件中的待执行代码发送至Spark集群。
11.一种电子设备,其特征在于,包括处理器以及存储器:
所述存储器被配置用于存储计算机程序,所述计算机程序在由所述处理器执行时,使得所述处理器执行权利要求1-7任一项所述的方法。
12.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质用于存储计算机程序,当所述计算机程序在计算机上运行时,使得计算机可以执行上述权利要求1-7中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010731829.4A CN111736923A (zh) | 2020-07-27 | 2020-07-27 | 数据处理方法、装置、电子设备及可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010731829.4A CN111736923A (zh) | 2020-07-27 | 2020-07-27 | 数据处理方法、装置、电子设备及可读存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111736923A true CN111736923A (zh) | 2020-10-02 |
Family
ID=72657844
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010731829.4A Pending CN111736923A (zh) | 2020-07-27 | 2020-07-27 | 数据处理方法、装置、电子设备及可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111736923A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112988131A (zh) * | 2021-02-25 | 2021-06-18 | 未鲲(上海)科技服务有限公司 | 计算引擎任务执行方法、设备及可读存储介质 |
CN113642021A (zh) * | 2021-08-20 | 2021-11-12 | 深信服科技股份有限公司 | 一种业务代码提交方法、处理方法、装置及电子设备 |
CN115080151A (zh) * | 2022-07-22 | 2022-09-20 | 平安银行股份有限公司 | App启动流程控制方法、计算机可读存储介质及终端 |
-
2020
- 2020-07-27 CN CN202010731829.4A patent/CN111736923A/zh active Pending
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112988131A (zh) * | 2021-02-25 | 2021-06-18 | 未鲲(上海)科技服务有限公司 | 计算引擎任务执行方法、设备及可读存储介质 |
CN113642021A (zh) * | 2021-08-20 | 2021-11-12 | 深信服科技股份有限公司 | 一种业务代码提交方法、处理方法、装置及电子设备 |
CN115080151A (zh) * | 2022-07-22 | 2022-09-20 | 平安银行股份有限公司 | App启动流程控制方法、计算机可读存储介质及终端 |
CN115080151B (zh) * | 2022-07-22 | 2023-07-14 | 平安银行股份有限公司 | App启动流程控制方法、计算机可读存储介质及终端 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111736923A (zh) | 数据处理方法、装置、电子设备及可读存储介质 | |
CN111026634A (zh) | 一种接口自动化测试系统、方法、装置及存储介质 | |
CN113220431B (zh) | 跨云的分布式数据任务调度方法、设备及存储介质 | |
CN112769706B (zh) | 组件化路由方法及系统 | |
CN109254854A (zh) | 异步调用方法、计算机装置及存储介质 | |
CN107977260B (zh) | 任务提交方法及装置 | |
CN111258726B (zh) | 任务调度方法和装置 | |
CN109254765B (zh) | 定时任务管理方法、装置、计算机设备及存储介质 | |
CN114416075A (zh) | 业务处理方法及装置 | |
CN107273226B (zh) | 在安卓系统中集成组件及调用被集成组件的方法和装置 | |
CN116523457A (zh) | 基于业务流程的工作流处理方法、装置、设备及存储介质 | |
WO2019117767A1 (en) | Method, function manager and arrangement for handling function calls | |
CN113051245A (zh) | 用于迁移数据的方法、装置及系统 | |
US9537931B2 (en) | Dynamic object oriented remote instantiation | |
CN110874278A (zh) | 外部系统的嵌入方法、工作流系统、设备及存储介质 | |
CN114860204A (zh) | 程序处理、运行方法、装置、终端、智能卡及存储介质 | |
CN106570143B (zh) | 一种发送响应对象的方法和装置 | |
CN112035439A (zh) | 数据迁移方法及装置、计算机设备及计算机可读存储介质 | |
CN111160403A (zh) | 一种api接口复用发现的方法及装置 | |
CN111078571A (zh) | 模拟响应的测试方法、终端设备及计算机可读存储介质 | |
CN110442392B (zh) | 一种包隔离方法、装置、电子设备和存储介质 | |
CN113220305B (zh) | 一种线索对接方法、装置、电子设备及存储介质 | |
CN113761548B (zh) | 用于Shuffle过程的数据传输方法和装置 | |
CN112817813B (zh) | 基于react hooks的数据收集方法、装置及设备 | |
CN113505036B (zh) | 一种应用监控方法、客户端和服务器 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 40030698 Country of ref document: HK |
|
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |