Apache Druid

Druid翻译四:加载批量数据教程

2017-01-20  本文已影响1509人  Sisyphus秋居拾遗

入门

本教程介绍如何将您的数据文件加载到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”的文件,则对于此数据集:

你可以将现有的索引文件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

上一篇下一篇

猜你喜欢

热点阅读