druid数据摄入_以pull的方式

对于流式数据的摄入,Druid提供了两种方式,分别是push和pull,
采用pull方式摄取数据,需要启动一个实时节点,通过不同的firehose摄入不同的流式数据,firehose可以被认为Druid接入不同数据源的适配器。
例如从kafka摄入数据,就用kafkaFirehose,从RabbitMQ摄入数据,就用RabbitMQFirehose
采用push摄入数据,需要使用Druid索引服务(indexing Service),索引服务会启动一个Http服务,数据通过调用这个HTTP服务推送到Druid系统
静态数据源
静态数据可以通过实时节点摄入,也可以通过索引服务启动一个任务来进行摄入。

以pull方式摄入数据,需要启动一个实时节点,需要一个配置文件去指定数据输入的相关参数,这个配置文件是Ingestion Spec,是一个json格式文件,有三部分组成
{
   "dataSchema"   说明数据源的格式,数据解析 维度等信息
   "ioConfig"     说明数据如何在Druid存储
    "tuningConfig"  说明数据优化的配置
} dataSchema是数据源的描述
具体格式如下
{
"datasource": "  " String类型,数据源的名字
"parser" :{...}  JSON对象,包含如何解析数据的内容
"metricsSpec":[...] list 包含所有指标列的信息
"granularitySpec":{...}  json对象,指明数据的存储和查询力度
}
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如下:
timestampSpec : {
"column":"...."  string 时间戳列名
"format":"..." iso | millis|posix|auto  时间戳格式,默认是auto
}
dimensionsSpec
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 ,可选
}

metricsSpec

metricsSpec是一个json数组,指明所有的指标列和所用的聚合函数,数据格式
metricsSpec : [
    {
    type : "....." count | longSum等聚合函数类型
    fieldName : ......  string 聚合函数运用的列名,可选
    name  : ..... string 聚合后指标列名
    }

]

一些简单的聚合函数:
count : 统计满足查询过滤条件的数据行数,这个行数跟原始输入的行数不一样,因为druid会对原始数据进行聚合,这是聚合后的行数
longSum 做求和
longMin 求最小
longMax 求最大
doubleSum
doubleMin
doubleMax
GranularitySpec 指定segment的存储粒度和查询粒度

granularitySpec : {
    type : uniform
    segmentGranularity : ....    string segment的存储粒度,HOUR DAY
    queryGranularity : ....      string 最小查询粒度 MINUTE HOUR
    intervals : ....              输入数据的时间段,可选,对于流式数据pull方式而言可以忽略

}

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
    }
}
tuningConfig 这部分配置是优化数据输入的过程
tuningConfig : {
    type : realtime
    maxRowsInMemory :  在存盘之前内存中最大的存储行数,指的是聚合后的行数
    windowPeriod :   最大可容忍时间窗口,超过窗口,数据丢弃
    intermediatePersistPeriod  多长时间数据临时存盘一次
    basePersistDirectory  临时存盘目录
    versioningPolicy :  .... 如何为segment设置版本号
    rejectionPolicy : ....   数据丢弃策略    
    maxPendingPersits        最大同时存盘请求数,达到上限,输入将会暂停
    shardSpec                分片设置
    buildV9Directly        是否直接构建V9版本的索引
    persistThreadPriority  存盘线程优先级
    mergeThreadPriority    存盘归并线程优先级
    reportParseExceptions   是否汇报数据解析错误
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值