로컬 퀵스타트
로컬 퀵스타트
Apache Druid 설치부터 데이터 수집, SQL 쿼리까지 한 번에 경험하는 빠른 시작 가이드예요. 최소 6 GiB RAM의 머신이 필요해요.
출처: 문서
본문
이 퀵스타트는 Apache Druid를 설치하고 Druid의 수집(ingestion)과 쿼리 기능을 소개해요. 이 튜토리얼에는 최소 6 GiB RAM의 머신이 필요해요.
이 퀵스타트에서 할 일은 다음과 같아요:
- Druid 설치
- Druid 서비스 시작
- SQL로 데이터 수집 및 쿼리
Druid는 다양한 수집 옵션을 지원해요. 이 튜토리얼을 마친 후에는 Ingestion 페이지를 참고해 어떤 수집 방법이 적합한지 결정하세요.
사전 요구 사항
워크스테이션이나 6 GiB RAM의 가상 서버처럼 비교적 일반적인 머신에서 다음 단계를 진행할 수 있어요.
설치 머신의 소프트웨어 요구 사항은 다음과 같아요:
- Linux, Mac OS X 또는 기타 Unix 계열 OS (Windows는 지원되지 않아요)
- Java 17
- Python 3
- Perl 5
Java는 반드시 사용 가능해야 해요. PATH에 있거나 JAVA_HOME 또는 DRUID_JAVA_HOME 환경 변수 중 하나를 설정해야 해요. apache-druid-37.0.0/bin/verify-java 를 실행해 환경의 Java 요구 사항을 확인할 수 있어요.
프로덕션 Druid 인스턴스를 설치하기 전에 security overview 를 꼭 검토하세요. 일반적으로 root 사용자로 Druid를 실행하는 것은 피해요. Druid 실행을 위한 전용 사용자 계정을 만드는 것을 고려해 보세요.
Druid 설치
Apache Druid에서 37.0.0 릴리스를 다운로드하세요.
터미널에서 파일을 압축 해제하고 배포 디렉토리로 변경하세요:
tar -xzf apache-druid-37.0.0-bin.tar.gzcd apache-druid-37.0.0
배포 디렉토리에는 LICENSE와 NOTICE 파일, 그리고 실행 파일, 구성 파일, 샘플 데이터 등을 위한 하위 디렉토리가 포함돼 있어요.
Druid 서비스 시작
자동 단일 머신 구성(auto single-machine configuration)으로 Druid 서비스를 시작해요. 이 구성에는 이 튜토리얼에 적합한 기본 설정이 포함돼 있어요. 예를 들어 MSQ task engine을 사용할 수 있도록 기본적으로 druid-multi-stage-query extension을 로드해요.
기본 설정은 conf/druid/auto 에 있는 구성 파일에서 확인할 수 있어요.
apache-druid-37.0.0 패키지 루트에서 다음 명령을 실행하세요:
./bin/start-druid
이 명령은 ZooKeeper와 Druid 서비스 인스턴스를 시작해요. 예를 들어:
$ ./bin/start-druid[Tue Nov 29 16:31:06 2022] Starting Apache Druid.[Tue Nov 29 16:31:06 2022] Open http://localhost:8888/ in your browser to access the web console.[Tue Nov 29 16:31:06 2022] Or, if you have enabled TLS, use https on port 9088.[Tue Nov 29 16:31:06 2022] Starting services with log directory [/apache-druid-37.0.0/log].[Tue Nov 29 16:31:06 2022] Running command[zk]: bin/run-zk conf[Tue Nov 29 16:31:06 2022] Running command[broker]: bin/run-druid broker /apache-druid-37.0.0/conf/druid/single-server/quickstart '-Xms1187m -Xmx1187m -XX:MaxDirectMemorySize=791m'[Tue Nov 29 16:31:06 2022] Running command[router]: bin/run-druid router /apache-druid-37.0.0/conf/druid/single-server/quickstart '-Xms128m -Xmx128m'[Tue Nov 29 16:31:06 2022] Running command[coordinator-overlord]: bin/run-druid coordinator-overlord /apache-druid-37.0.0/conf/druid/single-server/quickstart '-Xms1290m -Xmx1290m'[Tue Nov 29 16:31:06 2022] Running command[historical]: bin/run-druid historical /apache-druid-37.0.0/conf/druid/single-server/quickstart '-Xms1376m -Xmx1376m -XX:MaxDirectMemorySize=2064m'[Tue Nov 29 16:31:06 2022] Running command[middleManager]: bin/run-druid middleManager /apache-druid-37.0.0/conf/druid/single-server/quickstart '-Xms64m -Xmx64m' '-Ddruid.worker.capacity=2 -Ddruid.indexer.runner.javaOptsArray=["-server","-Duser.timezone=UTC","-Dfile.encoding=UTF-8","-XX:+ExitOnOutOfMemoryError","-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager","-Xms256m","-Xmx256m","-XX:MaxDirectMemorySize=256m"]'
Druid는 사용 가능한 총 시스템 메모리의 최대 80%까지 사용할 수 있어요. Druid에 사용할 총 메모리를 명시적으로 설정하려면 memory 파라미터에 값을 전달하세요. 예를 들어 ./bin/start-druid -m 16g .
Druid는 클러스터 메타데이터 저장소와 데이터 segment 같은 모든 영구 상태 데이터를 apache-druid-37.0.0/var 에 저장해요. 각 서비스는 apache-druid-37.0.0/log 아래에 로그 파일을 작성해요.
언제든지 var 디렉토리 전체를 삭제해 Druid를 설치 직후의 원래 상태로 되돌릴 수 있어요. 예를 들어 Druid 튜토리얼 사이 또는 실험 후에 새 인스턴스로 시작하고 싶을 때 하면 돼요.
언제든지 Druid를 중지하려면 터미널에서 CTRL+C 를 사용하세요. 이렇게 하면 bin/start-druid 스크립트가 종료되고 모든 Druid 프로세스가 종료돼요.
웹 콘솔 열기
Druid 서비스를 시작한 후 http://localhost:8888 에서 웹 콘솔을 여세요.
콘솔을 서빙하는 Druid router 를 포함해 모든 Druid 서비스가 시작을 마치는 데 몇 초가 걸릴 수 있어요. 시작이 완료되기 전에 웹 콘솔을 열려고 하면 브라우저에서 오류가 보일 수 있어요. 잠시 기다렸다 다시 시도하세요.
이 퀵스타트에서는 웹 콘솔로 수집을 수행해요. MSQ task engine은 특히 Query view를 사용해 SQL 쿼리를 편집·실행해요. multi-stage query 아키텍처와 MSQ task engine과 관련된 Query view의 전체 설명은 UI walkthrough 문서를 참고하세요.
데이터 로드
Druid 배포판에는 테스트에 사용할 수 있는 wikiticker-2015-09-12-sampled.json.gz 샘플 데이터셋이 포함돼 있어요. 이 샘플 데이터셋은 Druid 루트 디렉토리에서 접근 가능한 quickstart/tutorial/ 폴더에 있으며, 특정 하루의 Wikipedia 페이지 편집을 나타내요.
샘플 Wikipedia 데이터셋을 로드하려면 다음 단계를 따르세요:
- Query view에서 Connect external data 를 클릭해요.
- Local disk 타일을 선택하고 다음 값을 입력해요: Base directory: quickstart/tutorial/ , File filter: wikiticker-2015-09-12-sampled.json.gz . UI에서 제공하는 것처럼 기본 디렉토리와 와일드카드 파일 필터를 별도로 입력하면 한 번에 여러 파일을 수집하도록 지정할 수 있어요.
- Connect data 를 클릭해요.
- Parse 페이지에서 원시 데이터를 검사하고 데이터를 Druid에 로드하기 전에 다음 선택 작업을 수행할 수 있어요: 행을 펼쳐 해당 소스 데이터를 보기. Input format 옵션에서 선택해 데이터 처리 방식을 사용자 지정. 데이터의 기본 타임스탬프 컬럼 조정. Druid는 데이터에 기본 타임스탬프 컬럼(내부적으로 __time 이라는 컬럼에 저장)이 필요해요. 데이터셋에 타임스탬프가 없으면 Druid는 기본값 1970-01-01 00:00:00 을 사용해요.
- Done 을 클릭해요. 새로 생성된 쿼리를 표시하는 Query view로 돌아가요. 이 쿼리는 wikiticker-2015-09-12-sampled 라는 이름의 테이블에 샘플 데이터를 삽입해요.
REPLACE INTO "wikiticker-2015-09-12-sampled" OVERWRITE ALLWITH input_data AS (SELECT *FROM TABLE( EXTERN( '{"type":"local","baseDir":"quickstart/tutorial/","filter":"wikiticker-2015-09-12-sampled.json.gz"}', '{"type":"json"}', '[{"name":"time","type":"string"},{"name":"channel","type":"string"},{"name":"cityName","type":"string"},{"name":"comment","type":"string"},{"name":"countryIsoCode","type":"string"},{"name":"countryName","type":"string"},{"name":"isAnonymous","type":"string"},{"name":"isMinor","type":"string"},{"name":"isNew","type":"string"},{"name":"isRobot","type":"string"},{"name":"isUnpatrolled","type":"string"},{"name":"metroCode","type":"long"},{"name":"namespace","type":"string"},{"name":"page","type":"string"},{"name":"regionIsoCode","type":"string"},{"name":"regionName","type":"string"},{"name":"user","type":"string"},{"name":"delta","type":"long"},{"name":"added","type":"long"},{"name":"deleted","type":"long"}]' ) ))SELECT TIME_PARSE("time") AS __time, channel, cityName, comment, countryIsoCode, countryName, isAnonymous, isMinor, isNew, isRobot, isUnpatrolled, metroCode, namespace, page, regionIsoCode, regionName, user, delta, added, deletedFROM input_dataPARTITIONED BY DAY
- 선택 사항으로, 수집하기 전에 데이터의 대략적인 형태를 보려면 Preview 를 클릭해요.
- 쿼리의 첫 줄을 편집해 기본 대상 데이터소스 이름을 wikiticker-2015-09-12-sampled 에서 wikipedia 로 변경해요.
- Run 을 클릭해 쿼리를 실행해요. task가 완료되는 데 1~2분 정도 걸릴 수 있어요. 완료되면 task가 테이블에 삽입된 지속 시간과 행 수를 표시해요. 뷰는 자동으로 새로고침되도록 설정돼 있어 브라우저를 새로고침할 필요 없이 상태 변경을 볼 수 있어요. 성공한 task는 Druid 데이터 서버가 하나 이상의 segment를 선택했음을 의미해요.
데이터 쿼리
수집 작업이 완료되면 데이터를 쿼리할 수 있어요.
Query view에서 다음 쿼리를 실행해 상위 채널 목록을 만들어 보세요:
SELECT channel, COUNT(*)FROM "wikipedia"GROUP BY channelORDER BY COUNT(*) DESC
축하합니다! 단 하나의 퀵스타트로 Druid 다운로드부터 MSQ task engine으로 데이터 쿼리까지 진행했어요.
다음 단계
자세한 내용은 다음 주제를 참고하세요:
- 방금 수집한 데이터를 쿼리하는 방법은 Druid SQL overview 또는 Query tutorial 문서를 참고해요.
- 더 많은 데이터를 수집하는 옵션은 Ingestion overview 문서를 참고해요.
- 외부 데이터를 Druid 데이터소스에 로드하는 SQL 쿼리를 생성하는 방법은 Tutorial: Load files using SQL 문서를 참고해요.
- Druid의 native batch ingestion 기능으로 데이터를 로드·쿼리하려면 Tutorial: Load data with native batch ingestion 문서를 참고해요.
- Kafka topic에서 스트리밍 데이터를 로드하려면 Tutorial: Load stream data from Apache Kafka 문서를 참고해요.
- Druid 확장에 대한 자세한 내용은 Extensions 문서를 참고해요.
Druid 서비스를 중지한 후에는 Druid 루트 디렉토리에서 var 디렉토리를 삭제하고 bin/start-druid 스크립트를 다시 실행하면 다음에 깨끗하게 시작할 수 있다는 점을 기억하세요. 다른 데이터 수집 튜토리얼에서도 같은 Wikipedia 데이터소스를 사용하므로, 그 전에 이 작업을 하고 싶을 수 있어요.
더 알아보기 (Learn more)
- Druid SQL 개요 — 쿼리 방법
- Ingestion 개요 — 수집 옵션
- Query tutorial — 쿼리 자세히 배우기