EMR과 함께 Druid를 셋팅해보자!

Versions

  • Druid 0.12.0
  • Java 1.8.0_161

과정

  1. Java 설치
sudo yum install -y java-1.8.0-openjdk-devel.x86_64
  1. druid User 추가 & druid 다운로드 & unzip
  2. mv druid-0.12.0 /opt/druid/druid-0.12.0
  3. 설정 파일들 수정(jvm.config, runtime.properties)
  4. metadata storage 설정(MySQL) mysql-metadata-storage extension은 기본적으로 포함되어 있지 않으니 다운받아야함.
# /opt/druid/druid-0.12.0/conf/druid/_common/common.properties
druid.extensions.loadList=["druid-kafka-eight","mysql-metadata-storage", "druid-s3-extensions"]
druid.metadata.storage.type=mysql
druid.metadata.storage.connector.connectURI=jdbc:mysql://{host}:{port}/{database}
druid.metadata.storage.connector.user=user
druid.metadata.storage.connector.password=password
  1. 실행
$ ./bin/historical.sh start
$ ./bin/overlord.sh start
$ ./bin/middleManager.sh start
$ ./bin/broker.sh start
$ ./bin/coordinator.sh start

다운 타임없이 재실행을 하고 싶은 경우 다음과 같이 추천함

  1. Historical
  2. Overlord (if any)
  3. Middle Manager (if any)
  4. Standalone Real-time (if any)
  5. Broker
  6. Coordinator (or merged Coordinator+Overlord)

EMR과 같이 사용하고 싶다면

다른 하둡 버젼을 사용하는 것이기 때문에 그 하둡 설정관련 파일들이 필요합니다. Working with different versions of Hadoop 참고

  1. EMR 하둡 config파일 가져오기 EMR의 /etc/hadoop/conf 안에 있는 core-site.xml, hdfs-site.xml, mapred-site.xml, yarn-site.xml 파일을 가져와서 드루이드의 conf/druid/_common/ 안에 넣어줍니다.
  2. S3 extension 추가 및 Deep Storage 설정 cont/druid/_common/common.runtime.properties
druid.extensions.loadList = ["druid-s3-extensions"]

druid.storage.type=s3
druid.storage.bucket=druid-bucket
druid.storage.baseKey=druid/segments
druid.s3.accessKey=XXXXXXXXXXXXXXX
druid.s3.secretKey=XXXXXXXXXXXXXXX

druid.indexer.logs.type=s3
druid.indexer.logs.s3Bucket=druid-bucket
druid.indexer.logs.s3Prefix=druid/indexing-logs
  1. 라이브러리 추가
$ cp -r /usr/lib/hadoop/client/* /opt/druid/druid-0.12.0/hadoop-dependencies/hadoop-client/emr-client/*
$ cp -r /usr/share/aws/emr/emrfs/* /opt/druid/emrfs
$ cp -r /usr/share/aws/aws-sdk-java/* /opt/druid/aws-sdk-java
  1. bin/node.sh 수정 middleManager를 실행할 때 library를 추가함
JAVA_HOME=/usr/lib/jvm/java
if [ "$nodeType" == "middleManager" ]; then
LIB_DIR=$LIB_DIR/*:/opt/druid/emrfs/conf:/opt/druid/emrfs/lib/*:/opt/druid/emrfs/auxlib/*:/opt/druid/aws-java-sdk
fi
  1. middleManager 재시작
  2. index 파일에 s3 accessKey, secretKey 추가 && hadoopDependencyCoordinates emr로 설정
{
    ...
    "spec": {
        "tuningConfig": {
            "jobProperties": {
                "fs.s3.awsAccessKeyId" : "XXXXXXXXXXXXXXX",
                "fs.s3.awsSecretAccessKey" : "XXXXXXXXXXXXXXX"
            }
        }
    },
    "hadoopDependencyCoordinates": ["org.apache.hadoop:hadoop-client:emr-client"]
}
  1. /mnt 디렉토리에 s3, var 디렉토리 생성
$ ll /mnt
drwxr-xr-x 2 druid druid 6 Apr 26 07:09 s3
drwxr-xr-x 2 druid druid 6 Apr 26 07:01 var

Issue

  • Permission on HDFS HDFS에 /user/druid` 디렉토리를 만들고 chown으로 권한을 주면 해결
Caused by: org.apache.hadoop.ipc.RemoteException: Permission denied: user=druid, access=WRITE, inode="/user":hdfs:hadoop:drwxr-xr-x

Refer

  • http://druid.io/docs/latest/operations/other-hadoop.html
  • http://aipkds.tistory.com/136