Druid
high-performance, column-oriented, distributed data store
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])