druid hadoop批量摄取 之 增量摄取和重建索引

这个我是实践过的,有问题可以找我问。

参考 官网 http://druid.io/docs/0.12.1/ingestion/update-existing-data.html
本节假定读者了解如何使用Hadoop进行批量摄取。请参阅 批量摄取了解更多信息。Hadoop批量摄取可用于重新索引和增量摄取。

druid 使用一个inputSpecioConfig指明哪里可以摄取数据的位置以及如何读取它。对于简单的Hadoop批量摄取,staticgranularity说明类型允许您读取存储在底层存储中的数据。

还有其他类型的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作为multiinputSpec的子项。

领域 类型 描述 需要
孩子 数组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/"
      }
    ]  
  },
  ...
}

强烈建议在dataSourceinputSpec中明确提供片段列表,以便您的增量摄取任务是幂等的。您可以通过以下方式 请求 协调节点 来获取该段的列表。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" ]

你可能感兴趣的:(druid hadoop批量摄取 之 增量摄取和重建索引)