入门
本教程介绍如何将您的数据文件加载到Druid。
在本教程中,我们假设您已经按照快速入门中所述下载了Druid,并将其在本机上运行。并且您不需要事先加载任何数据。
上述步骤完成后,你就可以通过编写自定义的提取规范来加载自己的数据集了。
编写提取规范
您可以使用Druid批量加载进程将文件数据加载到Druid。在quickstart/wikiticker-index.json有一个批量提取规范的示例,根据需求可以自行修改。
最重要的问题是:
{
"type" : "index_hadoop",
"spec" : {
"ioConfig" : {
"type" : "hadoop",
"inputSpec" : {
"type" : "static",
//2.数据集路径,多个文件使用逗号分隔
"paths" : "quickstart/wikiticker-2015-09-12-sampled.json"
}
},
"dataSchema" : {
//1.应该调用什么数据集
"dataSource" : "wikiticker",
"granularitySpec" : {
"type" : "uniform",
"segmentGranularity" : "day",
"queryGranularity" : "none",
//6.加载的时间的范围或者间隔
"intervals" : ["2015-09-12/2015-09-13"]
},
"parser" : {
"type" : "hadoopyString",
"parseSpec" : {
"format" : "json",
"dimensionsSpec" : {
//4.有哪些字段作为维度
"dimensions" : [
"channel",
"cityName",
"comment",
"countryIsoCode",
"countryName",
"isAnonymous",
"isMinor",
"isNew",
"isRobot",
"isUnpatrolled",
"metroCode",
"namespace",
"page",
"regionIsoCode",
"regionName",
"user"
]
},
"timestampSpec" : {
"format" : "auto",
//3.哪个字段应该视为时间戳
"column" : "time"
}
}
},
//5.哪些字段作为指标
"metricsSpec" : [
{
"name" : "count",
"type" : "count"
},
{
"name" : "added",
"type" : "longSum",
"fieldName" : "added"
},
{
"name" : "deleted",
"type" : "longSum",
"fieldName" : "deleted"
},
{
"name" : "delta",
"type" : "longSum",
"fieldName" : "delta"
},
{
"name" : "user_unique",
"type" : "hyperUnique",
"fieldName" : "user"
}
]
},
"tuningConfig" : {
"type" : "hadoop",
"partitionsSpec" : {
"type" : "hashed",
"targetPartitionSize" : 5000000
},
"jobProperties" : {}
}
}
}
如果您的数据里面没有记录时间,您可以用当前时间标记每一行数据,或者也可以用一个固定时间戳去标记所有行,例如"2000-01-01T00:00:00.000Z"。
让我们以网页浏览数据集为例, Druid支持TSV,CSV和JSON,开箱即用。 请注意,Druid不支持嵌套的JSON对象,因此如果您使用JSON,则应提供包含平面对象的文件。
{"time": "2015-09-01T00:00:00Z", "url": "/foo/bar", "user": "alice", "latencyMs": 32}
{"time": "2015-09-01T01:00:00Z", "url": "/", "user": "bob", "latencyMs": 11}
{"time": "2015-09-01T01:30:00Z", "url": "/foo/bar", "user": "bob", "latencyMs": 45}
确保文件末尾没有换行符。 如果将此文件保存到名为“pageviews.json”的文件,则对于此数据集:
- 数据集叫做 "pageviews"
- 数据位于"pageviews.json"中
- 时间戳是 "time"字段
- "url" 和 "user"字段适合作为数据维度
- 网页的访问量(count统计)和总耗时(sum(latencyMs))是很好的指标,当我们加载数据的时候收集这些统计值,可以让我们能够很容易在查询时计算平均值。
- 数据涵盖的时间范围是 2015-09-01 (包含) 到2015-09-02 (不包含)。
你可以将现有的索引文件quickstart/wikiticker-index.json,copy到新文件。
cp quickstart/wikiticker-index.json my-index-task.json
然后通过更改这些部分修改它:
"dataSource": "pageviews"
"inputSpec": {
"type": "static",
"paths": "pageviews.json"
}
"timestampSpec": {
"format": "auto",
"column": "time"
}
"dimensionsSpec": {
"dimensions": ["url", "user"]
}
"metricsSpec": [
{"name": "views", "type": "count"},
{"name": "latencyMs", "type": "doubleSum", "fieldName": "latencyMs"}
]
"granularitySpec": {
"type": "uniform",
"segmentGranularity": "day",
"queryGranularity": "none",
"intervals": ["2015-09-01/2015-09-02"]
}
运行任务
要运行此任务,请确保索引任务能够读取pageviews.json:
如果你是本机运行(没有配置到hadoop的连接,这也是Druid默认值),那么将pageviews.json放到Druid的根目录下。
如果Druid配置了hadoop集群连接,那么将pageviews.json上传到HDFS。并且调整上面提取规范的配置路径。
向Druid Overlord上提交你的索引任务,就可以开始进行索引了,在标准Druid安装中,URL为http://OVERLORD_IP:8090/druid/indexer/v1/task 。
curl -X 'POST' -H 'Content-Type:application/json' -d @my-index-task.json OVERLORD_IP:8090/druid/indexer/v1/task
如果你的所有东西都是在本机运行,你可以使用localhost
curl -X 'POST' -H 'Content-Type:application/json' -d @my-index-task.json localhost:8090/druid/indexer/v1/task
如果此任务发生任何错误(例如状态为FAILED),可以通过overlord控制台上的"Task log"进行故障排查(http://www.localhost/console.html)。
数据查询
您的数据应该在一到两分钟就能完全可用,在Coordinator控制台http://localhost:8081/#/ 可以监控进度。
一旦数据完全可用,就可以通过任意支持的查询方法查询数据了。
深入阅读
想更深入了解批量加载数据,请阅读批量数据提取章节
原文链接:http://druid.io/docs/0.9.2/tutorials/tutorial-batch.html