这个我是实践过的,有问题可以找我问。
参考 官网 http://druid.io/docs/0.12.1/ingestion/update-existing-data.html
本节假定读者了解如何使用Hadoop进行批量摄取。请参阅 批量摄取了解更多信息。Hadoop批量摄取可用于重新索引和增量摄取。
druid 使用一个inputSpec
在ioConfig
指明哪里可以摄取数据的位置以及如何读取它。对于简单的Hadoop批量摄取,static
或granularity
说明类型允许您读取存储在底层存储中的数据。
还有其他类型的inputSpec
可以重新索引和增量摄取。
dataSource
这是一种inputSpec
读取已存储在Druid中的数据的类型。
领域 | 类型 | 描述 | 需要 |
---|---|---|---|
类型 | string | '数据源'。 | 是 |
ingestionSpec | JSON Object | druid segment 加载说明。见下文。 | 是 |
maxSplitSize | number | 根据segment的大小启用将多个segment组合成单个Hadoop InputSplit。使用-1,druid根据用户指定的地图任务数量(mapred.map.tasks或mapreduce.job.maps)计算最大拆分大小。默认情况下,为一个segment进行一次分割。 | 没有 |
以下是内容ingestionSpec
:
领域 | 类型 | 描述 | 需要 |
---|---|---|---|
datasource | string | dataSource 你正要加载数据的数据源名称 | 是 |
intervals | list | 代表ISO-8601间隔的字符串列表。 | 是 |
segments | list | 从中读取数据的段列表,默认情况下会自动获取。您可以通过在url / druid / coordinator / v1 / metadata / datasources / segments?完整发送一个POST查询给 协调器来获取放在这里的段列表,其中包含请求paylod中指定的时间间隔列表,例如[“2012-01-01T00: 00:00.000 / 2012-01-03T00:00:00.000“,”2012-01-05T00:00:00.000 / 2012-01-07T00:00:00.000“]。您可能需要手动提供此列表,以确保段读取与任务提交时完全相同,如果任务实际运行时用户提供的列表与任务数据库的状态不匹配,则任务将失败。 | 否 |
filter | JSON | 参考 (http://druid.io/docs/0.12.1/querying/filters.html) | 否 |
dimensions | string 数组 | 要加载的维的名称。默认情况下,列表将从parseSpec构造。如果parseSpec没有明确的维度列表,则会读取存储数据中存在的所有维度列。 | 否 |
metrics | string 数组 | 要加载的metric标准列的名称。默认情况下,列表将从所有配置的聚合器的“名称”构建。 | 否 |
ignoreWhenNoSegments | boolean | 如果没有找到片段,是否忽略此摄入说明。默认行为是在没有找到段时抛出错误。 | 否 |
例如
"ioConfig" : {
"type" : "hadoop",
"inputSpec" : {
"type" : "dataSource",
"ingestionSpec" : {
"dataSource": "wikipedia",
"intervals": ["2014-10-20T00:00:00Z/P2W"]
}
},
...
}
multi
这是一个组合inputSpec来结合其他inputSpecs。此inputSpec用于增量摄取。请注意,您可以只有一个dataSource
作为multi
inputSpec的子项。
领域 | 类型 | 描述 | 需要 |
---|---|---|---|
孩子 | 数组JSON对象 | 包含其他inputSpecs的JSON对象列表。 | 是 |
例如:
"ioConfig" : {
"type" : "hadoop",
"inputSpec" : {
"type" : "multi",
"children": [
{
"type" : "dataSource",/
"ingestionSpec" : {
"dataSource": "wikipedia",
"intervals": ["2012-01-01T00:00:00.000/2012-01-03T00:00:00.000", "2012-01-05T00:00:00.000/2012-01-07T00:00:00.000"],//这个是已经存在datasource 的范围
"segments": [//务必通过segments接口获取,底层会根据intervals查询db,然后跟这儿做校验
{
"dataSource": "test1",//这个名称可以和当前摄取的datasource名称一致,也可以不一致
"interval": "2012-01-01T00:00:00.000/2012-01-03T00:00:00.000",
"version": "v2",
"loadSpec": {
"type": "local",
"path": "/tmp/index1.zip"
},
"dimensions": "host",
"metrics": "visited_sum,unique_hosts",
"shardSpec": {
"type": "none"
},
"binaryVersion": 9,
"size": 2,
"identifier": "test1_2000-01-01T00:00:00.000Z_3000-01-01T00:00:00.000Z_v2"
}
]
}
},
{
"type" : "static",
"paths": "/path/to/more/wikipedia/data/"
}
]
},
...
}
强烈建议在dataSource
inputSpec中明确提供片段列表,以便您的增量摄取任务是幂等的。您可以通过以下方式 请求 协调节点 来获取该段的列表。POST /druid/coordinator/v1/metadata/datasources/{dataSourceName}/segments?full
请求主体:例如[“2012-01-01T00:00:00.000 / 2012-01-03T00:00:00.000”,“2012-01-05T00:00:00.000 / 2012”[interval1,interval2,...] -01-07T00:00:00.000" ]
网友评论