CN112527385B - 数据加工方法、装置、工作节点及存储介质 - Google Patents
数据加工方法、装置、工作节点及存储介质 Download PDFInfo
- Publication number
- CN112527385B CN112527385B CN202110186620.9A CN202110186620A CN112527385B CN 112527385 B CN112527385 B CN 112527385B CN 202110186620 A CN202110186620 A CN 202110186620A CN 112527385 B CN112527385 B CN 112527385B
- Authority
- CN
- China
- Prior art keywords
- data
- processed
- logic
- processing
- file
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/80—Information retrieval; Database structures therefor; File system structures therefor of semi-structured data, e.g. markup language structured data such as SGML, XML or HTML
- G06F16/81—Indexing, e.g. XML tags; Data structures therefor; Storage structures
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及大数据技术领域,提供了一种数据加工方法、装置、工作节点及存储介质,应用于Spark集群中的工作节点,所述方法包括:获取待加工数据;对预先生成的XML配置文件进行解析,以确定对所述待加工数据进行加工的计算逻辑,其中,所述XML配置文件是根据预先指定的针对所述待加工数据进行加工的加工参数生成的;依据所述计算逻辑,对所述待加工数据进行加工。相对于现有技术,本发明极大地提高了利用Spark进行数据加工的易用性,最终提高了使用效率。
Description
技术领域
本发明涉及大数据技术领域,具体而言,涉及一种数据加工方法、装置、工作节点及存储介质。
背景技术
目前各行各业每天都在产生大量的数据,数据的种类和体量越来越大,对存储的依赖和数据计算能力的要求也越来越高。仅依靠单机的数据计算已不足以满足海量的数据处理。分布式计算引擎为解决海量数据计算提供了一种技术手段。Spark(一种专为大规模数据处理而设计的快速通用的计算引擎)因其独特的内存计算优势和方便的应用程序编程接口API(Application Programming Interface,API)操作,不仅处理速度快,而且社区活跃。
目前Spark使用者需要对Spark底层技术的知识有较深的理解和掌握,因此,利用Spark进行数据处理的易用性不高,从而影响使用效率。
发明内容
本发明的目的在于提供了一种其能够使用户不需要对Spark底层技术的知识有较深的理解和掌握,只需要指定计算逻辑即可实现利用Spark对待加工数据进行加工,因而极大地提高了利用Spark进行数据加工的易用性,最终提高了使用效率。
为了实现上述目的,本发明采用的技术方案如下:
第一方面,本发明提供了一种数据加工方法,应用于Spark集群中的工作节点,所述方法包括:获取待加工数据;对预先生成的XML配置文件进行解析,以确定对所述待加工数据进行加工的目标计算逻辑,其中,所述XML配置文件是根据预先指定的针对所述待加工数据进行加工的计算逻辑生成的;依据所述目标计算逻辑,对所述待加工数据进行加工。
第二方面,本发明提供了一种数据加工装置,应用于Spark集群中的工作节点,所述装置包括:获取模块,用于获取待加工数据;解析模块,用于对预先生成的XML配置文件进行解析,以确定对所述待加工数据进行加工的目标计算逻辑,其中,所述XML配置文件是根据预先指定的针对所述待加工数据进行加工的计算逻辑生成的;加工模块,用于依据所述目标计算逻辑,对所述待加工数据进行加工。
第三方面,本发明提供了一种工作节点,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现如上述的数据加工方法。
第四方面,本发明提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述的数据加工方法。
相对于现有技术,本发明能够根据预先指定的针对所述待加工数据进行加工的计算逻辑生成XML配置文件,对待加工数据进行加工时首先解析XML文件,再根据XML文件解析出的目标计算逻辑对待加工数据进行加工,由于用户不需要对Spark底层技术的知识有较深的理解和掌握,只需要指定计算逻辑即可实现利用Spark对待加工数据进行加工,因而极大地提高了利用Spark进行数据加工的易用性,最终提高了使用效率。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1示出了本发明实施例提供的应用场景的示意图。
图2示出了本发明实施例提供的工作节点的方框示意图。
图3示出了本发明实施例提供的一种数据加工方法的流程图。
图4示出了本发明实施例提供的计算逻辑包括filter运算时的数据加工方法的流程图。
图5示出了本发明实施例提供的计算逻辑包括filter运算和map运算时的数据加工方法的流程图。
图6示出了本发明实施例提供的计算逻辑包括统计运算时的数据加工方法的流程图。
图7示出了本发明实施例提供的得到待加工数据的方法的流程图。
图8示出了本发明实施例提供的处理加工结果的方法的流程图。
图9示出了本发明实施例提供的数据加工装置的方框示意图。
图标:10-工作节点;11-处理器;12-存储器;13-总线;14-通信接口;20-主节点;30-客户端;100-数据加工装置;110-获取模块;120-解析模块;130-加工模块。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。
因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
在本发明的描述中,需要说明的是,若出现术语“上”、“下”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,或者是该发明产品使用时惯常摆放的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。
此外,若出现术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
需要说明的是,在不冲突的情况下,本发明的实施例中的特征可以相互结合。
Spark中的数据加工主要分为3层,第一层,利用Spark的原生API和弹性分布式数据集RDD(Resilient Distributed Dataset,RDD)做数据加工,由于Spark原生API是Spark的底层实现技术,因此可以基于API直接操作RDD,并在API内基于数据和集群本身做很多优化,可控性高,但是其开发门槛高,对程序的编程功底要求高,而且需要很懂Spark API的优缺点,才能开发出高性能的数据加工服务,对于普通的程序员或者普通的非IT人员来说,学习成本大,因而易用性极低。第二层,利用Spark的dataFrame框架做数据加工,SparkdataFrame是建立在Spark API之上的一种数据加工框架,其需要编写脚本,需要普通使用者懂得脚本语言,因此,易用性虽然有所提高,但是,对于一般的数据分析师而言,仍然存在一定的开发门槛,可控性不高,而且用脚本写的性能也不能得到保障。第三层,利用SparkSQL做数据加工,Spark SQL是建立在Spark API和Spark dataFrame之上的高层API接口,让用户做数据加工和写SQL一样,用户只需要写SQL便可以完成数据加工,易用性进一步提高,但是也需要用户学习SQL语法,需要懂得一定的数据加工技术,同时,Spark SQL计算速度慢,内部要进行SQL语法转成底层API算子的转换,因此计算效率不高,也不能基于数据和集群本身做计算优化,另外,Spark SQL需要极大地内存资源,且可控性极差,在Spark集群的计算资源极其有限的情况下,计算能力差,数据加工性能不高。
有鉴于此,本发明实施例提供一种数据加工方法、装置、工作节点及存储介质,即降低了用户使用Spark进行数据加工的开发门槛,提高了易用性,最终提高了使用效率,又能实现对数据加工过程的计算优化,提高数据加工性能,下面将对其进行详细描述。
请参考图1,图1示出了本发明实施例提供的应用场景的示意图,图1中,Spark集群包括工作节点10和主节点20,主节点20和客户端30及工作节点10均通信连接。
作为一种具体实施方式,用户可以通过客户端30上展示的网页选择需要的计算逻辑,计算逻辑可以包括源表、目的表及计算参数,源表指用于表征待加工数据所属的数据表、目的表指用于表征加工结果格式的数据表、计算参数指用于表征计算逻辑的参数,用户在客户端30选定所需要的计算逻辑后,客户端30根据计算逻辑生成对应的XML配置文件,XML配置文件包括源文件、目的文件及计算逻辑文件,源文件包括源表的结构信息,目的文件包括目的表的结构信息,计算逻辑文件是根据计算参数生成的。客户端30在生成XML配置文件后,将XML配置文件发送至主节点20,主节点20再将该XML配置文件发送至各工作节点10,以实现各工作节点10对于数据的并行加工。
作为另一种具体实施方式,用于也可以根据自己的需要按照预设格式编写XML配置文件,然后将XML配置文件存储至主节点20的预设目录,以使主节点20将该XML配置文件发送至各工作节点10。
为了保证系统的可靠性,在动态的计算JOB任务时防止计算报错,计算前对XML格式有一定的要求。作为一种具体实现方式,对于源表,XML配置文件中的源文件里的配置名必须是源表名,表字段的顺序和名字要对齐,字段类型必填。对于目的表,XML配置文件中的目的文件里的配置名必须是目的表名,表字段的顺序和名字要对齐,字段类型必填。对于XML配置文件中的计算逻辑文件,其源表字段必须是源表表名,其目的表字段必须是目的表名,可以指定维度字段和/或Counter字段,维度字段和/或Counter字段加起来必须和目的表是一样的,字段名和顺序必须保持一样。
作为一种具体实现方式,在集群中部署有Hadoop分布式文件系统时,XML配置文件中的源文件存储必须以原表表名建立目录存储,里面以XML格式放置源表的表结构,在Hadoop上的存储路径为:/dir/table。XML配置文件中的目的文件必须以目的表名建立目录存储,里面以XML格式放置目的表的表结构,在Hadoop上的存储路径为:/dir/table。下面是本发明实施例提供的以XML格式的任意表结构的示例,该任意表可以是源表、也可以是目的表:
<table> <tableName>cn_apply_cnt</ tableName> <cols> <col> <name>applyReason</ name> <dataType>string</ dataType> <default>""</ default> <desc>申请原因</desc> </col> <col> <name>apply Fail</ name> <dataType>int</ dataType> <default>0</ default> <desc>申请失败人数</desc> </col> </cols>
</ table>
在本实施例中,XML配置文件中的计算逻辑文件是数据计算加工的核心逻辑,其是任务调度的JOB检测目录,其在Hadoop上的存储是以XML格式的文件,下面示出了本发明实施例提供的计算逻辑XML的结构示例:
<tasks>
<job Name>cn_apply_cnt job_15min
</job Name>
<counters>
<counter>
<name>apply Num</ name>
<dataType>long</ dataType>
<default>0</ default>
<filter>apply Fail!=0</ filter>
<calculate>apply Fail+apply Success</ calculate>
<aggregate>sum</ aggregate>
<desc>申请人数</desc>
</ counter>
<counter>
<name>avg Apply Num</ name>
<dataType>long</ dataType>
<default>0</ default>
<filter>avgApplyFail!=0</ filter>
<calculate>avg Apply Fail+avg Apply Success</ calculate><aggregate>avg</ aggregate>
<desc>平均申请人数</desc>
</ counter>
</ counters>
<dims>
<dim>
<name>apply</ name>
<dataType>String</ dataType>
<default>""</ default>
<desc>申请</desc>
</dim>
<dim>
<name>channel Apply</ name>
<dataType>String</ dataType>
<default>""</ default>
<desc>渠道</desc>
</dim>
</dims>
</ tasks>
该XML结构描述了数据加工逻辑,其中task表示一个计算任务,一个计算任务可以有多个job,一个job任务分维度dims和汇聚counters,一个dims里可以有多个维度,一个维度dim表示一个分组,一个汇聚counters可以有多个指标汇聚逻辑,一个counter表示一个指标汇聚逻辑,counter里的name是指标名字,dataType是数据类型,default是指标默认值,filter是指标过滤字段,calculate是指标加工逻辑,aggregate是指标的汇聚逻辑。计算逻辑XML的存储路径为:/dir/job。
在本实施例中,因其XML中有<、>等特殊符号,因此客户端30在生成XML配置文件时需要进行转义,然后调用HadoopFS(也称为Hdfs)的FileSystem进行文件的写操作,将文件从客户端30写入到主节点20的HadoopFS上的预设目录。
在本实施例中,主节点20在后台实时运行检测有没有被调度任务的XML配置文件生成,主节点20在接收到XML配置文件后,创建一个Spark上下文SparkContext,工作节点10基于SparkContext加载数据,加载源表结构和目的表结构,加载计算逻辑,动态编译计算公式,动态计算数据,得到计算结果,最后对结果数据进行存储。也就是说,工作节点10利用SparkContext读取数据生成RDD,在RDD中调用flatMap算子,读取XML配置文件,调用公式计算DSL进行公式的编译,然后循环进行每一个指标的条件判断和计算,计算时将变量的值根据字段的列名字传入到变量集合,将变量集合传入编译后的公式中获取到计算结果,然后调用reduceByKey等操作进行数据汇聚,最后保存数据。具体来说,主要包括以下步骤:
(1)计算任务检测:
主节点20根据调度引擎查看当前应该计算那些任务,每个计算任务的调度时间不同,根据当前调度时间,确定哪些JOB该被调度,从而确定计算JOB列表。
(2)XML配置文件检测加载:
计算任务的JOB被调度之后,主节点20首先会起一个Spark上下文SparkContext,SparkContext是Spark中和集群以及数据文件交互的入口,XML配置文件通常比较小,可以在每个工作节点的Executor广播一份,这样可以提高效率,只需编译一次,不用每个Task都编译。本发明实施例使用Collect算子,把XML配置文件编译加载到Driver端,并使用Broadcast把其广播到Spark集群中的每个工作节点10。
(3)加载数据:
XML配置文件如果满足条件,则正式进行数据计算,在JOB层起一个Spark上下文SparkContext,简称sc,利用sc.textFile读取数据。为了提升Spark的加工能力,在读取文件的时候,对小文件进行了合并,以提高Spark的数据加工能力,同时对读取数据进行了优化。
Spark是一个分布式计算引擎,没有自己的文件系统,需要使用Hdfs分布式文件系统进行数据存储。其Task数等于分区数,分区数等于Hadoop的Block数,Spark的Task和Partition是一一对应关系,小文件会导致Task很多,Task一多,核数有限,会导致加工的批次变多,从而性能下降,因此在读取数据时对小文件进行合并是很有必要的。本发明实施例对小文件进行了合并,具体实现:Spark读文件函数textFile方法内部调用的是newHadoopFile进行文件读取的,其可以定义读取的Key,Value数据结构,采取文件流的方式边读取边进行文件合并,设置一个配置参数,比如fileMaxSize控制多少字节组织成一个Partition,从而减少Task的数量。
(4)flapMap计算:
对于计算逻辑里的Counter字段利用flatMap算子实现过滤,数据加工等。在利用Spark的API进行数据开发时,有一个优化原则是先过滤数据,尽量减少使用API的个数。因此,本发明实施例针对Counter的计算做了优化。合并对一个RDD的多个map和filter操作,保持一个原则,读取完数据能进行filter先进行filter操作,同时对一个RDD比如有:rdd.filter().map().filter()map()…..,用flatMap进行替代。在具体的加工过程中,对于公式的计算,使用领域特定语言DSL(Domain Specific Language,DSL)写一套表达式计算逻辑,针对用户配置的filter字段公式进行过滤,对calculate字段公式进行计算。DSL用Scala的解析组合子实现,具体实现方法为:先写出上下文无关文法;继承Java的JavaTokenParsers;使用相应的运算符递归出语法,~表示顺序组合,opt表示可选项,rep表示重复项等;自定义函数,比如MAX,MIN,AVG,SUM自定义函数实现;^^对编译结果进行转义,转成函数加工,然后实现每一个函数的计算逻辑。
还需要说明的是,除了使用DSL实现表达式计算逻辑之外,还可以使用Antlr4实现表达式计算逻辑,Antlr (ANother Tool for Language Recognition) 是一个强大的跨语言语法解析器,可以用来读取、加工、执行或翻译结构化文本或二进制文件。它被广泛用来构建语言,工具和框架。Antlr可以从语法上来生成一个可以构建和遍历解析树的解析器。
(5)reduceByKey计算:
数据Shuffule是大数据加工性能差的主要因素,大量的数据传输会导致网络IO和带宽压力以及磁盘压力。Shuffule是指将分布在集群中多个工作节点10上的同一个key,拉取到同一个节点上,进行聚合或join等操作。比如reduceByKey、join等算子,都会触发shuffle操作。在开发过程中,应该进行使用Shuffule数据量少的算子,能用map之类的算子就尽量使用,能不用GroupByKey、join、distinct、repartition等就尽量不用。根据用户配置的计算逻辑,如果counter字段中的aggregate有sum,avg,max,min等操作,则调用reduceByKey进行数据汇聚,并在汇聚之后调用flatMap进行相应的求和,求平均值,求最大值,最小值等操作。如果aggregate字段为空,则直接结束任务。
(6)数据存储
数据计算之后是RDD,需要对数据进行保存,使用saveAsTextfile对数据进行保存,把数据保存到Hadoop上。
在图1的基础上,请参照图2,图2示出了本发明实施例提供的图1中的工作节点10的方框示意图。工作节点10包括处理器11、存储器12、总线13、通信接口14。处理器11、存储器12通过总线13连接,处理器11通过通信接口14与客户端30或者工作节点10通信。
处理器11可能是一种集成电路芯片,具有信号的加工能力。在实现过程中,上述方法的各步骤可以通过处理器11中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器11可以是通用处理器,包括中央处理器(Central Processing Unit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(DSP)、专用集成电路(ASIC)、现成可编程门阵列(FPGA)或者其它可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
存储器12用于存储程序,例如本发明实施例中的数据加工装置100,数据加工装置100包括至少一个可以软件或固件(firmware)的形式存储于存储器12中的软件功能模块,处理器11在接收到执行指令后,执行所述程序以实现本发明实施例中的数据加工方法。
存储器12可能包括高速随机存取存储器(RAM:Random Access Memory),也可能还包括非易失存储器(non-volatile memory)。可选地,存储器12可以是内置于处理器11中的存储装置,也可以是独立于处理器11的存储装置。
总线13可以是ISA总线、PCI总线或EISA总线等。图2仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。
在图1和图2的基础上,本发明实施例还提供了一种数据加工方法,请参照图3,图3示出了本发明实施例提供的一种数据加工方法的流程图,该方法包括以下步骤:
步骤S100,获取待加工数据。
在本实施例中,待加工数据可以存储于一个或者多个文件中。工作节点10可以通过读取对应的文件获取待加工数据。
步骤S110,对预先生成的XML配置文件进行解析,以确定对待加工数据进行加工的目标计算逻辑,其中,XML配置文件是根据预先指定的针对待加工数据进行加工的计算逻辑生成的。
在本实施例中,XML配置文件指明了待加工数据所属的源表的结构,加工之后的数据的组织格式,对待加工数据进行加工的计算逻辑等,其中,计算逻辑可以分为维度和Counter,维度是用来分组,Counter是用来做汇聚的。维度对应Spark里的groupByKey,也就是SQL里的group by,Counter对应Spark的reduceByKey里的汇聚。
在本实施例中,目标计算逻辑是根据计算逻辑中包括的不同的逻辑计算确定的最终满足性能优化需求的逻辑计算方式及逻辑计算顺序。
作为一种具体实施方式,在选择计算逻辑进行配置时,维度的配置可以直接从源表拖一些源表的维度(例如源表的字段),其维度可以是源表的子维度或者全维度(可以是源表的部分字段或者是全部字段)。
作为一种具体实施方式,Counter的配置原则是可以对Counter重命名的,也可以起新的名字,取决于用户。对于每个指标的加工,页面支持,算数运算,+,-,*,/,逻辑运算,AND,OR,NOT,>=,>,<=,<,=,==等,以及SUM,MAX,MIN,AVG,IF,CASE WHEN,JOIN,FILTER等算子,在界面可选择,根据具体的加工逻辑由用户自行配置,比如:选择目的表的某一列比如USER_COUNTER,然后选择=号,再选择一些条件,比如IF(MSISDN)=0) SUM(MSISDN) ELSE 0等,根据需要配置公式。公式可以是数值计算逻辑,也可以是过滤,也可以是针对某个字段求和或者求平均值等。
作为一种具体的页面操作方式,每配置一个维度或者Counter,则插入相应的信息到页面下面,新生成一行。针对已经配置的计算逻辑,支持任意一行公式的编辑修改和重新保存等。
本发明实施例提供的数据加工方法不需要用户学习SQL语法,只需要配置计算XML便可以完成数据计算,把从原始数据到加工到目的数据的计算逻辑拆分成维度和Counter的XML配置逻辑,在配置字段中编写表达式计算逻辑,如a+b之类的操作,后台计算时会根据跨语言的解析器动态解析表达式做计算,再进行一定的聚合得出最终结果。
步骤S120,依据目标计算逻辑,对待加工数据进行加工。
在本实施例中,计算逻辑中涉及的运算可以、但不限于filter运算、map运算、统计运算或者其中二者或者三者的结合运算。
本发明实施例提供的上述方法,根据预先指定的针对所述待加工数据进行加工的计算逻辑生成XML配置文件,对待加工数据进行加工时首先解析XML文件,再根据由XML文件解析出的计算逻辑确定的目标计算逻辑对待加工数据进行加工,由于用户不需要对Spark底层技术的知识有较深的理解和掌握,只需要指定计算逻辑或者只需要简单的XML配置即可实现利用Spark对待加工数据进行加工,因而极大地提高了利用Spark进行数据加工的易用性,最终提高了使用效率。
在图3的基础上,本发明实施例还提供了一种具体的确定目标计算逻辑的实现方式,请参照4,图4示出了本发明实施例提供的计算逻辑包括filter运算时的数据加工方法的流程图,步骤S110包括以下子步骤:
子步骤S110-10,对预先生成的XML配置文件进行解析,以得到包括filter运算的第一处理逻辑。
在本实施例中,处理逻辑可以包括filter运算,filter运算中的多个参数是由“与”组合起来的:每个表达式都必须为真才能让一行观测包含在输出中。例如,找出11月或12月出发的所有航班:filter(flights, month == 11 | month == 12)。
子步骤S110-11,将目标计算逻辑确定为对待加工数据优先进行filter处理。
在本实施例中,当处理逻辑包括filter运算时,优先处理filter运算对待加工数据进行优先过滤,以尽量减少使用API的个数,从而可以提高数据加工的效率。
本发明实施例提供的上述方法,当处理逻辑包括filter运算时,优先处理filter运算对待加工数据进行优先过滤,尽量减少使用API的个数,提高了数据加工的效率。
在图3的基础上,本发明实施例还提供了另一种具体的确定计算逻辑的实现方式,请参照5,图5示出了本发明实施例提供的计算逻辑包括filter运算和map运算时的数据加工方法的流程图,步骤S110还包括以下子步骤:
子步骤S110-20,对预先生成的XML配置文件进行解析,以得到包括filter运算和map运算的第二计算逻辑。
在本实施例中,如果计算逻辑中包括filter运算,但未同时包括filter运算和map运算,此时可以采用子步骤S110-10和子步骤S110-11确定目标计算逻辑。
在本实施例中,如果计算逻辑中同时包括filter运算和map运算,为了对数据加工进行优化,首先将filter运算和map运算合并成flatMap运算,然后再对待加工数据进行flatMap运算。
在本实施例中,map运算是对RDD中的每个元素都执行一个指定的函数来产生一个新的RDD,任何原RDD中的元素在新RDD中有且只有一个元素对应。flatMap运算中原RDD中的每个元素可生成一个或多个元素来构建新RDD,例如:待加工的数据如下:
val rdd = sc.parallelize(List("coffee panda","happy panda","happiestpanda party")),利用map运算得到的结果为:Array[String] = Array(coffee panda,happy panda, happiest panda party),利用flatMap运算得到的结果为:Array[String]= Array(coffee, panda, happy, panda, happiest, panda, party)。
子步骤S110-21,将目标计算逻辑确定为将filter运算和map运算合并成flatMap运算、并对待加工数据进行flatMap运算。
在本实施例中,将filter运算和map运算合并成flatMap运算,简化了运算的加工过程,提高了数据加工的效率。
在图3的基础上,本发明实施例还提供了另一种具体的确定目标计算逻辑的实现方式,请参照6,图6示出了本发明实施例提供的计算逻辑包括统计运算时的数据加工方法的流程图,步骤S110还包括以下子步骤:
子步骤S110-30,对预先生成的XML配置文件进行解析,以得到包括统计运算的第三计算逻辑。
在本实施例中,作为一种具体实施方式,统计运算包括、但不限于counter字段中的aggregate有sum(求和),avg(求平均值),max(求最大值),min(求最小值)等操作。
子步骤S110-31,将目标计算逻辑确定为先通过reduceByKey运算对待加工数据进行汇聚,再对汇聚后的数据通过flatMap运算进行统计。
在本实施例中,reduceByKey运算用于对每个key对应的多个value进行merge(合并)操作,最重要的是它能够在本地先进行merge操作,并且merge操作可以通过函数自定义。例如,待加工数据为:val rdd = sc.parallelize(List((“a”,2),(“b”,3),(“a”,3))),进行reduceByKey运算后的结果为:(a,5) (b,3),可以看出对a的值进行了统计。
需要说明的是,若counter字段中的aggregate为空,则意味着不需要进行统计,此时可以直接结束任务,由此可以避免不必要地统计操作。
本发明实施例提供的上述方法,当计算逻辑包括统计运算时,先通过reduceByKey运算对待加工数据进行汇聚,再对汇聚后的数据通过flatMap运算进行统计,由此可以避免尽可能少地触发shuffle操作,提高了数据加工的效率。
本发明实施例提供的上述对于不同的运算的算子进行相应的底层优化,增强了计算算子优化的可控性,解决了Spark SQL耗用内存过多,且不能很好针对集群做底层优化,学习使用成本高的问题,同时也保证了在多种应用场景下都可以提升数据加工能力。
在本实施例中,当存储待加工数据的文件是小文件时,小文件会导致Task的增多,Task增多后,由于CPU核的个数有限,会导致加工的批次变多,最终使得性能下降,为了避免小文件对于Spark集群的加工能力的影响,本发明实施例还提供了另一种具体的确定目标计算逻辑的实现方式,请参照7,图7示出了本发明实施例提供的得到待加工数据的方法的流程图,该方法包括以下步骤:
步骤S200,以边读边合并的方式读文件,得到待加工数据。
在本实施例中,在读取文件的时候,利用边读边合并的方式对小文件进行了合并,提高了待加工数据的加工效率,进而提高了Spark的数据加工能力。
作为一种具体实现方式:本发明实施例在Spark读文件函数textFile方法内部调用newHadoopFile函数进行文件读取的,其可以定义读取的Key,Value数据结构,采取文件流的方式边读取边进行文件合并,设置一个配置参数,比如fileMaxSize控制多少字节组织成一个Partition,从而减少Task的数量,由此避免了Task数量增大导致的性能下降。
在本实施例中,为了更灵活地支持用户的需求,在得到数据加工结果后,可以根据用户指定的格式对数据加工结果进行组织和存储,因此,本发明实施例还提供了另一种具体的确定目标计算逻辑的实现方式,请参照8,图8示出了本发明实施例提供的处理加工结果的方法的流程图,该方法包括以下步骤:
步骤S300,按照目的表的结构信息组织待加工数据的加工结果,并进行存储。
在本实施例中,目的表的结构信息可以预先以XML的形式存储至Spark集群中的预设位置,例如,预设位置在Hadoop上的存储路径为:/dir/table。
作为一种具体实施方式,可以使用saveAsTextfile对数据进行保存,把数据保存到Hadoop上。
为了执行上述实施例及各个可能的实施方式中的相应步骤,下面给出一种数据加工装置100的实现方式。请参照图9,图9示出了本发明实施例提供的数据加工装置100的方框示意图。需要说明的是,本实施例所提供的数据加工装置100,其基本原理及产生的技术效果和上述实施例相同,为简要描述,本实施例部分未提及指出。
数据加工装置100包括获取模块110、解析模块120及加工模块130。
获取模块110,用于获取待加工数据。
作为一种具体实施方式,待加工数据以文件进行存储,获取模块110还用于:以边读边合并的方式读文件,得到待加工数据。
解析模块120,用于对预先生成的XML配置文件进行解析,以确定对待加工数据进行加工的目标计算逻辑,其中,XML配置文件是根据预先指定的针对待加工数据进行加工的计算逻辑生成的。
作为一种具体实施方式,计算逻辑包括filter运算,解析模块120具体用于:对预先生成的XML配置文件进行解析,以得到包括filter运算的第一计算逻辑;将目标计算逻辑确定为对待加工数据优先进行filter处理。
作为一种具体实施方式,计算逻辑还包括filter运算和map运算,解析模块120具体还用于:对预先生成的XML配置文件进行解析,以得到包括filter运算和map运算的第二计算逻辑;将目标计算逻辑确定为将filter运算和map运算合并成flatMap运算、并对待加工数据进行flatMap运算。
作为一种具体实施方式,计算逻辑还包括统计运算,解析模块120具体还用于:对预先生成的XML配置文件进行解析,以得到包括统计运算的第三计算逻辑;将目标计算逻辑确定为先通过reduceByKey运算对待加工数据进行汇聚,再对汇聚后的数据通过flatMap运算进行统计。
加工模块130,用于依据目标计算逻辑,对待加工数据进行加工。
作为一种具体实施方式,加工模块130还用于:按照目的表的结构信息组织待加工数据的加工结果,并进行存储。
本发明实施例提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述的数据加工方法。
综上所述,本发明实施例提供了一种数据加工方法、装置、工作节点及存储介质,应用于Spark集群中的工作节点,所述方法包括:获取待加工数据;对预先生成的XML配置文件进行解析,以确定对所述待加工数据进行加工的目标计算逻辑,其中,所述XML配置文件是根据预先指定的针对所述待加工数据进行加工的计算逻辑生成的;依据所述目标计算逻辑,对所述待加工数据进行加工。相对于现有技术,本发明实施例利用Spark底层API的数据处理性能,算子优化的可控性,结合XML配置的方便性和易用性,动态解析计算逻辑XML,对计算逻辑中的Counter计算公式利用DSL进行公式解析和编译,调用编译后的方法获取结果,对数据读取,API的使用,shuffle操作等做性能优化,从而实现简单,好用,高效率计算的数据加工方案。该套方案可用于任何需要大数据加工的应用中,特别是在服务器资源有限的情况下,需要尽可能快的跑出业务数据的场景中。同样的资源,同样的数据,性能比Spark SQL提升至少10倍。对于不会使用SQL的使用者,使用本发明实施例提供的数据加工方法进行XML配置也可以快速完成数据的开发,不需要额外的学习SQL语法。任何使用Spark的场景,也可以使用该方法实现数据加工的快速开发。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
Claims (9)
1.一种数据加工方法,其特征在于,应用于Spark集群中的工作节点,所述方法包括:
获取待加工数据;
对预先生成的XML配置文件进行解析,以确定对所述待加工数据进行加工的目标计算逻辑,其中,所述XML配置文件是根据预先指定的针对所述待加工数据进行加工的计算逻辑生成的,所述XML配置文件包括至少一个task描述,每个所述task包括至少一个job,每个所述job分维度dims和汇聚counters,每个所述dims包括多个维度,每个所述维度表示一个分组,一个所述汇聚counters包括多个counter,每个所述counter表示一个指标汇聚逻辑,所述计算逻辑包括用于表征所述待加工数据所属的源表、用于表征加工结果格式的目的表及用于表征计算逻辑的计算参数,所述XML配置文件包括源文件、目的文件及计算逻辑文件,所述源文件包括所述源表的结构信息,所述源表的结构信息包括所述源表的表字段及字段类型,所述目的文件包括所述目的表的结构信息,所述目的表的结构信息包括所述目的表的表字段及字段类型,所述计算逻辑文件是根据所述计算参数生成的,对预先生成的XML配置文件进行解析,确定对所述待加工数据进行加工的目标计算逻辑的方式为:对于所述计算逻辑文件,使用领域特定语言DSL写出上下文无关文法;继承Java的JavaTokenParsers;使用相应的运算符递归出语法及自定义函数,对编译结果进行转义,转成函数加工,实现每一个函数的计算逻辑,得到所述目标计算逻辑;
依据所述目标计算逻辑,对所述待加工数据进行加工。
2.如权利要求1所述的数据加工方法,其特征在于,所述计算逻辑包括filter运算,所述对预先生成的XML配置文件进行解析,以确定对所述待加工数据进行加工的目标计算逻辑的步骤包括:
对预先生成的XML配置文件进行解析,以得到包括filter运算的第一计算逻辑;
将所述目标计算逻辑确定为对所述待加工数据优先进行filter处理。
3.如权利要求1所述的数据加工方法,其特征在于,所述计算逻辑还包括filter运算和map运算,所述对预先生成的XML配置文件进行解析,以确定对所述待加工数据进行加工的目标计算逻辑的步骤包括:
对预先生成的XML配置文件进行解析,以得到包括filter运算和map运算的第二计算逻辑;
将所述目标计算逻辑确定为将所述filter运算和所述map运算合并成flatMap运算、并对所述待加工数据进行所述flatMap运算。
4.如权利要求1所述的数据加工方法,其特征在于,所述计算逻辑还包括统计运算,所述对预先生成的XML配置文件进行解析,以确定对所述待加工数据进行加工的目标计算逻辑的步骤包括:
对预先生成的XML配置文件进行解析,以得到包括统计运算的第三计算逻辑;
将所述目标计算逻辑确定为先通过reduceByKey运算对所述待加工数据进行汇聚,再对汇聚后的数据通过flatMap运算进行统计。
5.如权利要求1-4中任一项所述的数据加工方法,其特征在于,所述待加工数据以文件进行存储,所述获取待加工数据的步骤包括:
以边读边合并的方式读所述文件,得到所述待加工数据。
6.如权利要求1所述的数据加工方法,其特征在于,所述方法还包括:
按照所述目的表的结构信息组织所述待加工数据的加工结果,并进行存储。
7.一种数据加工装置,其特征在于,应用于Spark集群中的工作节点,所述装置包括:
获取模块,用于获取待加工数据;
解析模块,用于对预先生成的XML配置文件进行解析,以确定对所述待加工数据进行加工的目标计算逻辑,其中,所述XML配置文件是根据预先指定的针对所述待加工数据进行加工的计算逻辑生成的,所述XML配置文件包括至少一个task描述,每个所述task包括至少一个job,每个所述job分维度dims和汇聚counters,每个所述dims包括多个维度,每个所述维度表示一个分组,一个所述汇聚counters包括多个counter,每个所述counter表示一个指标汇聚逻辑,所述计算逻辑包括用于表征所述待加工数据所属的源表、用于表征加工结果格式的目的表及用于表征计算逻辑的计算参数,所述XML配置文件包括源文件、目的文件及计算逻辑文件,所述源文件包括所述源表的结构信息,所述源表的结构信息包括所述源表的表字段及字段类型,所述目的文件包括所述目的表的结构信息,所述目的表的结构信息包括所述目的表的表字段及字段类型,所述计算逻辑文件是根据所述计算参数生成的,对预先生成的XML配置文件进行解析,确定对所述待加工数据进行加工的目标计算逻辑的方式为:对于所述计算逻辑文件,使用领域特定语言DSL写出上下文无关文法;继承Java的JavaTokenParsers;使用相应的运算符递归出语法及自定义函数,对编译结果进行转义,转成函数加工,实现每一个函数的计算逻辑,得到所述目标计算逻辑;
加工模块,用于依据所述目标计算逻辑,对所述待加工数据进行加工。
8.一种工作节点,包括存储器和处理器,其特征在于,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现如权利要求1-6中任一项所述的数据加工方法。
9.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现如权利要求1-6中任一项所述的数据加工方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110186620.9A CN112527385B (zh) | 2021-02-18 | 2021-02-18 | 数据加工方法、装置、工作节点及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110186620.9A CN112527385B (zh) | 2021-02-18 | 2021-02-18 | 数据加工方法、装置、工作节点及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112527385A CN112527385A (zh) | 2021-03-19 |
CN112527385B true CN112527385B (zh) | 2021-11-30 |
Family
ID=74975665
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110186620.9A Active CN112527385B (zh) | 2021-02-18 | 2021-02-18 | 数据加工方法、装置、工作节点及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112527385B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113986888A (zh) * | 2021-12-28 | 2022-01-28 | 深圳市明源云科技有限公司 | 数据加工方法、装置、设备及计算机可读存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106372114A (zh) * | 2016-08-23 | 2017-02-01 | 电子科技大学 | 一种基于大数据的联机分析处理系统和方法 |
CN110245158A (zh) * | 2019-06-10 | 2019-09-17 | 上海理想信息产业(集团)有限公司 | 一种基于Flink流计算技术的多源异构数据实时处理系统及方法 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8176186B2 (en) * | 2002-10-30 | 2012-05-08 | Riverbed Technology, Inc. | Transaction accelerator for client-server communications systems |
CN106155635B (zh) * | 2015-04-03 | 2020-09-18 | 北京奇虎科技有限公司 | 一种数据处理方法和装置 |
CN106021412A (zh) * | 2016-05-13 | 2016-10-12 | 上海市计算技术研究所 | 一种面向大规模过车数据的伴随车辆识别方法 |
US10467195B2 (en) * | 2016-09-06 | 2019-11-05 | Samsung Electronics Co., Ltd. | Adaptive caching replacement manager with dynamic updating granulates and partitions for shared flash-based storage system |
CN106557368B (zh) * | 2016-11-21 | 2020-04-03 | 东软集团股份有限公司 | Spark程序优化方法和装置 |
US10169201B2 (en) * | 2017-01-07 | 2019-01-01 | International Business Machines Corporation | Debug management in a distributed batch data processing environment |
CN109669987A (zh) * | 2018-12-13 | 2019-04-23 | 国网河北省电力有限公司石家庄供电分公司 | 一种大数据存储优化方法 |
-
2021
- 2021-02-18 CN CN202110186620.9A patent/CN112527385B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106372114A (zh) * | 2016-08-23 | 2017-02-01 | 电子科技大学 | 一种基于大数据的联机分析处理系统和方法 |
CN110245158A (zh) * | 2019-06-10 | 2019-09-17 | 上海理想信息产业(集团)有限公司 | 一种基于Flink流计算技术的多源异构数据实时处理系统及方法 |
Also Published As
Publication number | Publication date |
---|---|
CN112527385A (zh) | 2021-03-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11132402B2 (en) | Stream computing method, apparatus, and system | |
CN109002362B (zh) | 一种服务方法、装置、系统以及电子设备 | |
CN108280023B (zh) | 任务执行方法、装置和服务器 | |
US10061858B2 (en) | Method and apparatus for processing exploding data stream | |
US9092408B2 (en) | Data listeners for type dependency processing | |
CN104484216A (zh) | 服务接口文档和在线测试工具生成方法、装置 | |
CN111352616A (zh) | 实时计算可视化开发系统及其应用方法 | |
CN111459889A (zh) | 一种用于物联网平台的设备数据模型生成方法和装置 | |
CN106547522B (zh) | 一种流应用优化的方法及装置 | |
CN103309650A (zh) | 持久层代码的生成方法和装置 | |
CN112527385B (zh) | 数据加工方法、装置、工作节点及存储介质 | |
CN115639980A (zh) | 一种低代码平台可拖拽的前端逻辑编排方法及装置 | |
CN111209001A (zh) | 批量生成安卓各渠道apk的方法、系统、设备和介质 | |
CN112464620A (zh) | 一种财务规则引擎的实现方法及实现系统 | |
CN116483859A (zh) | 数据查询方法及装置 | |
CN110188308B (zh) | 客户端自动打点上报方法、存储介质、设备及系统 | |
CN112052011A (zh) | 小程序的合包方法、装置、电子设备及介质 | |
CN107092474B (zh) | 程序开发方法、etl处理方法及装置 | |
CN116775041B (zh) | 基于流计算和rete算法的实时决策引擎实现方法 | |
CN105867886B (zh) | 一种写表格的方法及装置 | |
CN115202663A (zh) | 一种数据处理方法、装置和存储介质 | |
CN114385145A (zh) | 一种Web系统后端架构设计方法及计算机设备 | |
CN114924733A (zh) | 一种表单依赖关系管理和表单精准渲染方法和系统 | |
CN114281842A (zh) | 一种数据库分表查询的方法及设备 | |
CN111401020A (zh) | 一种界面加载方法、系统和计算设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |