파일 로드하기

파일 로드하기 (Load a file)

Apache Druid의 네이티브 배치 수집(native batch ingestion) 기능을 이용해 파일에서 Druid로 데이터를 로드하는 방법을 보여 드릴게요. 데이터 로딩은 Druid Overlord에 수집 태스크 스펙(ingestion task spec)을 제출해서 시작해요. 스펙은 직접 작성하거나 웹 콘솔에 내장된 데이터 로더를 사용해 만들 수 있어요.

출처: 문서

본문

운영(production) 환경이라면 데이터 수집을 자동화하고 싶어질 거예요. 이 튜토리얼은 먼저 웹 콘솔에서 수집 스펙을 직접 제출하는 방법을 보여 주고, 이어서 명령줄과 스크립트에서 자동화하기 쉬운 배치 데이터 수집 방법을 소개해요.

스펙으로 데이터 로드하기 (via 콘솔)

Druid 패키지에는 샘플 네이티브 배치 수집 태스크 스펙이 quickstart/tutorial/wikipedia-index.json 에 들어 있어요. 편의를 위해 아래에 보여 드릴게요. 이 스펙은 quickstart/tutorial/wikiticker-2015-09-12-sampled.json.gz 입력 파일을 읽도록 설정되어 있어요:

{
  "type" : "index_parallel",
  "spec" : {
    "dataSchema" : {
      "dataSource" : "wikipedia",
      "dimensionsSpec" : {
        "dimensions" : [
          "channel",
          "cityName",
          "comment",
          "countryIsoCode",
          "countryName",
          "isAnonymous",
          "isMinor",
          "isNew",
          "isRobot",
          "isUnpatrolled",
          "metroCode",
          "namespace",
          "page",
          "regionIsoCode",
          "regionName",
          "user",
          { "name": "added", "type": "long" },
          { "name": "deleted", "type": "long" },
          { "name": "delta", "type": "long" }
        ]
      },
      "timestampSpec": {
        "column": "time",
        "format": "iso"
      },
      "metricsSpec" : [],
      "granularitySpec" : {
        "type" : "uniform",
        "segmentGranularity" : "day",
        "queryGranularity" : "none",
        "intervals" : ["2015-09-12/2015-09-13"],
        "rollup" : false
      }
    },
    "ioConfig" : {
      "type" : "index_parallel",
      "inputSource" : {
        "type" : "local",
        "baseDir" : "quickstart/tutorial/",
        "filter" : "wikiticker-2015-09-12-sampled.json.gz"
      },
      "inputFormat" :  {
        "type": "json"
      },
      "appendToExisting" : false
    },
    "tuningConfig" : {
      "type" : "index_parallel",
      "partitionsSpec": {
        "type": "dynamic"
      },
      "maxRowsInMemory" : 25000
    }
  }
}

이 스펙은 "wikipedia" 라는 이름의 데이터소스를 만들어요.

Ingestion 뷰에서 Tasks 옆의 말줄임표(ellipses)를 클릭하고 Submit JSON task 를 선택해 주세요.

위에서 복사한 스펙을 붙여 넣을 수 있는 스펙 제출 대화상자가 열려요.

스펙을 제출한 뒤에는 데이터가 로드될 때까지 잠시 기다리면, 이후에 쿼리할 수 있어요.

스펙으로 데이터 로드하기 (via 명령줄)

편의를 위해 Druid 패키지에는 배치 수집 헬퍼 스크립트 bin/post-index-task 가 들어 있어요.

이 스크립트는 Druid Overlord에 수집 태스크를 POST하고, 데이터를 쿼리할 수 있을 때까지 Druid를 폴링해요.

Druid 패키지 루트에서 다음 명령을 실행해 주세요:

bin/post-index-task --file quickstart/tutorial/wikipedia-index.json --url http://localhost:8081

다음과 같은 출력이 보일 거예요:

Beginning indexing data for wikipedia
Task started: index_wikipedia_2018-07-27T06:37:44.323Z
Task log:     http://localhost:8081/druid/indexer/v1/task/index_wikipedia_2018-07-27T06:37:44.323Z/log
Task status:  http://localhost:8081/druid/indexer/v1/task/index_wikipedia_2018-07-27T06:37:44.323Z/status
Task index_wikipedia_2018-07-27T06:37:44.323Z still running...
Task index_wikipedia_2018-07-27T06:37:44.323Z still running...
Task finished with status: SUCCESS
Completed indexing data for wikipedia. Now loading indexed data onto the cluster...
wikipedia loading complete! You may now query your data

스펙을 제출했다면, 위에서 본 것과 같은 순서로 데이터가 로드될 때까지 기다린 뒤 쿼리하면 돼요.

스크립트 없이 로드하기 (Loading data without the script)

스크립트를 사용하지 않고 수집 태스크를 제출하는 방법을 간단히 살펴볼게요. 아래 명령들은 직접 실행할 필요는 없어요.

태스크를 제출하려면 apache-druid-37.0.0 디렉터리에서 새 터미널 창을 열고 Druid에 POST해 주세요:

curl -X 'POST' -H 'Content-Type:application/json' -d @quickstart/tutorial/wikipedia-index.json http://localhost:8081/druid/indexer/v1/task

제출에 성공하면 태스크의 ID가 출력돼요:

{"task":"index_wikipedia_2018-06-09T21:30:32.802Z"}

위에서 설명한 대로 콘솔에서 이 태스크의 상태를 모니터링할 수 있어요.

데이터 쿼리하기 (Querying your data)

데이터가 로드되면, 쿼리 튜토리얼을 따라 새로 로드한 데이터에 몇 가지 예제 쿼리를 실행해 보세요.

정리하기 (Cleanup)

다른 수집 튜토리얼을 계속 진행하려면 클러스터를 종료하고, druid 패키지 아래 var 디렉터리의 내용을 제거해 클러스터 상태를 리셋해야 해요. 다른 튜토리얼들도 같은 "wikipedia" 데이터소스에 쓰기 때문이에요.

더 읽어보기 (Further reading)

배치 데이터 로딩에 대한 더 자세한 내용은 네이티브 배치 수집 문서 (native batch ingestion documentation)를 참고해 주세요.

더 알아보기 (Learn more)