Apache Druid自定义扩展模块-数据解析器

简介: 一.简述 Apache Druid已有的扩展模块很多包括:HDFS存储使用的druid-hdfs-storage,Kafka数据接入使用的druid-kafka-indexing-service,将MySQL做为元数据库使用的mysql-metadata-storage,数据排重使用的druid-datasketches;但有时这些也无法满足我们实际应用场景下的特殊需求,那么必要的二次开发增加自定义的模块就成了必然。

一.简述

Apache Druid已有的扩展模块很多包括:HDFS存储使用的druid-hdfs-storage,Kafka数据接入使用的druid-kafka-indexing-service,将MySQL做为元数据库使用的mysql-metadata-storage,数据排重使用的druid-datasketches;但有时这些也无法满足我们实际应用场景下的个性化需求,那么必要的二次开发增加自定义的模块就成了必然。例如:数据解析器druid-thrift-extensions

二.实现

Ⅰ).创建工程

创建java工程,并在sources目录中添加文件:org.apache.druid.initialization.DruidModule;文件内容如下:

com.yun.druid.data.input.thrift.ThriftExtensionModule

Ⅱ).接口实现

a).ThriftExtensionsModule

ThriftExtensionsModule实现DruidModule接口,并重写getJacksonModules方法;需注册类ThriftInputRowParser.class和别名(yun-thrift)

@Override
    public List<? extends Module> getJacksonModules() {
        // TODO Auto-generated method stub
        return Collections.singletonList(
                new SimpleModule("ThriftInputRowParserModule").registerSubtypes(
                        new NamedType(ThriftInputRowParser.class, "yun-thrift")));
    }

b).ThriftInputRowParser

ThriftInputRowParser类实现InputRowParser

接口,并重写 parseBatch方法

@JsonCreator
    public ThriftInputRowParser(
            @JsonProperty("parseSpec") ParseSpec parseSpec,
            @JsonProperty("jarPath") String jarPath,
            @JsonProperty("thriftClassName") String thriftClassName)
    {
        this.jarPath = jarPath;
        this.thriftClassName = thriftClassName;
        
        Preconditions.checkNotNull(thriftClassName, "thrift class name");
        
        this.parseSpec = parseSpec;
        this.demensions = parseSpec.getDimensionsSpec().getDimensionNames();
    }
    
    public List<InputRow> parseBatch(Object input){
        final TBase tbase;
        try {
            
            if(input instanceof ByteBuffer) {
                final byte[] bytes = ((ByteBuffer) input).array();
            }
            
        } catch (Exception e) {
            // TODO: handle exception
        }
        return null;
    }

Ⅲ).自定义逻辑

具体逻辑实现,根据需求重写parseBatch方法中实现

Ⅳ).打包

将该工程打成jar包,命名规则可以是:druid-namesparce-thrift-extension.jar

三.使用

Ⅰ).jar包位置

在./apache-druid-0.14.0-incubating/extensions目录,创建druid-namesparce-thrift-extension文件夹;然后将自定义模块工程jar包以及依赖的jar包放到该目录

Ⅱ).导入配置

在conf/druid/_common/common.runtime.properties的配置文件中添加如下配置,然后重启角色

druid.extensions.loadList=["druid-histogram", "druid-datasketches", "druid-lookups-cached-global", "druid-kafka-indexing-service", "mysql-metadata-storage", "druid-hdfs-storage", "druid-<namesparce>-thrift-extension"]

Ⅲ).任务中使用

在提交任务的json文件的解析器部分,指定type为自定义的别名;其中,thriftJar、thriftClass和protocol可以不配置

    "parser": {
            "type": "yun-thrift",
            "thriftJar":"druid-<namesparce>-thrift-extension.jar",
            "thriftClass":"com.yun.druid.data.input.thrift.ThriftExtensionModule.class",
            "protocol":"compact",
            "parseSpec": {
                "format": "json",
                "timestampSpec": {
                    "column": "time",
                    "format": "auto"
                },
                "dimensionsSpec": {
                    "dimensions": [
                        "appName",
                        "nodeName"
                    ],
                    "dimensionExclusions": []
                }
            }

Ⅳ).启动任务验证

根据自己的任务配置文件,参考如下启动命令,启动并验证自定义解析器

curl -XPOST -H'Content-Type: application/json' -d @quickstart/tutorial/kafka-streaming.json http://hostname:8081/druid/indexer/v1/supervisor
目录
相关文章
|
存储 缓存 算法
分布式锁服务深度解析:以Apache Flink的Checkpointing机制为例
【10月更文挑战第7天】在分布式系统中,多个进程或节点可能需要同时访问和操作共享资源。为了确保数据的一致性和系统的稳定性,我们需要一种机制来协调这些进程或节点的访问,避免并发冲突和竞态条件。分布式锁服务正是为此而生的一种解决方案。它通过在网络环境中实现锁机制,确保同一时间只有一个进程或节点能够访问和操作共享资源。
740 3
|
存储 人工智能 数据处理
Apache Doris 2025 Roadmap:构建 GenAI 时代实时高效统一的数据底座
秉承“以场景驱动创新” 的核心理念,持续深耕三大核心场景的关键能力,并对大模型 GenAI 场景的融合应用进行重点投入,为智能时代构建实时、高效、统一的数据底座。
903 10
Apache Doris 2025 Roadmap:构建 GenAI 时代实时高效统一的数据底座
|
存储 SQL 缓存
Apache Doris & SelectDB 技术能力全面解析
本文将对 Doris & SelectDB 适合的分析场景和技术能力进行概述解析
2290 1
Apache Doris & SelectDB 技术能力全面解析
|
存储 运维 监控
从 ClickHouse 到 Apache Doris:在网易云音乐日增万亿日志数据场景下的落地
日志数据已成为企业洞察系统状态、监控网络安全及分析业务动态的宝贵资源。网易云音乐引入 Apache Doris 作为日志库新方案,替换了 ClickHouse。解决了 ClickHouse 运维复杂、不支持倒排索引的问题。目前已经稳定运行 3 个季度,规模达到 50 台服务器, 倒排索引将全文检索性能提升7倍,2PB 数据,每天新增日志量超过万亿条,峰值写入吞吐 6GB/s 。
1361 5
从 ClickHouse 到 Apache Doris:在网易云音乐日增万亿日志数据场景下的落地
|
存储 SQL 数据挖掘
数据无界、湖仓无界, Apache Doris 湖仓一体解决方案全面解读(上篇)
湖仓一体架构融合了数据湖的低成本、高扩展性,以及数据仓库的高性能、强数据治理能力,高效应对大数据时代的挑战。为助力企业实现湖仓一体的建设,Apache Doris 提出了数据无界和湖仓无界核心理念,并结合自身特性,助力企业加速从 0 到 1 构建湖仓体系,降低转型过程中的风险和成本。本文将对湖仓一体演进及 Apache Doris 湖仓一体方案进行介绍。
1685 1
数据无界、湖仓无界, Apache Doris 湖仓一体解决方案全面解读(上篇)
|
消息中间件 存储 负载均衡
Apache Kafka核心概念解析:生产者、消费者与Broker
【10月更文挑战第24天】在数字化转型的大潮中,数据的实时处理能力成为了企业竞争力的重要组成部分。Apache Kafka 作为一款高性能的消息队列系统,在这一领域占据了重要地位。通过使用 Kafka,企业可以构建出高效的数据管道,实现数据的快速传输和处理。今天,我将从个人的角度出发,深入解析 Kafka 的三大核心组件——生产者、消费者与 Broker,希望能够帮助大家建立起对 Kafka 内部机制的基本理解。
839 2
|
SQL 消息中间件 大数据
大数据-159 Apache Kylin 构建Cube 准备和测试数据(一)
大数据-159 Apache Kylin 构建Cube 准备和测试数据(一)
546 1
|
SQL 大数据 Apache
大数据-159 Apache Kylin 构建Cube 准备和测试数据(二)
大数据-159 Apache Kylin 构建Cube 准备和测试数据(二)
329 1
|
JSON 前端开发 JavaScript
前端模块打包器的深度解析
【10月更文挑战第13天】前端模块打包器的深度解析
|
缓存 前端开发 JavaScript
Webpack技术深度解析:模块打包与性能优化
【10月更文挑战第13天】Webpack技术深度解析:模块打包与性能优化

热门文章

最新文章

推荐镜像

更多
  • DNS