Druid 数据摄入

1. 概述

    Druid的数据摄入主要包括两大类,流式数据摄入和静态数据摄入

1.1 对于流式数据的摄入,Druid提供了两种方式,分别是push和pull,

    采用pull方式摄取数据,需要启动一个实时节点,通过不同的firehose摄入不同的流式数据,firehose可以被认为Druid接入不同数据源的适配器。例如从kafka摄入数据,就用kafkaFirehose,从RabbitMQ摄入数据,就用RabbitMQFirehose

    采用push摄入数据,需要使用Druid索引服务(indexing Service),索引服务会启动一个Http服务,数据通过调用这个HTTP服务推送到Druid系统

1.2 静态数据源

    静态数据可以通过实时节点摄入,也可以通过索引服务启动一个任务来进行摄入。

 

2.实时数据摄入_以pull的方式

    以pull方式摄入数据,需要启动一个实时节点,需要一个配置文件去指定数据输入的相关参数,这个配置文件是Ingestion Spec,是一个json格式文件,有三部分组成

{

   "dataSchema"   说明数据源的格式,数据解析 维度等信息

   "ioConfig"     说明数据如何在Druid存储

    "tuningConfig"  说明数据优化的配置

}

2.1 dataSchema是数据源的描述

具体格式如下

{

"datasource": "  " String类型,数据源的名字

"parser" :{...}  JSON对象,包含如何解析数据的内容

"metricsSpec":[...] list 包含所有指标列的信息

"granularitySpec":{...}  json对象,指明数据的存储和查询力度

}

2.1.1 parser 声明了如何解析一条数据,parser支持string  protebuffer格式,社区中也贡献了一些插件可以支持其他的格式

parser :{

    “type” : "..."  string数据类型

    “parseSpec”{....} json对象 指明了数据源格式,比如维度列表,指标列表,时间戳列名 常用的有三种格式 JSON  CSV  TSV

}

    JSON parseSpec

parseSpec :{

    "format":"json"

    "timestampSpec":{...}  json对象,指明时间戳列名和格式

    "dimensionsSpec":{...} json对象,指明维度的设置

    "flattenSpec":{...} json对象,若有json有嵌套层级,则需要指定

}

    其中timestampSpec如下:

dimensionsSpec :{

    "dimensions : [....]"  List[String] 维度名列表

    "dimensionExclusions":[...]   List[String] 剔除的维度名列表,可选

    "spatialDimensions":[...]  List[String] 空间维度名列表,主要用于地理几何运算,可选

}

     CSV parseSpec

parseSpec : {

    format : csv

    timestampSpec : {....} json对象,时间戳列名和格式

    dimensionsSpec: {...} json对象,指明维度的设置

    columns : [....]  List[String] CSV数据列名

    listDelimiter : "..." String 多值维度列,数据分隔符,可选

}

    TSV ParseSpec

parseSpec : {

    format : tsv

    timestampSpec : {....} json对象,时间戳列名和格式

    dimensionsSpec : {...} json对象,维度的设置

    colums : [....] list[String] TSV数据列名

    listDelimiter : "..." string,多值维度列,数据分隔符,可选

    delimiter : "...." string 数据分隔符 ,默认值为 \t ,可选

}

2.1.2 metricsSpec

    metricsSpec是一个json数组,指明所有的指标列和所用的聚合函数,数据格式

metricsSpec : [

    {

    type : "....." count | longSum等聚合函数类型

    fieldName : ......  string 聚合函数运用的列名,可选

    name  : ..... string 聚合后指标列名

    }

]

    一些简单的聚合函数:

    • count : 统计满足查询过滤条件的数据行数,这个行数跟原始输入的行数不一样,因为druid会对原始数据进行聚合,这是聚合后的行数

    • longSum 做求和

    • longMin 求最小

    • longMax 求最大

    • doubleSum

    • doubleMin

    • doubleMax

2.1.3 GranularitySpec 指定segment的存储粒度和查询粒度

granularitySpec : {

    type : uniform

    segmentGranularity : ....    string segment的存储粒度,HOUR DAY

    queryGranularity : ....      string 最小查询粒度 MINUTE HOUR

    intervals : ....             输入数据的时间段,可选,对于流式数据pull方式而言可以忽略

}

 

2.2 ioConfig  指明了真正具体的数据源

ioConfig : {

    type : realtime

    firehose : {.....}  指明数据源,例如本地文件 kafka

    plumber : realtime

}

    不同的firehose的格式不太一致,以kafka为例

{

    firehose : {

        consumerProps : {

auto.commit.enable : false

            auto.offset.reset : largest

            fetch.message.max.bytes : 1048586

            group.id : druid-example

            zookeeper.connect : localhost:2181

                       zookeeper.connect.timeout.ms : 15000

                        zookeeper.session.timeout.ms : 15000

                        zookeeper.sync.time.ms : 5000

        },

        feed : wikipedia

        type : kafka-0.8

    }

}

 

2.3 tuningConfig 这部分配置是优化数据输入的过程

tuningConfig : {

    type : realtime

    maxRowsInMemory :  在存盘之前内存中最大的存储行数,指的是聚合后的行数

    windowPeriod :   最大可容忍时间窗口,超过窗口,数据丢弃

    intermediatePersistPeriod  多长时间数据临时存盘一次

    basePersistDirectory  临时存盘目录

    versioningPolicy :  .... 如何为segment设置版本号

    rejectionPolicy : ....   数据丢弃策略    

    maxPendingPersits        最大同时存盘请求数,达到上限,输入将会暂停

    shardSpec                分片设置

    buildV9Directly        是否直接构建V9版本的索引

    persistThreadPriority  存盘线程优先级

    mergeThreadPriority    存盘归并线程优先级

    reportParseExceptions   是否汇报数据解析错误

}

 

3.实时数据摄入_以push的方式

    采用push摄入数据,需要使用Druid索引服务(indexing Service),索引服务会启动一个Http服务,数据通过调用这个HTTP服务推送到Druid系统。

    具体的Ingestion Spec 配置和上面pull方式类似,在此不在详解。

 

4. 离线数据摄入

4.1 静态文件摄入

    使用自带的摄入机制,可以在数据节点摄入本地文件,方法如下:

bin/post-index-task --file quickstart/wikiticker-index.json

    wikiticker-index.json 文件中既包括datasource的定义,也包括数据文件位置的配置

4.2 HDFS文件摄入

    配置过程可参考:http://druid.io/docs/0.12.1/ingestion/batch-ingestion.html

 

5. 配置参考

    通用配置:https://github.com/druid-io/tranquility/blob/master/docs/configuration.md

    数据摄入通用配置:http://druid.io/docs/latest/ingestion/index.html

    Tranquility Kafka:https://github.com/druid-io/tranquility/blob/master/docs/kafka.md

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员学习圈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值