Docker로 실행하기
Docker로 실행하기
Docker Hub의 Apache Druid 이미지를 Docker와 Docker Compose로 단일 머신에 배포하는 퀵스타트예요. 초기 설정을 마치면 클러스터가 데이터를 로드할 준비가 돼요.
출처: 문서
본문
이 퀵스타트는 Docker Hub에서 Apache Druid 이미지를 다운로드하고 Docker 와 Docker Compose 를 사용해 단일 머신에 배포하는 단계를 안내해요. 초기 설정을 마치면 클러스터가 데이터를 로드할 준비가 돼요.
퀵스타트를 시작하기 전에 일반적인 Druid overview 와 ingestion overview 를 읽어두면 도움이 돼요. 튜토리얼이 그 페이지들에서 다루는 개념을 참조하기 때문이에요. Docker 에 익숙해지는 것도 도움이 돼요.
이 튜토리얼은 필요한 파일을 GitHub에서 다운로드한다고 가정해요. 파일은 Druid 설치본과 Druid 소스에도 있습니다.
사전 요구 사항
- Docker
Docker 메모리 요구 사항
기본 docker-compose.yml 은 8개의 컨테이너를 실행해요: Zookeeper, PostgreSQL, 그리고 micro quickstart configuration 을 기반으로 한 6개의 Druid 컨테이너. 각 Druid 서비스는 최대 7 GiB 메모리(6 GiB 직접 메모리, 1 GiB 힙)를 사용하도록 구성돼요. 그러나 퀵스타트는 사용 가능한 메모리를 모두 사용하지는 않아요.
이 설정에서 Docker는 Druid 클러스터에 최소 6 GiB의 메모리를 사용할 수 있어야 해요. Mac OS의 Docker Desktop에서는 Docker Desktop 환경설정 에서 메모리 설정을 조정하세요. 137 오류 코드로 크래시가 발생한다면 Docker에 할당된 메모리가 충분하지 않은 경우가 많아요.
Docker 환경의 DRUID_SINGLE_NODE_CONF 값을 수정해 다른 single-server 모드를 사용할 수 있어요. 예를 들어 nano quickstart를 사용하려면: DRUID_SINGLE_NODE_CONF=nano-quickstart .
시작하기
Druid Docker 파일을 담을 디렉토리를 만들어요.
Druid 소스 코드에는 Docker Hub에서 이미지를 가져오는 예시 docker-compose.yml 이 포함돼 있으며, 예시 환경으로 사용하고 Docker 기반 Druid 구성·배포를 실험하기에 적합해요. 위에서 만든 디렉토리에 이 파일을 다운로드하세요.
Compose 파일
예시 docker-compose.yml 은 각 Druid 서비스에 대한 컨테이너와 함께, 메타데이터 저장소로 ZooKeeper 및 PostgreSQL 컨테이너를 만들 거예요.
또한 deep storage로 druid_shared 라는 이름의 볼륨을 만들어 Druid 서비스 간에 segment와 task 로그를 보관·공유해요. 이 볼륨은 컨테이너에서 opt/shared 로 마운트돼요.
환경 파일
Druid docker-compose.yml 예시는 Configuration 에서 설명하는 환경 변수를 포함한 완전한 Druid 구성을 지정하기 위해 환경 파일을 사용해요. 이 파일은 기본적으로 environment 라는 이름이며, docker-compose.yml 파일과 같은 디렉토리에 있어야 해요. 예시 환경 파일을 위에서 만든 디렉토리에 다운로드하세요. 이 파일의 옵션은 Druid를 시도하고 튜토리얼을 사용하기에 잘 작동해요.
단일 파일 방식은 프로덕션 시스템에는 부적합해요. 대신 DRUID_COMMON_CONFIG 와 DRUID_CONFIG_${service} 를 사용하거나, 특별히 맞춤화된 서비스별 환경 파일을 사용하는 것을 제안해요.
구성
Druid Docker 컨테이너의 구성은 컨테이너 내에 설정된 환경 변수를 통해 이루어져요. Docker Compose는 환경 파일의 값을 컨테이너로 전달해요. 변수는 컨테이너 내에서 사용 가능해야 하는 표준 Druid 구성 파일의 경로를 추가로 지정할 수 있어요.
기본값은 Quickstart에 적합해요. 프로덕션 시스템은 기본값을 수정해야 할 거예요.
기본 구성:
- DRUID_MAXDIRECTMEMORYSIZE -- Java 최대 직접 메모리 크기를 설정. 기본값 6 GiB.
- DRUID_XMX -- Java Xmx , 최대 힙 크기를 설정. 기본값 1 GB.
프로덕션 구성:
- DRUID_CONFIG_COMMON -- Druid 공통 속성 파일의 전체 경로
- DRUID_CONFIG_${service} -- Druid 서비스 속성 파일의 전체 경로
- JAVA_OPTS -- Java 옵션 설정
로깅 구성:
- DRUID_LOG4J -- 전체 log4j.xml 구성 파일을 그대로 설정. ( Example )
- DRUID_LOG_LEVEL -- 기본 Log4j 로그 레벨 재정의
- DRUID_SERVICE_LOG4J -- 서비스별로 전체 log4j.xml 구성 파일을 그대로 설정.
- DRUID_SERVICE_LOG_LEVEL -- 서비스별 log4j에서 기본 Log4j 로그 레벨 재정의
고급 메모리 구성:
- DRUID_XMS -- Java Xms , 초기 힙 크기를 설정. 기본값 1 GB.
- DRUID_MAXNEWSIZE -- Java max new size 설정
- DRUID_NEWSIZE -- Java new size 설정
특수 환경 변수 외에도, 컨테이너에서 Druid를 실행하는 스크립트는 druid_ 접두사로 시작하는 환경 변수를 명령줄 구성으로 사용해요. 예를 들어 환경 변수
druid_metadata_storage_type=postgresql
는 컨테이너의 Druid 프로세스에 대한 Java 실행 명령에서 다음 옵션으로 변환돼요:
-Ddruid.metadata.storage.type=postgresql
Druid는 콘솔에 포트 8888 을 사용한다는 점에 주의하세요. 이 포트는 Jupyter 및 다른 도구에서도 사용돼요. 충돌을 피하려면 docker-compose.yml 파일의 ports 섹션에서 포트를 변경할 수 있어요. 예를 들어 호스트의 포트 9999 에 콘솔을 노출하려면:
container_name: router ... ports: - "9999:8888"
클러스터 시작
구성 파일이 포함된 디렉토리로 cd 해 들어가세요. 이 디렉토리는 위에서 만든 디렉토리이거나, Druid를 로컬에 설치했다면 설치 디렉토리의 distribution/docker/ 예요.
셸이 연결된 상태로 클러스터를 시작하려면 docker compose up 을, 백그라운드에서 클러스터를 실행하려면 docker compose up -d 를 실행하세요.
클러스터가 시작되면 http://localhost:8888 의 웹 콘솔로 이동할 수 있어요. Druid router 프로세스가 UI를 서빙해요.
모든 Druid 프로세스가 완전히 시작되는 데 몇 초가 걸려요. 서비스를 시작한 직후 콘솔을 열면 안전하게 무시할 수 있는 일부 오류가 보일 수 있어요.
클러스터 사용
여기서부터 Quickstart 를 따라 진행할 수 있어요. 프로덕션 사용의 경우 docker-compose.yml 파일을 정제해 필요한 추가 외부 서비스 의존성을 추가하세요.
Docker를 사용해 셸을 시작하면 Druid 컨테이너를 탐색할 수 있어요:
docker exec -ti <id> sh
여기서
클러스터를 종료하려면 docker compose down 을 실행하세요. 데이터는 Docker 볼륨 집합으로 유지되며, Druid 클러스터를 다시 시작하면 사용할 수 있어요.
더 알아보기 (Learn more)
- Quickstart — 기본 퀵스타트
- Druid overview — 개념 이해
- Configuration — 환경 변수 참고