Druid 란?
Druid 공식 문서: https://druid.apache.org/docs/latest/design/
- 대규모 데이터에 대한 빠른 OLAP 쿼리를 위해 설계된 실시간 분석 데이터베이스, interactive한 분석을 가능하게 함
- 짧은 시간(3초 이내)에 대용량 데이터에 대해 interactive한 분석을 가능하게 함
- OLAP란
- 대용량 업무 데이터베이스를 구성하고 BI(Business Intelligence)를 지원하기 위해 사용되는 기술
- 데이터 웨어하우스나 데이터 마트와 같은 대규모 데이터에 대해 최종 사용자가 정보에 직접 접근하여 대화식으로 정보를 분석하고 의사결정에 활용할 수 있는 실시간 분석처리
Druid 사용례
- 웹 및 모바일 분석을 포함한 클릭스트림 분석
- 네트워크 성능 모니터링을 포함한 네트워크 원격 측정 분석
- 서버 메트릭 스토리지
- 제조 지표를 포함한 공급망 분석
- 애플리케이션 성능 지표
- 디지털 마케팅/광고 분석
- 비즈니스 인텔리전스/OLAP
특징
- Columar 로 데이터를 저장(mysql 등 일반 저장소는 row기반)
- 확장 가능한 분산 시스템. 일반적인 Druid 배포는 수십에서 수백 개의 서버에 클러스터링 하여 배포.
- 초당 수백만개의 레코드 속도로 데이터를 수집하는 동시에 수조 개의 레코드를 유지하고 쿼리 대기 시간을 1초 미만에서 몇 초까지 유지
- 대규모 병렬 처리
- Druid는 전체 클러스터에서 각 쿼리를 병렬로 처리할 수 있음
- 실시간 또는 일괄 처리
- Druid는 데이터를 실시간 또는 일괄 처리할 수 있고, 수집된 데이터는 쿼리에 즉시 사용할 수 있음
- 시간 기반 파티셔닝
- Druid는 먼저 데이터를 시간별로 분할합니다. 선택적으로 다른 필드를 기반으로 추가 파티셔닝을 구현할 수 있습니다. 시간 기반 쿼리는 쿼리의 시간 범위와 일치하는 파티션에만 액세스하므로 성능이 크게 향상됩니다.
- approximate 알고리즘
- Druid에는 approximate dinstinct count, approximate rank등의 계산을 위한 알고리즘이 포함되어 있습니다. 이러한 알고리즘은 적은 메모리 사용을 제공하며 정확한 계산보다 훨씬 빠름
- hyperloglog 알고리즘 사용
Druid 구조
- Coordinatiors: 클러스터의 데이터 가용성을 관리 (세그먼트 로드, 세그먼트 삭제, 세그먼트 레플리케이션 …)
- Overlord: 데이터 수집 워크로드 할당을 제어
- Brokers: 외부 클라이언트의 쿼리를 처리
- Routers: 선택 사항입니다. broker, coordinator, overload 에게 요청을 라우팅
- Historical: 쿼리 가능한 데이터를 저장
- MiddleManager: 데이터를 수집
Druid 실습 w.Turnilo
본 실습은 Mac OS 환경에서 수행되었으며, Druid의 Cluster 구조가 아닌 Standalone 모드로 수행되었습니다. 실제 서비스 환경에서는 Cluster 환경으로 구축하여 사용하시는 것을 추천드립니다.
1. Druid 다운로드 및 실행
wget https://dlcdn.apache.org/druid/25.0.0/apache-druid-25.0.0-bin.tar.gz
tar -xzf apache-druid-25.0.0-bin.tar.gz
cd apache-druid-25.0.0
./bin/start-druid
2. Druid UI 접속
3. Load Data에서 원하는 저장소 선택
- 실습에서는 batch classic -> example data 선택 (위키피디아 사전 데이터)
4. Parse Data, Parse Time, Submit
각 필드들을 정의, 시간에 대한 필드 정의 후 Submit 하여 ingestion을 수행함.
최종 ingestion spec은 json 형식으로 제출되어 ingestion이 수행됨.
5. Query
SQL 쿼리를 통해 ingestion 된 데이터를 질의
Druid는 Columar 형식으로 저장하므로, dimension(필드) 기준으로 group by 연산하는 것에 빠른 속도를 보여줌
6. 추가적으로 실제 데이터, Turnilo 활용한 실습
1) Kaggle에서 적합한 데이터를 찾아 다운
본 실습에서는 ecommerce 데이터를 활용
https://www.kaggle.com/datasets/mkechinov/ecommerce-events-history-in-cosmetics-shop
eCommerce Events History in Cosmetics Shop
This dataset contains 20M users' events from eCommerce website
www.kaggle.com
2) ingestion_spec 정의 후 submit
크게 '파일의 위치', 'dimension(필드들)', metrics, granularity(묶는 시간 단위)를 정의
{
"type": "index_parallel",
"spec": {
"ioConfig": {
"type": "index_parallel",
"inputSource": {
"type": "local",
"baseDir": "/Users/user/Desktop/data",
"filter": "*.csv"
},
"inputFormat": {
"type": "csv",
"findColumnsFromHeader": true
}
},
"tuningConfig": {
"type": "index_parallel",
"partitionsSpec": {
"type": "dynamic"
}
},
"dataSchema": {
"dataSource": "shopping",
"timestampSpec": {
"column": "event_time",
"format": "auto"
},
"dimensionsSpec": {
"dimensions": [
"event_type",
"product_id",
"category_id",
"category_code",
"brand",
{
"type": "double",
"name": "price"
},
"user_id",
"user_session"
]
},
"metricsSpec": [
{
"type": "hyperUnique",
"name": "user_id_uv",
"fieldName": "user_id",
"isInputHyperUnique": false,
"round": false
},
{
"type": "hyperUnique",
"name": "user_session_uv",
"fieldName": "user_session",
"isInputHyperUnique": false,
"round": false
}
],
"granularitySpec": {
"queryGranularity": "HOUR",
"rollup": true
}
}
}
}
3) turnilo 설치
brew install node
npm install -g turnilo
turnilo connect-druid http://localhost:8888
http://localhost:9090 접속후, UI 로 데이터 분석
- UI로 pivot table처럼 분석이 가능하여 쿼리를 모르는 기획자, 마케터들도 손쉽게 데이터를 분석하고 이를 레포트에 활용 가능
'팀 이야기' 카테고리의 다른 글
[스프링] SpringBoot이 ObjectMapper를 구성하는 방법 (0) | 2024.10.16 |
---|---|
[스프링팀] gRPC (1) | 2024.10.15 |
[스프링팀] 검색 기술의 원리 발표 세션 (1) | 2022.09.14 |
[프로덕트 디자인팀] 서비스 분석 스터디 1.Fin-Tech (0) | 2022.07.27 |
🎈 매쉬업 노드팀 11기 총결산 🎈 (1) | 2022.01.19 |