首页 / 专利库 / 软件 / 命令行界面 / 一种实时流数据处理方法及装置

一种实时流数据处理方法及装置

阅读:712发布:2020-05-18

专利汇可以提供一种实时流数据处理方法及装置专利检索,专利查询,专利分析的服务。并且本 申请 提供一种实时流 数据处理 方法及装置,该方法可包括:接收外部输入的类结构化查询语言SQL控制命令;对所述类SQL控制命令进行解析;若解析出的所述类SQL控制命令为流streaming控制命令,则依据所述类SQL控制命令对后续接收到的流数据进行处理。若解析出的所述类SQL控制命令为原生Spark SQL控制命令,则依据所述类SQL控制命令对所述类SQL控制命令所 指定 外部结构化数据进行处理。使用本申请提供的方法,可以使用户通过简洁的类SQL控制命令实现对实时流数据的处理。,下面是一种实时流数据处理方法及装置专利的具体信息内容。

1.一种流数据处理方法,其特征在于,所述方法应用于Spark平台的Spark SQL组件,所述方法包括:
接收外部输入的类结构化查询语言SQL控制命令;
对所述类SQL控制命令进行解析;
若解析出的所述类SQL控制命令为流streaming控制命令,则依据所述类SQL控制命令对后续接收到的流数据进行处理;
若解析出的所述类SQL控制命令为原生Spark SQL控制命令,则依据所述类SQL控制命令对所述类SQL控制命令所指定的外部结构化数据进行处理。
2.根据权利要求1所述的方法,其特征在于,在所述对所述类SQL控制命令进行解析之后,所述方法还包括:
基于对所述类SQL控制命令解析后得到的关键字段,确定解析出的所述类SQL控制命令的类型。
3.根据权利要求2所述的方法,其特征在于,所述基于对所述类SQL控制命令解析后得到的关键字段,确定解析出的所述类SQL控制命令的类型,包括:
若对所述类SQL控制命令解析后得到的关键字段匹配第一预设指定字段,确定解析出的所述类SQL控制命令为所述streaming控制命令;
若对所述类SQL控制命令解析后得到的关键字段匹配第二预设指定字段,则确定解析出的所述类SQL控制命令为所述原生Spark SQL控制命令。
4.根据权利要求1所述的方法,其特征在于,所述类SQL控制命令携带有数据处理关键字;
所述依据所述类SQL控制命令对后续接收到的流数据进行处理,包括:
依据所述类SQL控制命令携带的数据处理关键字,对后续接收到的流数据进行处理;
所述流数据的处理包括:Join处理、Map处理、Reduce处理以及用户自定义处理。
5.根据权利要求1所述的方法,其特征在于,通过如下方式中的一种或者多种,接收外部输入的类SQL控制命令,对流数据进行处理:
应用程序编程接口API方式;
命令行界面CLI方式;
Java数据库连接方式JDBC方式。
6.一种流数据处理装置,其特征在于,所述装置应用于Spark平台的Spark SQL组件,所述装置包括:
解析单元,用于接收外部输入的类结构化查询语言SQL控制命令,并对所述类SQL控制命令进行解析;
Stream SQL单元,用于若解析出的所述类SQL控制命令为流streaming控制命令,则依据所述类SQL控制命令对后续接收到的流数据进行处理;
Spark SQL单元,用于若解析出的所述类SQL控制命令为原生Spark SQL控制命令,则依据所述类SQL控制命令对所述类SQL控制命令所指定的外部结构化数据进行处理。
7.根据权利要求6所述的装置,其特征在于,所述解析单元,还用于基于对所述类SQL控制命令解析后得到的关键字段,确定解析出的所述类SQL控制命令的类型。
8.根据权利要求7所述的装置,其特征在于,所述解析单元,具体用于若对所述类SQL控制命令解析后得到的关键字段匹配第一预设指定字段,确定解析出的所述类SQL控制命令为所述streaming控制命令;若对所述类SQL控制命令解析后得到的关键字段匹配第二预设指定字段,则确定解析出的所述类SQL控制命令为所述原生Spark SQL控制命令。
9.根据权利要求6所述的装置,其特征在于,所述类SQL控制命令携带有数据处理关键字;
所述Stream SQL单元,具体用于依据所述类SQL控制命令携带的数据处理关键字,对后续接收到的流数据进行处理;
所述数据处理关键字包括:Join处理、Map处理、Reduce处理以及用户自定义处理。
10.根据权利要求6所述的装置,其特征在于,所述Spark SQL组件通过如下方式中的一种或者多种,接收外部输入的类SQL控制命令,对流数据进行处理:
应用程序编程接口API方式;
命令行界面CLI方式;
Java数据库连接方式JDBC方式。

说明书全文

一种实时流数据处理方法及装置

技术领域

[0001] 本申请涉及计算机通信领域,尤其涉及一种实时流数据处理方法及装置。

背景技术

[0002] 随着大数据时代的到来,实时数据的分析处理为用户的业务处理等提供了多方面的指导。实时数据的业务价值随着时间的流失而迅速降低,因此在实时数据发生后,对实时数据进行快速地处理变得至关重要。
[0003] 基于上述需求,对实时流数据进行处理的平台也应用而生,大大提高了实时数据的处理速度。用户在使用该平台进行业务计算时,可调用该平台的提供的API。虽然该平台为用户提供了丰富的API(Application Programming Interface,应用程序编程接口)接口,但是各API接口有自己的规范,用户必须熟悉掌握各个API的使用规则,才能调用API来进行流式计算应用程序的编写。对于用户而言,这些平台的使用难度较大,因此如何降低用户使用该平台的难度成为业界持续探讨的问题。发明内容
[0004] 有鉴于此,本申请提供一种实时数据流处理方法及装置,用以使用户通过简洁的类SQL控制命令实现对实时流数据的处理。
[0005] 具体地,本申请是通过如下技术方案实现的:
[0006] 根据本申请的第一方面,提供一种流数据处理方法,所述方法应用于Spark平台的Spark SQL组件,所述方法包括:
[0007] 接收外部输入的类结构化查询语言SQL控制命令;
[0008] 对所述类SQL控制命令进行解析;
[0009] 若解析出的所述类SQL控制命令为流streaming控制命令,则依据所述类SQL控制命令对后续接收到的流数据进行处理;
[0010] 若解析出的所述类SQL控制命令为原生Spark SQL控制命令,则依据所述类SQL控制命令对所述类SQL控制命令所指定的外部结构化数据进行处理。
[0011] 可选的,在所述对所述类SQL控制命令进行解析之后,所述方法还包括:
[0012] 基于对所述类SQL控制命令解析后得到的关键字段,确定解析出的所述类SQL控制命令的类型。
[0013] 可选的,所述基于对所述类SQL控制命令解析后得到的关键字段,确定解析出的所述类SQL控制命令的类型,包括:
[0014] 若对所述类SQL控制命令解析后得到的关键字段匹配第一预设指定字段,确定解析出的所述类SQL控制命令为所述streaming控制命令;
[0015] 若对所述类SQL控制命令解析后得到的关键字段匹配第二预设指定字段,则确定解析出的所述类SQL控制命令为所述原生Spark SQL控制命令。
[0016] 可选的,所述类SQL控制命令携带有数据处理关键字;
[0017] 所述依据所述类SQL控制命令对后续接收到的流数据进行处理,包括:
[0018] 依据所述类SQL控制命令携带的数据处理关键字,对后续接收到的流数据进行处理;
[0019] 所述流数据的处理包括:Join处理、Map处理、Reduce处理以及用户自定义处理。
[0020] 可选的,通过如下方式中的一种或者多种,接收外部输入的类SQL控制命令,对流数据进行处理:
[0021] 应用程序编程接口API方式;
[0022] 命令行界面CLI方式;
[0023] Java数据库连接方式JDBC方式。
[0024] 根据本申请的第二方面,提供一种流数据处理装置,所述装置应用于Spark平台的Spark SQL组件,所述装置包括:
[0025] 解析单元,用于接收外部输入的类结构化查询语言SQL控制命令,并对所述类SQL控制命令进行解析;
[0026] Stream SQL单元,用于若解析出的所述类SQL控制命令为流streaming控制命令,则依据所述类SQL控制命令对后续接收到的流数据进行处理;
[0027] Spark SQL单元,用于若解析出的所述类SQL控制命令为原生Spark SQL控制命令,则依据所述类SQL控制命令对所述类SQL控制命令所指定的外部结构化数据进行处理。
[0028] 可选的,所述解析单元,还用于基于对所述类SQL控制命令解析后得到的关键字段,确定解析出的所述类SQL控制命令的类型。
[0029] 可选的,所述解析单元,具体用于若对所述类SQL控制命令解析后得到的关键字段匹配第一预设指定字段,确定解析出的所述类SQL控制命令为所述streaming控制命令;若对所述类SQL控制命令解析后得到的关键字段匹配第二预设指定字段,则确定解析出的所述类SQL控制命令为所述原生Spark SQL控制命令。
[0030] 可选的,所述类SQL控制命令携带有数据处理关键字;
[0031] 所述Stream SQL单元,具体用于依据所述类SQL控制命令携带的数据处理关键字,对后续接收到的流数据进行处理;
[0032] 所述数据处理关键字包括:Join处理、Map处理、Reduce处理以及用户自定义处理。
[0033] 可选的,所述Spark SQL组件通过如下方式中的一种或者多种,接收外部输入的类SQL控制命令,对流数据进行处理:
[0034] 应用程序编程接口API方式;
[0035] 命令行界面CLI方式;
[0036] Java数据库连接方式JDBC方式。
[0037] 本申请提供一种实时流数据的处理方法,通过对Spark平台中的Spark SQL组件进行扩展,增加了Stream SQL单元,使得Spark SQL组件可接收外部输入的SQL控制命令,并对所述类SQL控制命令进行解析。若解析出的所述类SQL控制命令为流streaming控制命令,Spark SQL组件则可依据所述类SQL控制命令对后续接收到的流数据进行处理。若解析出的所述类SQL控制命令为原生Spark SQL控制命令,则依据所述类SQL控制命令对所述类SQL控制命令所指定的外部结构化数据进行处理。
[0038] 一方面,由于用户通过使用简洁的类SQL控制命令,就可以对Spark平台接收到的实时数据进行流式处理,降低了用户学习使用Spark平台的槛,极大地方便和简化了用户对Spark平台的使用,从而极大地促进了Spark平台的推广和应用。
[0039] 另一方面,由于Spark SQL组件可自动确定用户输入的类SQL控制命令的命令类型,当该类SQL控制命令为Spark SQL原生命令时,可对所述类SQL控制命令所指定的外部结构化数据进行处理,当该类SQL控制命令为streaming SQL控制命令时,可对实时流数据进行流式处理,使得用户仅仅采用Spark SQL组件提供的交互方式,就可以对上述外部结构化数据和实时流数据这两种数据进行处理。
[0040] 第三方面,用户可以通过Spark SQL组件提供的CLI、易调用的API以及JDBC这三种交互方式,输入类SQL控制命令,对实时流数据进行处理,从而扩展了用户对实时流数据进行处理的交互方式。附图说明
[0041] 图1是本申请一示例性实施例示出的一种Spark平台的示意图;
[0042] 图2是本申请一示例性实施例示出的一种Spark SQL组件的示意图;
[0043] 图3是本申请一示例性实施例示出的一种实时流数据任务处理的示意图;
[0044] 图4是本申请一示例性实施例示出的一种实时流数据处理方法的流程图
[0045] 图5是本申请一示例性实施例示出的一种实时流数据处理装置框图
[0046] 图6是本申请提供的图5所示装置的硬件架构图。

具体实施方式

[0047] 这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
[0048] 在本申请使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本申请和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
[0049] 应当理解,尽管在本申请可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
[0050] Spark平台是一种用来实现快速而通用的集群计算平台。由于Spark平台具有运行速度快、易用性好、通用性强以及容错性高等优势,使得Spark平台在针对实时数据进行大数据计算等领域得到了广泛的应用。
[0051] 随着实时数据的业务价值变得越来越重要,许多用户在对实时数据进行大数据分析时,通常会采用Spark平台。例如,用户通常可采用Spark平台进行一些业务的流式计算,如统计用户的访问量等。
[0052] 在使用Spark平台编写流式计算应用程序时,用户需要调用Spark平台的API来进行流式计算应用程序的编写。
[0053] 一方面,尽管Spark平台提供了丰富的API,但是各个API都有自己的使用规则,用户必须熟悉掌握各个API的使用规则,才能调用API来进行流式计算应用程序的编写。这对于用户而言,学习门槛较高,用户必须对Spark平台以及流计算、甚至是底层的相关技术比较熟悉的情况下,才能编写出高效的流式计算应用程序。从而大大限制了Spark平台的推广与应用。
[0054] 另一方面,用户只能通过API来编写流式应用程序来使用Spark平台,使得用户使用Spark平台的方式过于单一。
[0055] 此外,用户在编写完流式计算应用程序后,需要将流式计算应用程序编译打包成jar格式,然后再提交应用。由于从流式计算应用程序编写到流式计算应用程序发布需要经历上述复杂繁琐的过程,从而大大降低了Spark平台的使用效率。
[0056] 有鉴于此,本申请提供一种实时流数据的处理方法,通过对Spark平台中的Spark SQL组件进行扩展,增加了Stream SQL单元,使得Spark SQL组件可接收外部输入的类结构化查询语言SQL控制命令,并对所述类SQL控制命令进行解析。若解析出的所述类SQL控制命令为流streaming控制命令,Spark SQL组件则可依据所述类SQL控制命令对后续接收到的流数据进行处理。若解析出的所述类SQL控制命令为原生Spark SQL控制命令,则依据所述类SQL控制命令对所述类SQL控制命令所指定的外部结构化数据进行处理。
[0057] 一方面,由于用户通过使用简洁的类SQL控制命令,就可以对Spark平台接收到的实时数据进行流式处理,降低了用户学习使用Spark平台的门槛,极大地方便和简化了用户对Spark平台的使用,从而极大地促进了Spark平台的推广和应用。
[0058] 另一方面,由于Spark SQL组件可自动确定用户输入的类SQL控制命令的命令类型,当该类SQL控制命令为Spark SQL原生命令时,可对所述类SQL控制命令所指定的外部结构化数据进行处理,当该类SQL控制命令为streaming SQL控制命令时,可对实时流数据进行流式处理,使得用户仅仅采用Spark SQL组件提供的交互方式,就可以对上述外部结构化数据和实时流数据这两种数据进行处理。
[0059] 第三方面,用户可以通过Spark SQL组件提供的CLI(Command-Line Interface,命令行界面)、易调用的API以及JDBC(Java DataBase Connectivity,java数据库连接)这三种交互方式,输入类SQL控制命令,对实时流数据进行处理,从而扩展了用户对实时流数据进行处理的交互方式。
[0060] 参见图1,图1是本申请一示例性实施例示出的一种Spark平台的示意图;Spark平台通常包括:Spark SQL组件、Spark Streaming组件、MLbase/MLlib(Machine Learning,机器学习)组件以及GraphX(graph)组件。
[0061] 其中,上述Spark SQL组件是Spark平台提供的可用来操作结构化数据的框架组件。通过Spark SQL组件,用户能够使用SQL语句来查询或读取外部结构化数据(如JASON、Hive、Parquet中的数据等)。此外,用户还可通过第三方智能软件通过JDBC连接到Spark SQL进行查询。
[0062] 上述Spark Streaming组件,是一个对实时流数据进行高吞吐、高容错的流式处理系统,可对多种数据源(如Kafka、Flume、Twitter等)进行类似Map、Reduce和Join等复杂操作,并将结果保存到外部文件系统中。
[0063] 上述MLbase组件,是Spark平台中专注用于机器学习的组件,该组件中包括了常见的机器学习算法和使用程序,包括分类、回归、聚类、协同过滤等。
[0064] 上述GraphX组件,可以是Spark平台中用于图和图并行计算的API。
[0065] 本申请所提供的实时流数据的处理方法,是对上述Spark SQL组件进行功能扩展,比如增加Spark SQL组件中的解析单元的功能,在Spark SQL组件中增加Stream SQL单元,从而增加对实时流数据进行处理的功能,使得用户可以通过类SQL语句在实现对平台原有的外部结构化数据处理处理的同时,还对接收到的实时流数据进行处理。
[0066] 下面对本申请提供的Spark SQL组件进行详细地说明。
[0067] 参见图2,图2是本申请一示例性实施例示出的一种Spark SQL组件的示意图。
[0068] 在本申请实施例中提供的Spark SQL组件可包括:解析单元、Spark SQL单元和Stream SQL单元。
[0069] 其中,上述解析单元,用于在接收到用户输入的类SQL控制命令后,对所述类SQL控制命令进行解析。通过解析得到的关键字段来确定该类SQL控制命令类型。若该类SQL控制命令为原生Spark SQL控制命令,则将该类SQL控制命令发送至Spark SQL单元。若该类SQL控制命令为streaming控制命令,则将该类SQL控制命令发送至Stream SQL单元。
[0070] 上述Spark SQL单元,SparkSQL组件中用来操作结构化数据的核心单元。用户能够使用SQL语句来查询或读取外部结构化数据源的数据(如JSON、Hive、Parquet等);同时其不仅支持在Spark程序内部使用SQL语句进行数据查询,也支持第三方的智能软件通过JDBC连接到Spark SQL进行查询。处理上述Stream SQL单元,用于对从数据源接收到的实时流数据进行处理,但与Spark SQL单元的区别是,Spark SQL单元是对外部结构化数据进行处理,而Stream SQL是对实时接收到的流数据进行处理。这里的对实时流数据进行处理,可以理解为按照用户的业务需求,对实时流数据进行流式业务计算等。当然,这里只是对实时流数据进行处理进行示例性说明,不对其进行具体地限定。
[0071] 更进一步来说,如图3所示,图3是本申请一示例性实施例示出的一种实时流数据任务处理的示意图。
[0072] 从图3可以看出,Stream SQL单元还包括了接收模,Stream任务处理模块以及发送模块。
[0073] 其中,接收模块负责接收数据源中的数据流,该数据源可以为Kafka(一种高吞吐量的分布式发布订阅消息系统)、Flume(Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统)等多种数据源。该接收模块可以为该Spark平台的Spark Streaming组件中的接收模块,也可以在是新开发出的接收模块,这里不对其进行具体地限定。
[0074] Stream任务处理模块,可用于按照用户输入的类SQL控制命令中的数据处理关键字,对接收到的实时流数据进行任务处理。
[0075] 发送模块,可用于接收Stream任务处理模块任务处理后的数据写入外部存储工具中,该发送模块可与外部存储工具进行直接交换,然后将实时流数据任务处理的结果,按照符合与其对接的存储工具的格式,对处理结果进行格式转换,然后存储在该存储工具中。
[0076] 下面对本申请提出的实时流数据的处理方法进行详细地说明。
[0077] 参见图4,图4是本申请一示例性实施例示出的一种实时流数据处理方法的流程图。该方法可用于Spark平台的Spark SQL组件。该方法可包括如下所示步骤。
[0078] 步骤401:接收外部输入的类结构化查询语言SQL控制命令;
[0079] 步骤402:对所述类SQL控制命令进行解析;
[0080] 步骤403:若解析出的所述类SQL控制命令为streaming控制命令,则依据所述类SQL控制命令对后续接收到的流数据进行处理;
[0081] 步骤404:若解析出的所述类SQL控制命令为原生Spark SQL控制命令,则依据所述类SQL控制命令对所述类SQL控制命令所指定的外部结构化数据进行处理。
[0082] 其中,上述流数据,可以理解为从数据源实时接收到的流数据,所谓流数据,可以理解为数据源持续生成的数据,例如用户使用应用程序实时生成的日志文件,网购数据等等。该流数据通常也可被称为实时流数据。
[0083] 上述类SQL控制命令中携带了数据处理关键字,从类型上分,可以包括两类数据处理关键字,分别为针对实时流数据的数据处理关键字和针对外部结构化数据的数据处理关键字。当上述类SQL控制命令为Streaming控制命令时,该类SQL控制命令携带的数据处理关键字可以为针对实时流数据的数据处理关键字,该数据处理关键字所指示的数据处理可包括Join处理、Map处理、Reduce处理以及一些用户自定义处理方式。当然还能包括SQL语句中一些常用的计算任务,比如求和,筛选等等。当上述类SQL控制命令为原生Spark SQL控制命令时,该类SQL控制命令中携带的数据处理关键字所指示的数据处理操作可以包括原有的Spark SQL可以执行的数据处理操作。
[0084] 在本申请实施例中,用户可采用与Spark SQL组件相同的交互方式,输入上述类SQL控制命令。
[0085] 例如,用户可通过API、CLI和JDBC三种方式,向Spark SQL组件输入类SQL控制命令。
[0086] 需要说明的是,对于该API来说,与Spark平台中的Spark Streaming组件提供的API完全不同,Spark Streaming提供的API接口,需要用户详细了解该API接口,才能编写复杂的程序进行接口调用。而在本申请中,用户可以通过API,输入通用简洁的类SQL控制命令,对实时流数据进行处理。
[0087] 在本申请实施例中,Spark SQL组件可以接收用户输入的类SQL控制命令。并对该SQL控制命令进行解析。
[0088] 在对该类SQL控制命令解析后,可得到一些关键字段。
[0089] 在一种可选的实现方式中,通常Spark SQL组件预设有与Streaming控制命令相关的一些特定字段,作为的第一指定字段,例如,STREAM等一些字段。Spark SQL组件还预设有与原生Spark SQL控制命令相关的一些特定字段,作为第二指定字段,例如table等一些字段。
[0090] 需要说明的是,上述第一指定字段可以理解为与预设的与Streaming控制命令相关的一些特定字段的集合。上述第二指定字段可以理解为预设的与原生Spark SQL控制命令相关的一些特定字段的集合。
[0091] Spark SQL组件可基于对SQL控制命令解析后得到的关键字段,确定解析出的该类SQL控制命令的类型。若解析得到的上述关键字段匹配上述第一指定字段,Spark SQL组件可确定该解析出的类SQL控制命令为Streaming控制命令;若解析得到的上述关键字段匹配上述第二指定字段,Spark SQL组件可确定解析出的类SQL控制命令为原生Spark SQL控制命令。
[0092] 例如,假设用户输入的类SQL控制命令为:
[0093] “CREAT TABLE tableName(NAME STRING,AGE INT);
[0094] Show tables;”
[0095] 其中,CREAT TABLE为创建表命令,tableName为表名,(NAME STRING,AGE INT)为定义的数据类型,Show tables为显示表命令。
[0096] Spark SQL组件在对该类控制命令解析后,可得到一些关键字段,如CREAT TABLE,Show tables等。通过解析得到的关键字段,Spark SQL组件发现这些关键字段与第二指定字段(如table,show tables等字段)匹配,Spark SQL组件可确定解析出的类SQL控制命令为原生Spark SQL控制命令。
[0097] 再比如,假设用户输入的类SQL控制命令为:
[0098]
[0099] 其中,CREATE STREAM为创建Streaming流的命令;StreamTable为创建的Streaming流的名称;(NAME STRING,AGE INT)为定义的数据类型;TBLPROPERTIES表示以键值对形式存储配置信息;SOURCES为指定了socket为数据源;HOSTNAME为socket接收的IP地址;SINKS为指定了数据存储形式为hive;Insert为启动创建的Streaming流的命令,SELECT为查询命令。
[0100] Spark SQL组件在对该类控制命令解析后,可得到一些关键字段,如CREATE STREAM,StreamTable等。通过解析得到的关键字段,Spark SQL组件发现这些关键字段与第一指定字段(如STREAM等一些字段)匹配,Spark SQL组件可确定解析出的该类SQL控制命令为streaming控制命令。
[0101] 当然,还可以采用其他方法来确定上述类SQL控制命令的命令类型,这里只是对确定类SQL控制命令的命令类型的方法进行示例性地说明,不对其进行具体地限定。
[0102] 在本申请实施例中,通常类SQL控制命令携带有数据处理关键字,在确定用户输入的类SQL控制命令后,Spark SQL组件在对该类SQL控制命令进行解析后,可获取该类SQL控制命令携带的数据处理关键字。Spark SQL组件可依据这些数据处理关键字,对实时流数据进行处理。
[0103] 其中,上述数据处理关键字可以包括CREAT(创建),insert(启动),join(Join处理),group by(Reduce处理)等等。
[0104] 例如,假设用户输入的类SQL控制命令为:
[0105] “CREAT TABLE tableName(NAME STRING,AGE INT);
[0106] Show tables;”
[0107] 其中,CREAT TABLE为创建表的命令;tableName为表名;(NAME STRING,AGE INT)为定义的数据类型。
[0108] Spark SQL组件在接收到该类SQL控制命令后,可对该控制命令进行解析,解析后,Spark SQL组件可获取该类SQL控制命令携带的数据处理关键字,如CREAT,Show tables等,并对该类SQL控制命令所对应的处理操作是创建表和显示创建出的表的操作。
[0109] 再例如,假设用户输入的类SQL控制命令为:
[0110]
[0111] 其中,CREATE STREAM为创建Streaming流的命令;w为创建的Streaming流的名称;(NAME STRING,AGE INT)为定义的数据类型;TBLPROPERTIES表示以键值对形式存储配置信息;SOURCES为指定了socket为数据源;HOSTNAME为socket接收的IP地址;SINKS为指定了数据存储形式为hive;Insert为启动创建的Streaming流的命令;group表示对接收到的实时流数据进行分组处理。
[0112] Spark SQL组件在接收到该类SQL控制命令后,可对该控制命令进行解析。通过解析,Spark SQL组件可获取该类SQL控制命令中携带的数据处理关键字,如CREAT、insert、group by等,并可基于该获取到处理关键字,确定该类SQL控制命令对应的处理操作为创建streaming流,并且启动streaming流完成对接收到的实时流数据的分组统计处理。
[0113] 在本申请实施例中,当上述类SQL控制命令为流streaming控制命令,Spark SQL组件可依据获取到的数据处理关键字对接收到的实时流数据进行处理。
[0114] 仍以上述对实时数据流进行分组处理的例子为例,在对该类SQL控制命令解析后,Spark SQL组件可启动上述处理过程。在本例中,Spark SQL组件可按照上述数据处理关键字,对接收到的实时数据流进行上述分组统计处理操作,然后将处理结果以及处理过程中产生的中间数据(如实时流数据处理过程中产生的batch等)储存在该类SQL控制命令指定的存储工具中,如Hive中,以供用户查询。
[0115] 在本申请实施例中,当所述类SQL控制命令为原生Spark SQL控制命令,则基于获取到的数据处理关键字,对所述类SQL控制命令所指定外部结构化数据进行处理,并储存所述处理的结果,以供用户查询。
[0116] 此外,在本申请实施例中,上述流数据的处理可包括Join处理、Map处理、Reduce处理以及用户自定义处理。
[0117] 对于Join任务,可举如下例子。
[0118] 用户输入的类SQL控制命令为:
[0119]
[0120] Spark SQL组件在解析而后可获取数据处理关键字,如CREAT STREAM w1、CREATE STREAM w2、insert、join等。Spark SQL组件可从获取到的该数据处理关键字确定所要执行的处理是创建两个Streaming流,名称分别为w1和w2。在将w1和w2进行全连接后,从结果集中选择年龄相同的记录。
[0121] 对于Map任务,可举如下例子。
[0122] 用户输入的类SQL控制命令为:
[0123]
[0124] Spark SQL组件在对该类SQL控制命令解析后,可获取该类SQL控制命令携带的数据处理关键字,如CREATE STREAM w、insert、age+100等等。Spark SQL组件可从获取到的该数据处理关键字确定所要执行的处理是创建一个Streaming流,名称为w。对w对应的实时流数据加100。
[0125] 对于Reduce任务,可举如下例子。
[0126] 用户输入的类SQL控制命令为:
[0127]
[0128] Spark SQL组件在解析而后可获取该类SQL控制命令携带的数据处理关键字,如CREATE STREAM w,insert、group by等。Spark SQL组件可从获取到的该数据处理关键字确定所要执行的处理包括创建一个Streaming流,名称为w,对w对应的实时流数据按照age的取值进行分组统计操作。
[0129] 此外,本申请提供的Spark平台还为提供了自定义函数操作。
[0130] 例如,用户想实现通过年龄判断是否为年轻人需求。
[0131] 用户可提前编写好自定义函数,例如:
[0132]
[0133]
[0134] 然后,用户在使用该自定义函数进行实时流数据处理时,可输入如下所示的类SQL控制命令为。
[0135] add jar youngPeople.jar;
[0136] create temporary function isYoung as'com.spark.YoungPeople';
[0137] insert into stream console select name,isYoung(age)from w;
[0138] 假设接收到的实时流数据为用户的名字和年龄数据,Spark平台在解析后可获取数据处理关键字,如create temporary function,insert,select name,isYoung(age)等。Spark SQL组件可从获取到的该数据处理关键字确定所要执行的处理包括依据判断youngPeople函数,对创建的w对应的实时数据流进行处理,即根据用户的年龄判断用户是否为年轻人。
[0139] 本申请提供一种实时流数据的处理方法,通过对Spark平台中的Spark SQL组件进行扩展,增加了Stream SQL单元,使得Spark SQL组件可接收外部输入的SQL控制命令,并对所述类SQL控制命令进行解析。若解析出的所述类SQL控制命令为streaming控制命令,Spark SQL组件则可依据所述类SQL控制命令对后续接收到的流数据进行处理。若解析出的所述类SQL控制命令为原生Spark SQL控制命令,则依据所述类SQL控制命令对所述类SQL控制命令所指定的外部结构化数据进行处理。
[0140] 一方面,由于用户通过使用简洁的类SQL控制命令,就可以对Spark平台接收到的实时数据进行流式处理,降低了用户学习使用Spark平台的门槛,极大地方便和简化了用户对Spark平台的使用,从而极大地促进了Spark平台的推广和应用。
[0141] 另一方面,由于Spark SQL组件可自动确定用户输入的类SQL控制命令的命令类型,当该类SQL控制命令为Spark SQL原生命令时,可对所述类SQL控制命令所指定的外部结构化数据进行处理,当该类SQL控制命令为streaming SQL控制命令时,可对实时流数据进行流式处理,使得用户仅仅采用Spark SQL组件提供的交互方式,就可以对上述外部结构化数据和实时流数据这两种数据进行处理。
[0142] 第三方面,用户可以通过Spark SQL组件提供的CLI、易调用的API以及JDBC这三种交互方式,输入类SQL控制命令,对实时流数据进行处理,从而扩展了用户对实时流数据进行处理的交互方式。
[0143] 参见图5,图5是本申请一示例性实施例示出的一种实时流数据处理装置框图。所述装置应用于Spark平台的Spark SQL组件,所述装置包括:
[0144] 解析单元501,用于接收外部输入的类结构化查询语言SQL控制命令,并对所述类SQL控制命令进行解析;
[0145] Stream SQL单元502,用于若解析出的所述类SQL控制命令为流streaming控制命令,则依据所述类SQL控制命令对后续接收到的流数据进行处理。
[0146] Spark SQL单元503,用于若解析出的所述类SQL控制命令为原生Spark SQL控制命令,则依据所述类SQL控制命令对所述类SQL控制命令所指定的外部结构化数据进行处理。
[0147] 可选的,所述解析单元501,还用于基于对所述类SQL控制命令解析后得到的关键字段,确定解析出的所述类SQL控制命令的类型。
[0148] 可选的,所述解析单元501,具体用于若所述关键字段匹配第一预设指定字段,确定解析出的所述类SQL控制命令为所述streaming控制命令;若所述关键字段匹配第二预设指定字段,则确定解析出的所述类SQL控制命令为所述原生Spark SQL控制命令。
[0149] 可选的,所述类SQL控制命令携带有数据处理关键字;
[0150] 所述Stream SQL单元502,具体用于依据所述类SQL控制命令携带的数据处理关键字,对后续接收到的流数据进行处理;
[0151] 所述数据处理关键字包括:Join处理、Map处理、Reduce处理以及用户自定义处理。
[0152] 可选的,通过如下方式中的一种或者多种,所述Spark SQL组件通过如下方式中的一种或者多种,接收外部输入的类SQL控制命令,对流数据进行处理:
[0153] 应用程序编程接口API方式;
[0154] 命令行界面CLI方式;
[0155] Java数据库连接方式JDBC方式。
[0156] 对应地,本申请还提供了图5所示装置的硬件结构。参见图6,图6为本申请提供的图5所示装置的硬件结构示意图,该系统包括:处理器601、存储器602和总线603;其中,处理器601和存储器602通过总线603完成相互间的通信。
[0157] 其中,处理器601可以是一个CPU,存储器602可以是非易失性存储器(non-volatile memory),并且存储器602中存储有元数据管理逻辑指令,处理器601可以执行存储器602中存储的元数据管理逻辑指令,以实现上述实时流数据的管理功能,参见图3所示的流程。
[0158] 如图6所示,该硬件结构还可以包括一个电源组件被配置为执行装置的电源管理604,和一个输入输出(I/O)接口605。
[0159] 对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本申请方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
[0160] 以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈