OLAP for Big Data (Druid vs Apache Kylin vs Apache Lens)
-
Upload
sang-won-park -
Category
Data & Analytics
-
view
300 -
download
2
Transcript of OLAP for Big Data (Druid vs Apache Kylin vs Apache Lens)
OLAP�for�Big�Data
freepsw2017.�03
1freepsw
기존 Hadoop기반 분석의 한계
freepsw 2
대용량의 데이터 조회 성능 (Table�scan�비용)
Table�Join�성능 (Data�shuffling으로 인한 성능저하)
다양한 granularity 기반의 분석 한계 (실행시점의 합계 비용)
Map�Reduce�job�/�Spark�job (배치 기반의 job�실행)
OLAP영역에서 hadoop기반 query성능 향상에 초점
분산 OLAP
freepsw 3
Event�데이터 기반의 OLAPHadoop�기반 OLAP
다양한 차원의 분석 필요
기존 OLAP처럼 쓸수 있을까?
Druid,�Kylin,�Lens
분산 파일 시스템 (HDFS)
리소스 관리 (YARN)
배치처리 (MapReduce)
분석 (SQL�on�Hadoop)
NoSQL
NewSQL수집기술
실시간 처리
운영관리 도구
OLAP
Druid vs�kylin vs�lens - 1
freepsw 4
HDFS
Druid
실시간 OLAP�분석
실시간 stream
오래된데이터는 HDFS로 복제(Hive�query�불가)
Kylin Lens
대용량OLAP�분석
Cube생성
HBASE
Cube 조회
Hive�DriverJDBC�DriverES�Driver
여러 관점(성능, 활용, 접근성)별로 특화하여 기능 구현
단일화된 분석채널제공
segments
freepsw 5
성능(속도)
SQL지원
Fault�Tolerance
BI 연동
레퍼런스
Druid Kylin Lens
엄청 빠름 빠름 원본 소스에 영향
X(json) 지원 X(SQL�Like)
모든 Node 별도 설정 별도 설정
x Tableau�등 JDBC로 연동 가능
Airbnb�등 다수 Ebay 등 다수 -
Druid vs�kylin vs�lens - 2
Druid
freepsw 6
Druid�특징
freepsw 7
언제 Druid를 적용해야 할까?
freepsw 8
• 빠르게 값을 집계(roll�up)하면서 탐색적 분석을 해야 하는 경우
• 데이터가 입력되는 동시에 실시간으로 분석하려고 하는 경우
• 엄청난 대용량 데이터가 있는 경우 (trillions�of�events,�petabytes�
of�data)
• 항상 가용성을 보장하는 데이터 저장소가 필요한 경우 (hdfs와는 다른가?)
Druid의 구성
freepsw 9
모든 데이터는 3Timestamp,�Dimension,�measure 필요
Timestamp�: 모든 query는 time 축을 기반으로 실행
Dimension : event의 string�속성들 (지역, 부서 등), 위예시에서는 4개차원 존재
Metric�:� 실제집계할칼럼. 보통 float와같은 수치값들이저장됨
Druid의 핵심기능 (1) roll�up
freepsw 10
Druid는 데이터가 수집되는 순간 집계하여 빠른 분석이 가능
이렇게 입력되면서 데이터를 집계하면, 데이터 저장공간이 엄청나게 줄어든다.동시에 원본의 데이터도 집계시간 단위로 합쳐지게 된다. (즉 raw�data는 확인불가)
freepsw 11
Druid의 핵심기능 (2) Sharding the�Data
데이터가 입력되는 순간 time단위로 데이터를 sharding한다.이렇게 sharding 된 데이터를 segment라고 함.
Druid Query는 segment를 scan한다.
freepsw 12
Druid의 핵심기능 (3) Indexing�the�Data
분석 query에 최적화된 데이터 구조로 저장하여 속도를 향상시킨다.
Column�기반 저장구조
Query에 사용되는 column만 유지 가능
Column별로 다른 압축 알고리즘 선택 가능
Segment 단위로 index를 관리
freepsw 13
Druid의 핵심기능 (4) Loading�the�Data
분석 query에 최적화된 데이터 구조로 저장하여 속도를 향상시킨다.
Real-time- 실시간 수집에 최적화 되어 있음.- Exactly�once는 지원하지 않음 (추후 지원)
batch - Exactly�once를 지원하는 수집
최신의 데이터는 real�time으로 분석하고, 중요한 데이터는 batch로 저장하여 분석하는 것이 좋음.
Druid의 핵심기능 (5) Querying�the�Data
freepsw 14
SQL은 지원하지 않으며, 여러 테이블을 join 할 수 없다.
Json over�HTTP를 이용한 query
다양한 query�library�지원 (http://druid.io/libraries.html)
단일 table�query를 지원
- Druid에 적재되기 전에 비정규화를 통해서 join이 필요없도록 전처리 필요
Druid�아키텍처 cluster�구성
freepsw 15
Cluster의 구성요소 및 데이터 흐름
Indexingservice
Indexingservice
Druid�아키텍처 cluster�구성
freepsw 16
Historical�Node- local에 저장된 segment에 대한 query 제공- Node간 segment에 대해 공유하지 않음 (shared�nothing)
Broker�Node - Client의 query를 받아서 결과를 제공하는 노드- 어떤 segment가 정상상태이고, 어디에 있는지 알고 있음.
각 node는 소규모 기능을 가장 잘 할 수 잇도록 구성되었다.
Coordinator�Node - Historical�node에 있는 segment를 관리- Segment의 이동/삭제/생성을 historical�node에 지시
Indexing�service - Query 속도를 높이기 위하여 column�format 으로 변환- Bitmap�index 생성 및 데이터 압축 à segment 로 저장
Real-time�Processing - 데이터를 수집하고, indexing하여 query서비스를 제공한다.- 정해진 시간단위로 segment를 생성하여 historical�node로 전달한다.
freepsw 17
Druid�아키텍처 Indexing�Service
Indexing�service는 segment를 생성하거나,삭제하는 역할
1) Peon�:�단위 task를 수행하는 프로세스
2) Middle�Manager�:�peon을 관리하는 프로세스
3) Overload�:�middle�manager에게 단위 task의 분배관리
Peon과 middle�manager는 반드시 동일한node에서 실행되어야 함.
freepsw 18
Druid�아키텍처 Segment�and�storage1) 데이터 입력시 indexing���
처리 (segment�생성)
2) Segment를 Deep�storage에 저장
3) Historical�node에 의해서 segment를 local�disk에 저장
4) Local의 segment를memory에 로딩
5) Query�service�제공
19
Druid�아키텍처 Granularity
https://blog.codecentric.de/en/2016/08/realtime-fast-data-analytics-druid/
Granularity에 따라서 segment 개수 및 데이터 size�결정
Segment
- Segment�file의 생성 단위- Day로 설정한 경우 1개 segment- Minute인 경우 2개 segment
Query
- 데이터 Roll�up 단위- Minute인 경우 3개 row로 축소- Disk/memory�사이즈 절약
freepsw
Druid�아키텍처 Metadata�Storage
freepsw 20
System에 대한 메타정보를 관리하는 용도 (mysql,�postgreSQL)
Derby가 기본 storage이지만, 제품화 단계에서는 mysql or�PostgreSQL
Segments�Table- Segment 정보 관리- Coordinator에 의해
query가능한 segment 정보관리
Rule�Table- Coordinator가 segment를
어떻게 배치할지에 대한rule 관리
Task-related�Table- Indexing�service의 작업과
정에서 생성되 데이터 저장
Druid�아키텍처 Fault�Tolerance 방안
21
Historical�Node- 장애 발생시 다른 historical�node가 deep�storage에 저장된 데이
터를 로딩하여 서비스
Coordinator�Node - Hot�fail-over가 가능하도록 설정 가능- 모든 노드가 다운되면, 데이터 변경사항만 기록이 안되고, 서비스는 정상
Broker�Node - 병렬로 실행하거나 hot�fail-over로 구성 가능
Deep�storage - 새로운 데이터가 적재되지 못함. (서비스는 정상 동작)
Real-time�Processing
- 동일한 스트림을 병렬로 처리가능- Check�point를 deep�storage에 저장하여 복구 가능- 만약 check�point 저장시 문제가 생기면 유실 가능
Node가 다운되더라도 저장된 데이터에 대한 서비스는 정상동작
freepsw
Druid�아키텍처 언제 데이터를 메모리에 로딩할까?
freepsw 22
Cache�at�historical�nodes�
Cache�at�broker�nodes
Page�cache (OS에서 관리)
3가지 level의 memory�cache가 존재
- 데이터가 수집되는 즉시 메모이에 올리기 위해서는 약간의 trick이 필요함.- 입력되는 데이터를 조회하는 dummy�sql을 실행하는 방식
Druid�개발에 필요한 것들
freepsw 23
Druid기반의 솔루션은 있을까?
freepsw 24
https://imply.io/
freepsw 25
Imply�기능 구성
Technical�architecture
freepsw 26
Imply�Pivot 예시
Imply�Pivot 예시
freepsw 27
Druid�설치해 보자.
freepsw 28
docker로 생성된 이미지를 이용해 single�node로 설치
Ø git�clone�https://github.com/cimatech/druid-container.gitØ docker-compose�upØ docker ps
Druid에서 제공하는 관리화면
freepsw 29
Data를 loading해 보자.�(File)
freepsw 30
Loading할 Schema를 생성하고, 데이터를 로딩한다.Ø curl�-O�http://static.druid.io/artifacts/releases/druid-0.9.2-bin.tar.gzØ tar�xzf druid-0.9.2-bin.tar.gzØ cd�druid-0.9.2Ø curl -X�'POST'�-H�'Content-Type:application/json'�-d�
@quickstart/wikiticker-index.json localhost:4000/druid/indexer/v1/task
Data를 query하는 방법은..�(1)�json
freepsw 31
curl�-L�-H'Content-Type:�application/json'�-XPOST�--data-binary�@quickstart/wikiticker-top-pages.json http://localhost:8082/druid/v2/?pretty
freepsw 32
Data를 query하는 방법은..�(2)�PlyQLSQL방식과 유사하게 Query할 수 있는 오픈소스
https://github.com/implydata/plyql
http://plywood.imply.io/plyql
freepsw 33
Data를 loading해 보자.�(Stream)
Stream�데이터를 수집하는 별도의 sw를 이용하여 입력
curl�-XPOST�-H'Content-Type:�application/json'�--data-binary�@pageviews.jsonhttp://localhost:8200/v1/post/pageviews
1.�수집서버 구동
2.�POST방식으로 데이터 입력
freepsw 34
Apache�Kylin
Apache�Kylin
freepsw 35
E-bay에서 2014.10 오픈소스화한 Hadoop-SQL기반 OLAP
Druid와 차이
Kylin의 영역
freepsw 36
OLAP영역에서 hadoop기반 query성능 향상에 초점
37
Kylin 아키텍처
API를 통해 요청받은 job을 Hive로 구동하고, 결과 cube를 hbase에 저장
- Tomcat으로 구성되어 구동이 간편하다- Cube 생성시 Memory를 많이 사용하게 되는 구조 (JVM�GC 옵션을 잘 관리하는 것이 필요)freepsw
Kylin으로 Cube를 만들어 보자
freepsw 38
Web�UI를 이용하여 cube를 생성한다.
Project• Project단위로 여러개의 Model을 관리• 사용할 Hive Table을 지정해 준다.
Model • Cube에 필요한 모델(스타스키마)을 구성한다.
Cube • Dimension,�measure�등을 지정한다.
어떻게 Cube를 생성할까?
freepsw 39
HIVE
Kylin
1)��Cube를생성할Table 선택
MapReduce
2)��Cube의dimension/measure 지정
HBase
3)��Dimension별로measure�합산
HDFS(중간파일 임시저장)
4)��최종 cube를 저장및조회
Cube�생성 job�모니터링
freepsw 40
자. 그럼 얼마나 빠를까?
freepsw 41
10,000건 데이터를 기준으로 2.5 배 정도 빠른데... 너무 당연한 결과
Kylin (1.76�sec)
Hive�(4.56�sec)
자. 그럼 얼마나 빠를까?
freepsw 42
Kylin (0.12�sec)
Hive�(103�sec)
10억건 데이터를 기준으로 850 배 정도 빠르다. (Cardinality�3)
자. 그럼 얼마나 빠를까?
freepsw 43
Kylin (0.18�sec)
Hive�(125�sec)
10억건 데이터를 기준으로 690 배 정도 빠르다. (Cardinality�2,400)
Kylin 활용시 고려사항
freepsw 44
너무 많은 dimension은 차원의 조합이 지수적으로 증가함
높은 cardinality는 cube의 사이즈를 과도하게 증가시킴
Cube 정보를 최신데이터로 갱신하는 프로세스를 고려해야 함.
Hive 기반으로 cube를 생성해야만 query가 가능한 구조
Kylin을 활용한 솔루션 (Kyligence Analytics�Platform)
freepsw 45http://kyligence.io/en/
Kyligence 아키텍처
freepsw 46
Kafka/spark를 통해 streaming 데이터의 cube 생성
Apache�Lens
freepsw 47
Unified�OLAP�on�Realtime and�Batch�Data(2014�Apache�Incubator)
Apache�Lens의 등장배경
freepsw 48
동일한 데이터의 용도에 따라 다양한 분석 시스템이 존재하게 됨.
시스템의 복잡도 증가
데이터 일관성 유지 어려움
대량의 데이터 이동(복제)
Data�Silo�현상
접근방식 서로 다름
데이터 모델 서로 다름
Apache�Lens의 장점
freepsw 49
모든 데이터를 동일한 방식으로 접근하고,다양한 query별로 cost와 성능관점으로 선택할 수 있는 기능 제공
Hadoop�Eco에서 Lens�의 position
freepsw 50
다양한 query�Engine들의 상위에서 OLAP을 지원하는 Layer
Apache�Lens 적용시 고려사항
freepsw 51
실제 business에 적용된 사례가 거의 없음
Github의 commit 통계도 낮으며, 발전속도가 느림.
실제 프로젝트에 적용하기에는 검증되어야 할 사항이 많아 보임.
2015년 9월에 Apache�Top�level project로 선정
[back�up]�olap 용어
freepsw 52
Kylin Cube의 구성
freepsw 53
필요한 dimension별로 cuboid를 생성하여 관리
기존 RDBMS에서 cube생성 방식
freepsw 54
Cube가 없이 rdbms에서 동일한 결과를 내기 위해서는 수많은aggregation이 필요
Apache�kylin
freepsw 55
Apache�kylin - Cube�Build�job�flow
freepsw 56
Apache�kylin
freepsw 57