[DW ver.2] Druid 사용 방법

in #druid6 years ago (edited)

Druid


high-performance, column-oriented, distributed data store

http://druid.io/


Quick Start

http://druid.io/docs/0.12.0/tutorials/quickstart.html


1. Prerequisites    

* Java 8 or higher    

* Linux, Mac OS X, or other Unix-like OS (Windows is not supported)    

* 8G of RAM    

* 2 vCPUs


2. Getting started    

1) Druid 다운로드

curl -O http://static.druid.io/artifacts/releases/druid-0.12.0-bin.tar.gz
tar -xzf druid-0.12.0-bin.tar.gz
cd druid-0.12.0 


2) Zookeeper 실행    

Druid의 distributed coordination을 위해 zookeeper의 실행이 필요하다. 

curl http://www.gtlib.gatech.edu/pub/apache/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz -o zookeeper-3.4.10.tar.gz
tar -xzf zookeeper-3.4.10.tar.gz
cd zookeeper-3.4.10
cp conf/zoo_sample.cfg conf/zoo.cfg
./bin/zkServer.sh start


3) Druid 실행

Druid(druid-0.12.0) 디렉토리로 돌아와서, Druid를 init하자. init을 하면 directory setting이 완료된다.

bin/init


Druid는 “Historical, Coordinator, Broker, Indexing Service, Realtime”총 5개 node로 구성되어있다.
(Druid is architected as a grouping of systems each with a distinct role and together they form a working system.)


Druid를 실행하기 위해선, 5개의 nodeㄹ를 모두 실행해야한다. Druid Architecture에 대한 자세한 설명은 다음 사이트 참고
http://druid.io/docs/0.12.0/design/design.html

java `cat conf-quickstart/druid/historical/jvm.config | xargs` -cp "conf-quickstart/druid/_common:conf-quickstart/druid/historical:lib/*" io.druid.cli.Main server historical
java `cat conf-quickstart/druid/broker/jvm.config | xargs` -cp "conf-quickstart/druid/_common:conf-quickstart/druid/broker:lib/*" io.druid.cli.Main server broker
java `cat conf-quickstart/druid/coordinator/jvm.config | xargs` -cp "conf-quickstart/druid/_common:conf-quickstart/druid/coordinator:lib/*" io.druid.cli.Main server coordinator
java `cat conf-quickstart/druid/overlord/jvm.config | xargs` -cp "conf-quickstart/druid/_common:conf-quickstart/druid/overlord:lib/*" io.druid.cli.Main server overlord
java `cat conf-quickstart/druid/middleManager/jvm.config | xargs` -cp "conf-quickstart/druid/_common:conf-quickstart/druid/middleManager:lib/*" io.druid.cli.Main server middleManager

이 명령어들을 systemd service로 만들어놓으면, 실행 및 관리가 편하다. session이 만료될때마다 다시 이 각각의 명령어들을 실행해줘야 하는 불편함이 줄어든다.

service 등록하는 법은 다음 링크 참
https://steemit.com/ubuntu/@uneedcomms/ubuntu-systemd-service

각각을 다음과 같은 이름으로 service로 등록 한 후 실행시킨다.

druid-broker.service
druid-historical.service
druid-overload.service
druid-coordinator.service
druid-middle-manager.service  


4) Druid에 data load 하기

Druid에는 세가지 방법으로 Data를 로드하여 사용할 수 있다.
http://druid.io/docs/0.12.0/tutorials/ingestion.html


  • Files - Load data from HDFS, S3, local files, or any supported Hadoop filesystem in batches. We recommend this method if your dataset is already in flat files.
  • Stream push - Push a data stream into Druid in real-time using Tranquility, a client library for sending streams to Druid. We recommend this method if your dataset originates in a streaming system like Kafka, Storm, Spark Streaming, or your own system.
  • Stream pull - Pull a data stream directly from an external data source into Druid using Realtime Nodes.


  • Load file from local disk

druid/quickstart/에 있는 샘플 데이터 (wikiticker-2015-09-12-sampled.json) 를 Druid에 load해보자.

curl -X 'POST' -H 'Content-Type:application/json' -d @quickstart/wikiticker-index.json localhost:8090/druid/indexer/v1/task

wikiticker-index.json 파일은 load할 데이터에 대한 정보를 갖고 있는 파일이다. 저 파일을 8090 포트로 전송하게 되면, druid는 json파일에 적혀있는대로 wikiticker-2015-09-12-sampled.json 파일을 load 한다.

성공적으로 load 되면 다음과 같은 message가 뜬다.

{"task":"index_hadoop_wikipedia_2013-10-09T21:30:32.802Z"}


<추가자료-다른 서버의 hadoop에 있는 데이터를 Druid에 load하는 방법>

다음 명령어를 이용해 wikiticker-2015-09-12-sampled.json 파일을 hadoop 에 저장한다

hadoop fs -put [로컬시스템의 파일] [hdfs 파일시스템의 디렉토리]


(혹시 hdfs 유저만 접근할 수 있다는 권한 문제가 발생한다면, 앞에 sudo -u hdfs 를 붙인다.)

sudo -u hdfs hadoop fs -put [로컬시스템의 파일] [hdfs 파일시스템의 디렉토리] 


다음 명령어를 통해 hadoop에 파일이 잘 들어갔나 확인할 수 있다. 

hadoop fs -ls [hdfs 파일시스템의 디렉토리]

(hadoop 명령어 관련 참고 사이트: http://blog.iotinfra.net/?p=12)


wikiticker-index.json 파일을 열어 “paths”를 hdfs 경로로 지정한다.


    “type” : “index_hadoop”, 

    “spec” : {  

        “ifconfig” : {

        “inputSpec” : {

            “type” : “static”,

            “paths” : “hdfs://[hadoop 주소]:9000/[파일 저장한 경로]/sikiticker-2015-09-12-sampled.json”

        }

    },

다음 명령어로 wikiticker-index.json 파일을 Druid 서버에 전송한다.

curl -X 'POST' -H 'Content-Type:application/json' -d @quickstart/wikiticker-index.json [druid 주소]:8090/druid/indexer/v1/task


  • Streaming 데이터

Streaming 데이터를 생성하기 위해 Tranquility를 사용한다.
(Tranquility = a high level data producer library for Druid.)

다음 명령어를 통해 Tranquility를 다운받는다.

curl -O http://static.druid.io/tranquility/releases/tranquility-distribution-0.8.0.tgz
tar -xzf tranquility-distribution-0.8.0.tgz
cd tranquility-distribution-0.8.0


Tranquility server 실행

bin/tranquility server -configFile <path_to_druid_distro>/conf-quickstart/tranquility/server.json


다음 명령어를 실행하면 Tranquility가  random sample metrics를 생성하여 보낸다.

bin/generate-example-metrics | curl -XPOST -H'Content-Type: application/json' --data-binary @- http://localhost:8200/v1/post/metrics


완료시 다음과 같은 메시지가 생성된다.

{"result":{"received":25,"sent":25}}


작성자 : RE팀 김연수 ([email protected])

Coin Marketplace

STEEM 0.19
TRX 0.14
JST 0.030
BTC 60115.50
ETH 3192.77
USDT 1.00
SBD 2.45