数据摄入
Druid的数据摄入有两种方式,一种是流式数据源,一种是静态数据源
数据源种类
静态数据源:数据已经生产完毕,不会有新数据产生的数据源,静态数据通常表现为离线数据,静态服务可以通过实时节点摄入,也可以通过索引服务启动一个任务摄入。
流式数据源:指的是持续不断地生产数据的数据源。如日志,消息队列等。对于流式数据的摄取,Druid提供了两种方法,分别是Push(推送)和Pull(拉取)。采用pull方式摄取数据需要启动一个实时节点(realtimeNode),通过不同的firehose摄入不同的流式数据。采用Push方式摄取数据,需要使用Druid的索引服务,索引服务会启动一个http服务,通过调用这个Http服务推送数据到Druid系统。
静态数据摄取
数据存放在hdfs上。我们通过Druid获取hdfs数据,配置json文件。通过索引服务将数据摄入到Druid中。
1.准备数据,存为device_datas.dat
数据格式:
YY,2018-10-15T08:13:24.001+08:00,3.855
FI,2018-10-15T08:13:25.001+08:00,2.436
RY,2018-10-15T08:13:23.001+08:00,3.024
HB,2018-10-15T08:13:23.001+08:00,4.294
PN,2018-10-15T08:13:26.001+08:00,1.997
PV,2018-10-14T08:13:23.001+08:00,3.604
数据字段:dev_name,time,cost
存放到hdfs://beh/druid/test/device_datas.dat 中
2.准备json文件。存为 device.json
{
"type": "index_hadoop",
"spec": {
"ioConfig": {
"type": "hadoop",
"inputSpec": {
"type": "static",
"paths": "/druid/test/device_datas.dat"
}
},
"dataSchema": {
"dataSource": "hadoop_test",
"granularitySpec": {
"type": "uniform",
"segmentGranularity": "day",
"queryGranularity": "none",
"intervals": ["2018-10-14/2018-10-15"]
},
"parser": {
"type": "hadoopyString",
"parseSpec": {
"format": "csv",
"columns": ["dev_name", "time", "cost"],
"dimensionsSpec": {
"dimensions": [
"dev_name"
]
},
"timestampSpec": {
"format": "auto",
"column": "time"
}
}
},
"metricsSpec": [{
"name": "count",
"type": "count"
},
{
"name": "sumCost",
"type": "doubleSum",
"fieldName": "cost"
}
]
},
"tuningConfig": {
"type": "hadoop",
"partitionsSpec": {
"type": "hashed",
"targetPartitionSize": 5000000
},
"jobProperties": {
"mapreduce.job.user.classpath.first": true,
"mapreduce.map.java.opts"