美文网首页Apache Druid
Druid翻译四:加载批量数据教程

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

作者: Sisyphus秋居拾遗 | 来源:发表于2017-01-20 15:25 被阅读1509次

    入门

    本教程介绍如何将您的数据文件加载到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

    相关文章

      网友评论

        本文标题:Druid翻译四:加载批量数据教程

        本文链接:https://www.haomeiwen.com/subject/rguwbttx.html