CN111125207B - 一种数据获取方法、装置、连接器及presto引擎 - Google Patents
一种数据获取方法、装置、连接器及presto引擎 Download PDFInfo
- Publication number
- CN111125207B CN111125207B CN201811275079.3A CN201811275079A CN111125207B CN 111125207 B CN111125207 B CN 111125207B CN 201811275079 A CN201811275079 A CN 201811275079A CN 111125207 B CN111125207 B CN 111125207B
- Authority
- CN
- China
- Prior art keywords
- data
- avro
- kafka
- class
- read
- 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
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例提供一种数据获取方法、装置、连接器及presto引擎,该方法包括:在presto引擎需从kafka数据源获取avro数据时,调用kafka连接器增加的avro解码器;调用所述avro解码器在avro行解码器类中引入的avroJava归档文件包的基准读取类;通过所述基准读取类从kafka数据源读取avro数据,并将读取的avro数据转换为presto引擎支持的流数据;通过kafka连接器将转换的流数据传回presto引擎。本发明实施例可使得kafka连接器支持avro类型的数据,从而presto引擎可通过所述kafka连接器支持获取kafka数据源的avro类型的数据,为进一步提升presto引擎的性能提供了可能。
Description
技术领域
本发明实施例涉及数据查询技术领域,具体涉及一种数据获取方法、装置、连接器及presto引擎。
背景技术
presto作为开源的分布式SQL(Structured Query Language,结构化查询语句)查询引擎,其查询的速度可达到商业数据仓库的级别,利用presto的性能实现数据源中的数据查询,无疑是提高数据查询效率的较好解决方式。
presto引擎具有对接多个数据源的能力,kafka数据源作为一种高吞吐量的能够提供实时数据的分布式发布订阅数据系统,以presto引擎对接kafka数据源能够实现实时数据的查询和获取,因此presto引擎对接kafka数据源,对于presto引擎的性能提升具有重要意义。
presto引擎可通过kafka连接器连接kafka数据源,实现与kafka数据源的对接;现有公布的kafka连接器所支持的数据类型例如raw,csv及json等,然而,avro作为kafka重要的数据类型,现有公布的kafka连接器并无法支持avro,这无疑对presto引擎获取kafka数据源的avro类型的数据造成了阻碍,限制了presto引擎对接kafka数据源时的数据类型获取范围;因此,如何进行技术改进,以使得kafka连接器支持avro类型的数据,实现presto引擎获取kafka数据源的avro类型的数据,成为了本领域技术人员亟需解决的技术问题。
发明内容
有鉴于此,本发明实施例提供一种数据获取方法、装置、连接器及presto引擎,以使得kafka连接器支持avro类型的数据,实现presto引擎获取kafka数据源的avro类型的数据。
为实现上述目的,本发明实施例提供如下技术方案:
一种数据获取方法,包括:
在presto引擎需从kafka数据源获取avro数据时,调用kafka连接器增加的avro解码器;
调用所述avro解码器在avro行解码器类中引入的avro Java归档文件包的基准读取类;
通过所述基准读取类从kafka数据源读取avro数据,并将读取的avro数据转换为presto引擎支持的流数据;
通过kafka连接器将转换的流数据传回presto引擎。
可选的,所述基准读取类包括泛型数据类。
可选的,所述将读取的avro数据转换为presto引擎支持的流数据包括:
通过所述基准读取类,调取预设的配置文件;所述配置文件记录有presto引擎中建立的表列的类型与kafka数据源中avro数据的类型的映射关系;
根据所述配置文件记录的所述映射关系,将读取的avro数据转换为与所映射的表列的类型相应的流数据。
可选的,所述配置文件包括:在kafka分片类中增加的值数据模式内容属性及消息数据模式内容属性;
其中,所述值数据模式内容属性记录有avro数据的值数据,映射到presto引擎中建立的表列的描述信息;所述消息数据模式内容属性记录有avro数据的消息数据,映射到presto引擎中建立的表列的描述信息。
可选的,所述根据所述配置文件记录的所述映射关系,将读取的avro数据转换为与所映射的表列的类型相应的流数据包括:
调用所述值数据模式内容属性及消息数据模式内容属性;
根据所述值数据模式内容属性记录的avro数据的值数据,映射到presto引擎中建立的表列的描述信息,将avro数据的值数据转换为与所映射的表列的类型相应的流数据;
根据所述消息数据模式内容属性记录的avro数据的消息数据,映射到presto引擎中建立的表列的描述信息,将avro数据的消息数据转换为与所映射的表列的类型相应的流数据。
可选的,所述方法还包括:
在KafkaTableHandle类中增加值数据模式位置属性和消息数据模式位置属性,在kafka主题描述类中增加值数据模式位置属性和消息数据模式位置属性;其中,值数据封装在所述值数据模式位置属性中,消息数据封装在所述消息数据模式位置属性中。
可选的,所述配置文件设置有kafka日志表;所述kafka日志表的描述文件为json格式,所述描述文件说明有presto引擎的表列和kafka数据源中avro格式的值数据和消息数据的对应关系。
可选的,所述通过所述基准读取类从kafka数据源读取avro数据包括:
通过基准读取类,调用获取分区分片方法;
执行所述获取分区分片方法,获取kafka数据源中avro数据相应的分片。
可选的,所述执行所述获取分区分片方法,获取kafka数据源中avro数据相应的分片包括:
遍历kafka数据源中avro数据相应的主题的所有分区;其中,一个主题分割为至少一个分区,每个分区使用多个段记录avro数据;
对遍历的每个分区获取对应的leader节点的简单消费者对象;
根据所述简单消费者对象,获取分区各段的起始偏移量;
根据各段的起始偏移量,确定各段记录的avro数据,分别将各段记录的avro数据封装为分片;
获取avro数据相应的分片。
可选的,所述配置文件为在读取模式方法中增加的读取avro模式文件;所述通过所述基准读取类,调取配置文件包括:
通过所述基准读取类,调用读取模式方法;
所述根据所述配置文件记录的所述映射关系,将读取的avro数据转换为与所映射的表列的类型相应的流数据包括:
根据读取模式方法中增加的读取avro模式文件,将avro数据相应的分片转换为与所映射的表列的类型相应的流数据。
本发明实施例还提供一种数据获取装置,包括:
第一调用模块,用于在presto引擎需从kafka数据源获取avro数据时,调用kafka连接器增加的avro解码器;
第二调用模块,用于调用所述avro解码器在avro行解码器类中引入的avro Java归档文件包的基准读取类;
读取及转换模块,用于通过所述基准读取类从kafka数据源读取avro数据,并将读取的avro数据转换为presto引擎支持的流数据;
数据传回模块,用于通过kafka连接器将转换的流数据传回presto引擎。
可选的,所述读取及转换模块,用于将读取的avro数据转换为presto引擎支持的流数据,具体包括:
通过所述基准读取类,调取预设的配置文件;所述配置文件记录有presto引擎中建立的表列的类型与kafka数据源中avro数据的类型的映射关系;
根据所述配置文件记录的所述映射关系,将读取的avro数据转换为与所映射的表列的类型相应的流数据。
可选的,所述读取及转换模块,用于通过所述基准读取类从kafka数据源读取avro数据,具体包括:
通过基准读取类,调用获取分区分片方法;
执行所述获取分区分片方法,获取kafka数据源中avro数据相应的分片。
可选的,所述读取及转换模块,用于通过所述基准读取类,调取配置文件,具体包括:
通过所述基准读取类,调用读取模式方法;所述配置文件为在读取模式方法中增加的读取avro模式文件;
所述读取及转换模块,用于根据所述配置文件记录的所述映射关系,将读取的avro数据转换为与所映射的表列的类型相应的流数据,具体包括:
根据读取模式方法中增加的读取avro模式文件,将avro数据相应的分片转换为与所映射的表列的类型相应的流数据。
本发明实施例还提供一种连接器,包括上述所述的数据获取装置。
本发明实施例还提供一种presto引擎,包括上述所述的连接器。
本发明实施例提供的数据获取方法,可在kafka连接器增加avro解码器,并且该avro解码器可在解码avro数据依赖的avro行解码器类中引入avro Java归档文件包的基准读取类,使得kafka连接器具有读取kafka数据源的avro数据的能力;从而在presto引擎需从kafka数据源获取avro数据时,本发明实施例可调用所述avro解码器,通过avro解码器引入的基准读取类从kafka数据源读取avro数据,并将读取的avro数据转换为presto引擎支持的流数据,进而通过kafka连接器将转换的流数据传回presto引擎,实现presto引擎获取kafka数据源的avro类型的数据。
本发明实施例可通过在kafka连接器中增加的avro解码器及avro解码器引入的基准读取类,使得kafka连接器支持avro类型的数据,实现presto引擎支持获取kafka数据源的avro类型的数据,为进一步提升presto引擎的性能提供了可能。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本发明实施例提供的presto引擎的架构图;
图2为本发明实施例提供的从kafka数据源获取数据的方法流程图;
图3为本发明实施例提供的将avro数据转换为流数据的方法流程图;
图4为本发明实施例提供的从kafka数据源获取数据的另一方法流程图;
图5为本发明实施例提供的数据获取装置的框图;
图6为本发明实施例提供的数据获取装置的另一框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1为本发明实施例提供的presto引擎的一种示例架构图,如图1所示,presto引擎10至少可以包括:调度节点(Coordinator)11,多个工作节点12,kafka连接器13;其中,kafka连接器13可与kafka数据源20连接;
在本发明实施例中,调度节点11主要用于解析客户端发送的查询请求(如SQL语句),生成查询执行计划、stage和查询任务(task),并对生成的查询任务进行调度;
工作节点12主要用于执行查询任务,通过presto引擎提供的对接数据源的连接器(connector),从数据源获取相应数据;例如,工作节点12执行查询任务,需从kafka数据源20获取数据时,工作节点12可通过kafka连接器(kafka connector)13从所连接的kafka数据源获取数据;
图1示出的仅是presto引擎10的简化示例架构,presto引擎10还可包括图1未示出的其他部件,如presto引擎10中还可存在提供数据源元信息的元数据记录节点(MetaStore)等。
kafka数据源20所提供的数据类型例如raw(未经处理的数据)、csv(Comma-Separated Values,逗号分隔值)、json(JavaScript Object Notation,JS对象简谱)及avro等;然而,现有公布的kafka连接器并无法实现avro类型的支持,而avro作为kafka重要的数据类型,其是一种数据序列化的框架,至少可提供如下属性:
1、丰富的数据结构;
2、使用快速的压缩二进制数据格式;
3、提供容器文件用于持久化数据;
4、远程过程调用RPC(Remote Procedure Call,远程过程调用);
5、动态语言结合功能;Avro和动态语言结合后,读写数据文件和使用RPC协议都不需要生成代码,而代码生成作为一种可选的优化可在静态类型语言中实现;
可见,现有公布的kafka连接器无法支持avro,presto引擎通过kafka连接器将无法通过kafka连接器获取到avro类型的数据,这限制了presto引擎对接kafka数据源时的数据类型获取范围,并且将导致诸多avro属性的缺失,将对presto引擎的性能存在影响。
基于此,本发明实施例提供技术改进,通过对kafka连接器进行配置调整,使得presto引擎通过kafka连接器从kafka数据源获取数据时,能够支持获取avro类型的数据。
作为本发明实施例公开内容的一种可选实现,本发明实施例可在presto引擎的kafka连接器增加avro解码器,使得presto引擎通过kafka连接器从kafka数据源获取数据时,能够支持获取avro类型的数据;
该avro解码器可以在decoder类(解码器类)中引入apache avro,以增加第三包;具体的,该avro解码器可在AvroRowDecoder类(avro行解码器类)中引入avro jar包的DatumReader类(基准读取类);jar包表示Java归档文件包,avro解码器解码avro数据依赖于AvroRowDecoder类。
可选的,DatumReader类可以是泛型数据类,例如DataFileStream<GenericRecord>类;在本发明实施例中,DatumReader类可从kafka数据源读取avro数据,并将读取的avro数据转换为presto引擎支持的流数据(如java类的数据形式);
以此方式,kakfa连接器可通过DatumReader的next指令不断的读取下一条avro数据,再将读取的avro数据转换为流数据,从而实现presto引擎支持获取avro数据。
可选的,图2示出了本发明实施例提供的kakfa连接器从kafka数据源获取数据的一种可选方法流程,该方法可由kafka连接器执行,参照图2,该方法流程可以包括:
步骤S10、在presto引擎需从kafka数据源获取avro数据时,调用kafka连接器增加的avro解码器。
步骤S11、调用所述avro解码器在解码avro数据依赖的AvroRowDecoder类中引入的avro jar包的DatumReader类。
其中,jar(Java Archive)表示Java归档文件。
步骤S12、通过所述DatumReader类从kafka数据源读取avro数据,并将读取的avro数据转换为presto引擎支持的流数据。
可选的,所述DatumReader类可以是泛型数据类,例如DataFileStream<GenericRecord>类。
步骤S13、通过kafka连接器将转换的流数据传回presto引擎。
kafka连接器将avro数据转换为presto引擎支持的流数据后,可将转换的流数据传回presto引擎;具体的,kafka连接器可将转换的流数据传回presto引擎的工作节点,以便工作节点顺利执行针对kafka数据源的avro数据的查询任务。
本发明实施例提供的数据获取方法,可在kafka连接器增加avro解码器,并且该avro解码器可在解码avro数据依赖的avro行解码器类中引入avro Java归档文件包的基准读取类,使得kafka连接器具有读取kafka数据源的avro数据的能力;从而在presto引擎需从kafka数据源获取avro数据时,本发明实施例可调用所述avro解码器,通过avro解码器引入的基准读取类从kafka数据源读取avro数据,并将读取的avro数据转换为presto引擎支持的流数据,进而通过kafka连接器将转换的流数据传回presto引擎,实现presto引擎获取kafka数据源的avro类型的数据。
本发明实施例可通过在kafka连接器中增加的avro解码器及avro解码器引入的基准读取类,使得kafka连接器支持avro类型的数据,实现presto引擎支持获取kafka数据源的avro类型的数据,为进一步提升presto引擎的性能提供了可能。
可选的,本发明实施例可预先设置配置文件,通过预设的配置文件记录presto引擎中建立的表列的类型与kafka数据源中avro数据的类型的映射关系;从而在通过DatumReader类将读取的avro数据转换为presto引擎支持的流数据时,本发明实施例可通过DatumReader类,调取预设的配置文件,进而根据该配置文件记录的所述映射关系,将读取的avro数据转换为与所映射的表列的类型相应的流数据,从而实现将读取的avro数据转换为presto引擎支持的流数据。
作为本发明实施例公开内容的一种可选实现,本发明实施例可在AvroRowDecoder类中解码avro数据,具体可在AvroRowDecoder类引入的avro jar包的DatumReader类中解码avro数据;该AvroRowDecoder类可以注册到AvroRowDecoderFactory类(avro行解码父类)。
可选的,为实现在配置文件记录上述所述的映射关系,本发明实施例可在kafkasplit类(kafka分片类)中,增加两个属性keyDataSchemaContents属性(值数据模式内容属性),messageDataSchemaContents属性(消息数据模式内容属性);即配置文件可以包括在kafka分片类中增加的keyDataSchemaContents属性及messageDataSchemaContents属性;
其中,keyDataSchemaContents属性可以记录kafka中avro数据的key数据(值数据),映射到presto引擎中建立的表列的描述信息;
messageDataSchemaContents属性可以记录kafka中avro数据的message数据(消息数据),映射到presto引擎中建立的表列的描述信息;key和message可以认为是avro的模式配置,模式定义了数据类型,字段名字,数据结构等信息;需要说明的是,在avro中,对于每对Meta data(元数据)信息,都有一个string型的key(需要以“avro.”为前缀)和二进制编码后的value;在avro中,客户端需要与服务器端交换双方通信的协议,它类似于模式,在avro中被称为消息(Message)。
可选的,将avro数据转换为流数据的一种可选实现方法可如图3所示,参照图3,该方法流程可以包括:
步骤S20、调用kafkasplit类中增加的keyDataSchemaContents属性及messageDataSchemaContents属性。
步骤S21、根据keyDataSchemaContents属性记录的avro数据的key数据,映射到presto引擎中建立的表列的描述信息,将avro数据的key数据转换为与所映射的表列的类型相应的流数据。
步骤S22、根据messageDataSchemaContents属性记录的avro数据的消息数据,映射到presto引擎中建立的表列的描述信息,将avro数据的消息数据转换为与所映射的表列的类型相应的流数据。
可选的,步骤S21和步骤S22之间可以没有明显的执行先后顺序,如步骤S21和步骤S22可以同步执行,当然,本发明实施例也可支持步骤S21和步骤S22之间存在执行先后顺序。
可选的,在本发明实施例中,kafka数据源的avro模式配置可以分为key数据和消息数据;avro模式可以定义了avro数据类型,字段名字,数据结构等信息;
在本发明实施例中,作为一种可选实现,key数据可以封装在keyDataSchemaLocation属性(值数据模式位置属性)中,消息数据可以封装在messageDataSchemaLocation属性(消息数据模式位置属性)中;并且,本发明实施例可在KafkaTableHandle类(KafkaTableHandle类,用于获取topic的元数据信息)中增加keyDataSchemaLocation属性和messageDataSchemaLocation属性,在KafkaTopicDescription类(kafka主题描述类)中增加keyDataSchemaLocation属性和messageDataSchemaLocation属性。
可选的,进一步,本发明实施可在配置文件中说明avro数据格式,如说明avro数据的类型名称,命名空间;从而可在配置文件中记录,avro数据的类型名称和命名空间与presto的表列中数据类型和结构体的对应关系,例如,可定义avro格式数据的整数,浮点数,字符串,数组及map等数据类型,与presto引擎的表列中数据类型和结构体的对应关系。
可选的,配置文件中可设置kafka log表(kafka日志表),该kafka log表的描述文件可以是json格式文件,可用于说明presto引擎的表列和kafka数据源中avro格式的key数据和message数据的对应关系。
可选的,在从kafka数据源读取avro数据时,所读取的数据可以是分片形式,本发明实施例可通过将读取的avro数据相应的分片转换为,与所映射的表列的类型相应的流数据,实现presto引擎支持获取kafka数据源的avro数据;
可选的,kakfa连接器通过DatumReader类从kafka数据源读取avro数据可以是:通过DatumReader类调用getpartitionsplits()方法(获取分区分片方法),从而执行getpartitionsplits()方法,获取kafka数据源中avro数据相应的分片(split);其中,getpartitionsplits()方法可以解释为获取分区分片方法;
可选的,kakfa连接器通过DatumReader类,将读取的avro数据转换为presto引擎支持的流数据可以是:通过DatumReader类,调用readschema方法(读模式方法),该readschema方法中可增加读取avro schema文件(读取avro模式文件);该读取avro schema文件可以记录,presto引擎中建立的表列的类型与kafka数据源中avro数据的类型的映射关系;从而基于该映射关系,可将获取的avro数据相应的分片,转换为与所映射的表列的类型相应的流数据;
相应的,上文所述的配置文件可以是在readschema方法中增加的读取avroschema文件。
作为本发明实施例公开内容的一种可选实现,图4示出了kakfa连接器从kafka数据源获取数据的另一种可选方法流程,该方法可由kafka连接器执行,参照图4,该方法流程可以包括:
步骤S30、遍历kafka数据源中avro数据相应的topic的所有分区;其中,一个topic分割为至少一个分区,每个分区使用多个segment记录avro数据。
可选的,kafka是使用topic(主题)来划分kafka中的数据所属的类,在kafka数据源中,一个topic可以理解为kafka数据源中的一张表,topic的名称即为表名;
topic可以分割为一个或多个partition(分区),每个topic至少有一个partition;每个partition中可以使用多个segment(段)记录数据。
可以看出,以kafka记录的avro数据为例,kafka中的avro数据是以topic为基本单位组织的,不同的topic之间是相互独立的;每个topic又可以分成几个不同的partition(每个topic有几个partition是在创建topic时指定的),每个partition通过多个segment记录avro数据。
步骤S31、对遍历的每个分区获取对应的leader节点的simple consumer对象。
可选的,在kafka中,replica(复制)是partition的副本,可以保证partition的高可用;
consumer(消费者)是从kafka中消费数据的终端或服务,kafka可以提供两套API(Application Programming Interface,应用程序编程接口)给consumer:the high levelconsumer API(高级消费者API),the simple consumer API(简单消费者API);
leader节点为replica中的角色,在kafka中,数据生产者和consumer只跟leader节点交互。
可选的,在遍历到一个partition时,可通过partition的replica中的leader节点(即所遍历的partition对应的leader节点),获取该leader节点的the simple consumerAPI(即leader节点可通过the simple consumer API与consumer交互),实现对遍历的分区获取对应的leader节点的simple consumer对象。
可选的,对于遍历的任一分区,确定该分区对应的leader节点后,可通过getconsumer()方法,获取该leader节点的simpleconsumer对象。
步骤S32、根据所述simple consumer对象,获取分区各segment的起始偏移量。
通过simple consumer对象,可确定分区的各segment,进而获取分区各segment的起始偏移量。
可选的,在kafka中,对于每个partition,partition中的每条数据由数据所在的segment的起始偏移量(offset)表示,数据在partition中的偏移量;offset不是该数据在partition中的实际记录位置,而是逻辑上的一个值,offset可唯一确定partition中的一条数据;因此,可以认为offset是partition中数据的id;partition中的每条数据包含了以下三个属性,该三个属性可在数据所在的segment中记录:
offset;
message size;
data;
其中,message size表示data有多大;data为数据的具体内容。
可选的,步骤S32可通过findAllOffsets()方法实现,即可通过findAllOffsets()方法获取分区各segment的起始偏移量。
步骤S33、根据各segment的起始偏移量,确定各segment记录的avro数据,分别将各segment记录的avro数据封装为split(分片)。
可选的,步骤S30至步骤S33可通过DatumReader类调用getpartitionsplits()方法,执行getpartitionsplits()方法实现。
步骤S34、根据读取模式方法中增加的读取avro模式文件,将avro数据相应的split转换为与所映射的表列的类型相应的流数据。
可选的,本发明实施例还可通过kafka连接器将转换的流数据传回presto引擎。
可选的,本发明实施例可通过DatumReader类调用readschema方法(读取模式方法),从而执行readschema方法,根据readschema方法中增加的读取avro模式文件实现步骤S34。
需要说明的是,现有技术中,现有公布的kafka连接器无法支持avro,因此就算将kafka数据中各segment记录的avro数据封装为split后,现有公布的kafka连接器也无法通过readschema方法将avro数据相应的split读取到presto引擎中;
本发明实施例为支持kafka连接器获取kafka数据源中avro数据,可在kafka连接器的readschema方法中增加读取avro模式文件(读取avro schema文件);本发明实施例可将presto引擎中建立的表列的类型和kafka数据源中avro格式数据的类型相映射,从而可在读取avro模式文件中记录,presto引擎中建立的表列的类型与kafka数据源中avro数据的类型的映射关系;
进而,在读取kafka数据源中的avro数据时,通过读取avro模式文件,可确定presto引擎中建立的表列的类型和kafka数据源中avro数据的映射关系,从而本发明实施例可将kafka数据源中avro数据相应的split转换为,与所映射的表列的类型相应的流数据,实现presto引擎对kafka数据源中记录的avro数据的获取。
应用本发明实施例,可使得kafka连接器支持avro类型的数据,实现presto引擎支持获取kafka数据源的avro类型的数据,为进一步提升presto引擎的性能提供了可能。
上文描述了本发明实施例提供的多个实施例方案,各实施例方案介绍的各可选方式可在不冲突的情况下相互结合、交叉引用,从而延伸出多种可能的实施例方案,这些均可认为是本发明实施例披露、公开的实施例方案。
下面对本发明实施例提供的数据获取装置进行介绍,下文描述的数据获取装置可以认为是kafka连接器为实现上文所述的数据获取方法,所需设置的功能模块架构。下文描述的数据获取装置的内容,可与上文描述的数据获取方法的内容相互对应参照。
图5为本发明实施例提供的数据获取装置的框图,该数据获取装置可应用于kafka连接器,参照图5,该数据获取装置可以包括:
第一调用模块100,用于在presto引擎需从kafka数据源获取avro数据时,调用kafka连接器增加的avro解码器;
第二调用模块200,用于调用所述avro解码器在avro行解码器类中引入的avroJava归档文件包的基准读取类;
读取及转换模块300,用于通过所述基准读取类从kafka数据源读取avro数据,并将读取的avro数据转换为presto引擎支持的流数据;
数据传回模块400,用于通过kafka连接器将转换的流数据传回presto引擎。
可选的,所述基准读取类可以包括泛型数据类。
可选的,读取及转换模块300,用于将读取的avro数据转换为presto引擎支持的流数据,具体包括:
通过所述基准读取类,调取预设的配置文件;所述配置文件记录有presto引擎中建立的表列的类型与kafka数据源中avro数据的类型的映射关系;
根据所述配置文件记录的所述映射关系,将读取的avro数据转换为与所映射的表列的类型相应的流数据。
可选的,所述配置文件包括:在kafka分片类中增加的值数据模式内容属性及消息数据模式内容属性;
其中,所述值数据模式内容属性记录有avro数据的值数据,映射到presto引擎中建立的表列的描述信息;所述消息数据模式内容属性记录有avro数据的消息数据,映射到presto引擎中建立的表列的描述信息。
可选的,读取及转换模块300,用于根据所述配置文件记录的所述映射关系,将读取的avro数据转换为与所映射的表列的类型相应的流数据,具体包括:
调用所述值数据模式内容属性及消息数据模式内容属性;
根据所述值数据模式内容属性记录的avro数据的值数据,映射到presto引擎中建立的表列的描述信息,将avro数据的值数据转换为与所映射的表列的类型相应的流数据;
根据所述消息数据模式内容属性记录的avro数据的消息数据,映射到presto引擎中建立的表列的描述信息,将avro数据的消息数据转换为与所映射的表列的类型相应的流数据。
可选的,图6示出了本发明实施例提供的数据获取装置的另一框图,结合图5和图6所示,该数据获取装置还可以包括:
属性增加模块500,用于在KafkaTableHandle类中增加值数据模式位置属性和消息数据模式位置属性,在kafka主题描述类中增加值数据模式位置属性和消息数据模式位置属性;其中,值数据封装在所述值数据模式位置属性中,消息数据封装在所述消息数据模式位置属性中。
可选的,所述配置文件设置有kafka日志表;所述kafka日志表的描述文件为json格式,所述描述文件说明有presto引擎的表列和kafka数据源中avro格式的值数据和消息数据的对应关系。
可选的,读取及转换模块300,用于通过所述基准读取类从kafka数据源读取avro数据,具体包括:
通过基准读取类,调用获取分区分片方法;
执行所述获取分区分片方法,获取kafka数据源中avro数据相应的分片。
可选的,读取及转换模块300,用于执行所述获取分区分片方法,获取kafka数据源中avro数据相应的分片,具体包括:
遍历kafka数据源中avro数据相应的主题的所有分区;其中,一个主题分割为至少一个分区,每个分区使用多个段记录avro数据;
对遍历的每个分区获取对应的leader节点的简单消费者对象;
根据所述简单消费者对象,获取分区各段的起始偏移量;
根据各段的起始偏移量,确定各段记录的avro数据,分别将各段记录的avro数据封装为分片;
获取avro数据相应的分片。
可选的,所述配置文件为在读取模式方法中增加的读取avro模式文件;读取及转换模块300,用于通过所述基准读取类,调取配置文件,具体包括:
通过所述基准读取类,调用读取模式方法;
可选的,读取及转换模块300,用于根据所述配置文件记录的所述映射关系,将读取的avro数据转换为与所映射的表列的类型相应的流数据,具体包括:
根据读取模式方法中增加的读取avro模式文件,将avro数据相应的分片转换为与所映射的表列的类型相应的流数据。
本发明实施例提供的数据获取装置可使得kafka连接器支持avro类型的数据,实现presto引擎支持获取kafka数据源的avro类型的数据,为进一步提升presto引擎的性能提供了可能。
进一步,本发明实施例还提供一种连接器,该连接器可以包括上述所述的数据获取装置。连接器可以是presto引擎的kafka连接器。
进一步,本发明实施例还可提供一种presto引擎,该presto引擎可以包括上述所述的连接器;可选的,presto引擎的示例架构可如图1及图1相应说明所示,此处不再赘述;
presto引擎所包括的连接器可以是kafka连接器,该kafka连接器可支持avro类型的数据,从而使得presto引擎可通过所述kafka连接器支持获取kafka数据源的avro类型的数据,为提升presto引擎的性能提供了可能。
虽然本发明实施例披露如上,但本发明并非限定于此。任何本领域技术人员,在不脱离本发明的精神和范围内,均可作各种更动与修改,因此本发明的保护范围应当以权利要求所限定的范围为准。
Claims (16)
1.一种数据获取方法,其特征在于,包括:
在presto引擎需从kafka数据源获取avro数据时,调用kafka连接器增加的avro解码器;
调用所述avro解码器在avro行解码器类中引入的avro Java归档文件包的基准读取类;
通过所述基准读取类从kafka数据源读取avro数据,并将读取的avro数据转换为presto引擎支持的流数据;
通过kafka连接器将转换的流数据传回presto引擎。
2.根据权利要求1所述的数据获取方法,其特征在于,所述基准读取类包括泛型数据类。
3.根据权利要求1或2所述的数据获取方法,其特征在于,所述将读取的avro数据转换为presto引擎支持的流数据包括:
通过所述基准读取类,调取预设的配置文件;所述配置文件记录有presto引擎中建立的表列的类型与kafka数据源中avro数据的类型的映射关系;
根据所述配置文件记录的所述映射关系,将读取的avro数据转换为与所映射的表列的类型相应的流数据。
4.根据权利要求3所述的数据获取方法,其特征在于,所述配置文件包括:在kafka分片类中增加的值数据模式内容属性及消息数据模式内容属性;
其中,所述值数据模式内容属性记录有avro数据的值数据,映射到presto引擎中建立的表列的描述信息;所述消息数据模式内容属性记录有avro数据的消息数据,映射到presto引擎中建立的表列的描述信息。
5.根据权利要求4所述的数据获取方法,其特征在于,所述根据所述配置文件记录的所述映射关系,将读取的avro数据转换为与所映射的表列的类型相应的流数据包括:
调用所述值数据模式内容属性及消息数据模式内容属性;
根据所述值数据模式内容属性记录的avro数据的值数据,映射到presto引擎中建立的表列的描述信息,将avro数据的值数据转换为与所映射的表列的类型相应的流数据;
根据所述消息数据模式内容属性记录的avro数据的消息数据,映射到presto引擎中建立的表列的描述信息,将avro数据的消息数据转换为与所映射的表列的类型相应的流数据。
6.根据权利要求4或5所述的数据获取方法,其特征在于,所述方法还包括:
在KafkaTableHandle类中增加值数据模式位置属性和消息数据模式位置属性,在kafka主题描述类中增加值数据模式位置属性和消息数据模式位置属性;其中,值数据封装在所述值数据模式位置属性中,消息数据封装在所述消息数据模式位置属性中。
7.根据权利要求3所述的数据获取方法,其特征在于,所述配置文件设置有kafka日志表;所述kafka日志表的描述文件为json格式,所述描述文件说明有presto引擎的表列和kafka数据源中avro格式的值数据和消息数据的对应关系。
8.根据权利要求3所述的数据获取方法,其特征在于,所述通过所述基准读取类从kafka数据源读取avro数据包括:
通过基准读取类,调用获取分区分片方法;
执行所述获取分区分片方法,获取kafka数据源中avro数据相应的分片。
9.根据权利要求8所述的数据获取方法,其特征在于,所述执行所述获取分区分片方法,获取kafka数据源中avro数据相应的分片包括:
遍历kafka数据源中avro数据相应的主题的所有分区;其中,一个主题分割为至少一个分区,每个分区使用多个段记录avro数据;
对遍历的每个分区获取对应的leader节点的简单消费者对象;
根据所述简单消费者对象,获取分区各段的起始偏移量;
根据各段的起始偏移量,确定各段记录的avro数据,分别将各段记录的avro数据封装为分片;
获取avro数据相应的分片。
10.根据权利要求8或9所述的数据获取方法,其特征在于,所述配置文件为在读取模式方法中增加的读取avro模式文件;所述通过所述基准读取类,调取配置文件包括:
通过所述基准读取类,调用读取模式方法;
所述根据所述配置文件记录的所述映射关系,将读取的avro数据转换为与所映射的表列的类型相应的流数据包括:
根据读取模式方法中增加的读取avro模式文件,将avro数据相应的分片转换为与所映射的表列的类型相应的流数据。
11.一种数据获取装置,其特征在于,包括:
第一调用模块,用于在presto引擎需从kafka数据源获取avro数据时,调用kafka连接器增加的avro解码器;
第二调用模块,用于调用所述avro解码器在avro行解码器类中引入的avro Java归档文件包的基准读取类;
读取及转换模块,用于通过所述基准读取类从kafka数据源读取avro数据,并将读取的avro数据转换为presto引擎支持的流数据;
数据传回模块,用于通过kafka连接器将转换的流数据传回presto引擎。
12.根据权利要求11所述的数据获取装置,其特征在于,所述读取及转换模块,用于将读取的avro数据转换为presto引擎支持的流数据,具体包括:
通过所述基准读取类,调取预设的配置文件;所述配置文件记录有presto引擎中建立的表列的类型与kafka数据源中avro数据的类型的映射关系;
根据所述配置文件记录的所述映射关系,将读取的avro数据转换为与所映射的表列的类型相应的流数据。
13.根据权利要求12所述的数据获取装置,其特征在于,所述读取及转换模块,用于通过所述基准读取类从kafka数据源读取avro数据,具体包括:
通过基准读取类,调用获取分区分片方法;
执行所述获取分区分片方法,获取kafka数据源中avro数据相应的分片。
14.根据权利要求13所述的数据获取装置,其特征在于,所述读取及转换模块,用于通过所述基准读取类,调取配置文件,具体包括:
通过所述基准读取类,调用读取模式方法;所述配置文件为在读取模式方法中增加的读取avro模式文件;
所述读取及转换模块,用于根据所述配置文件记录的所述映射关系,将读取的avro数据转换为与所映射的表列的类型相应的流数据,具体包括:
根据读取模式方法中增加的读取avro模式文件,将avro数据相应的分片转换为与所映射的表列的类型相应的流数据。
15.一种连接器,其特征在于,包括权利要求11-14任一项所述的数据获取装置。
16.一种presto引擎,其特征在于,包括权利要求15所述的连接器。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811275079.3A CN111125207B (zh) | 2018-10-30 | 2018-10-30 | 一种数据获取方法、装置、连接器及presto引擎 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811275079.3A CN111125207B (zh) | 2018-10-30 | 2018-10-30 | 一种数据获取方法、装置、连接器及presto引擎 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111125207A CN111125207A (zh) | 2020-05-08 |
CN111125207B true CN111125207B (zh) | 2021-03-12 |
Family
ID=70484161
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811275079.3A Active CN111125207B (zh) | 2018-10-30 | 2018-10-30 | 一种数据获取方法、装置、连接器及presto引擎 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111125207B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114553866B (zh) * | 2022-01-19 | 2024-09-17 | 深圳力维智联技术有限公司 | 全量数据的接入方法、装置以及计算机可读存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105335472A (zh) * | 2015-09-30 | 2016-02-17 | 北京京东尚科信息技术有限公司 | 一种更新数据查询引擎配置列表的方法及装置 |
CN105787119A (zh) * | 2016-03-25 | 2016-07-20 | 盛趣信息技术(上海)有限公司 | 基于混合引擎的大数据处理方法及系统 |
CN108037973A (zh) * | 2017-12-20 | 2018-05-15 | 苏州优圣美智能系统有限公司 | 一种与数据处理工具交互的数据流建模和处理系统 |
CN108228628A (zh) * | 2016-12-15 | 2018-06-29 | 亿度慧达教育科技(北京)有限公司 | 一种结构化查询语言数据库中的宽表生成方法及其装置 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130091192A1 (en) * | 2011-10-11 | 2013-04-11 | Mohammed Saleem Shafi | Asynchronous messaging bus |
US10762086B2 (en) * | 2016-09-01 | 2020-09-01 | Amazon Technologies, Inc. | Tracking query execution status for selectively routing queries |
CN107479990B (zh) * | 2017-08-11 | 2020-12-18 | 恒丰银行股份有限公司 | 一种分布式软件服务系统 |
CN108038226A (zh) * | 2017-12-25 | 2018-05-15 | 郑州云海信息技术有限公司 | 一种数据快速采集系统及方法 |
-
2018
- 2018-10-30 CN CN201811275079.3A patent/CN111125207B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105335472A (zh) * | 2015-09-30 | 2016-02-17 | 北京京东尚科信息技术有限公司 | 一种更新数据查询引擎配置列表的方法及装置 |
CN105787119A (zh) * | 2016-03-25 | 2016-07-20 | 盛趣信息技术(上海)有限公司 | 基于混合引擎的大数据处理方法及系统 |
CN108228628A (zh) * | 2016-12-15 | 2018-06-29 | 亿度慧达教育科技(北京)有限公司 | 一种结构化查询语言数据库中的宽表生成方法及其装置 |
CN108037973A (zh) * | 2017-12-20 | 2018-05-15 | 苏州优圣美智能系统有限公司 | 一种与数据处理工具交互的数据流建模和处理系统 |
Non-Patent Citations (2)
Title |
---|
Presto: Towards efficient online virtual network embedding in virtualized cloud data centers;Ting Wang et al;《Computer Networks》;20160930;第106卷(第4期);第196-208页 * |
基于企业营业日志的大数据分析与辅助决策研究;陈任飞;《中国优秀硕士学位论文全文数据库 经济与管理科学辑》;20180415;第2018年卷(第04期);第J152-1373页 * |
Also Published As
Publication number | Publication date |
---|---|
CN111125207A (zh) | 2020-05-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111078504A (zh) | 一种分布式调用链跟踪方法、装置、计算机设备及存储介质 | |
CN101609415B (zh) | 基于中间件的通用服务调用系统及方法 | |
US9535966B1 (en) | Techniques for aggregating data from multiple sources | |
US11188443B2 (en) | Method, apparatus and system for processing log data | |
KR20100085725A (ko) | 콘텐트 정보 제공 및 재생 방법 및 장치 | |
CN107566477B (zh) | 一种在分布式文件系统集群中获取文件的方法和装置 | |
CN104765840A (zh) | 一种大数据分布式存储的方法和装置 | |
CN102970378A (zh) | 二进制数据优化传输系统 | |
CN113742518B (zh) | 存储和提供视频的方法、设备和计算机程序产品 | |
CN107864208B (zh) | 一种新媒体资讯融合的方法 | |
CN104794190A (zh) | 一种大数据有效存储的方法和装置 | |
CN104378234A (zh) | 跨数据中心的数据传输处理方法及系统 | |
CN114490889A (zh) | 配置信息处理方法、装置、设备、介质及程序产品 | |
US8621016B2 (en) | Adaptive differential propagation of soap messages | |
CN104320441A (zh) | 无线通信系统间信息共享方法 | |
KR101719926B1 (ko) | 데이터 수집 api를 통해 저장된 이질적인 데이터 간 변환 시스템 및 방법 | |
CN111142849B (zh) | 流程处理方法、装置、存储介质及处理器 | |
CN113381870A (zh) | 报文处理方法和设备 | |
US20140013007A1 (en) | Access log management method | |
CN111125207B (zh) | 一种数据获取方法、装置、连接器及presto引擎 | |
CN113778897B (zh) | 接口的自动测试方法、装置、设备及存储介质 | |
CN110781058A (zh) | 一种移动端应用性能数据采集方法、装置、设备及介质 | |
CN110049133B (zh) | 一种dns区文件全量下发的方法和装置 | |
CN111782882A (zh) | 一种tcp报文转换方法、装置、系统及计算机存储介质 | |
CN112883088A (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 |