Hive 와 Druid로 울트라-빠른 OLAP 분석하기-1편
다음 글은 https://hortonworks.com/blog/apache-hive-druid-part-1-3/ 포스팅에 대한 요약글이다.
아직 part1 만 시작한 글이지만 얼마나 좋길래? 울트라란 용어를 남발하였는지 살펴 보기로 하자.
한줄 요약하자면 SQL-on-Hadoop기술의 de-facto Hive와 OLAP engine Druid가 만나 초고속 분석을 제공한다는 이야기이다.
Druid는 고성능 컬럼 기반 분산 데이터 저장소로 아래 그림과 같이 역색인을 생성하여 특정 행(Dimension)을 빠르게 로드할 수 있다. 많은 분석응용에서 드릴다운하며 데이터의 summary를 생성해야 하는데 (예를 들어 국가별 특정 날짜에 대한 판매 Top Brand가 알고 싶을 때?) 기존 SQL on Hadoop 기술로는 성능상의 지연이 발생되기 때문에 아래 도식과 같이 State라는 Dimension에 대한 빠른 쿼리를 기대한다면 역색인을 수행한 Druid가 강점을 보일 수 있다. 이를 건초 더미에서 바늘찾기(needles in the haystack)라고 말한다.
그러나 버뜨, Druid의 한계점으로 꼬집고 싶은 부분은 다음과 같다.
- 원본에 대한 저장을 하지 않는다.
- 다른 데이터 소스간 join을 지원하지 않는다.
- ingestion 및 query를 위한 별도 spec(json)이 존재하여 기존 시스템과 통합이 제한적이다.
이외에도 수많은 단점(?)이 있을 수 있겠지만 위에서 언급한 세가지 중심으로 이야기를 풀어가보면 Druid 자체가 데이터에 대해 요약 색인을 생성 하는 구조이기 때문에 원본 데이터가 요구된다면 별도 저장이 필요하다. 둘째로 다른 데이터 소스와 조인을 하여 데이터를 보고 싶을때 현재는 lookup table정도만 지원하기 때문에 대규모 조인은 지원되지 않는다. 셋째로 ingestion과 query를 위해서는 json포맷을 작성하여야 하기 때문에 SQL을 통한 통합 색인 및 분석 질의는 불가능하다.
위와 같은 단점을 극복하고자 이 글에서는 Apache Hive와 Druid의 통합을 이야기 하고 있다. Hive를 통해 통합 SQL을 지원하게 되면 ODBC/JDBC 드라이버를 이용할 수 있게 되며 이렇게 되면 기존 BI또는 레거시와 쉽게 통합이 된다. Hive에서 Storage Handler인터페이스를 통해 다중 데이터 소스간 연합을 지원하며 Calcite를 통해 쿼리 translation을 제공한다. Read Path Integration을 통해 Hive에서 Druid테이블을 쿼리하고 Write Path Integration을 통해 Hive에서Druid테이블을 작성 하고 업데이트 할 수 있도록 지원한다.
아래 도식과 같이 Write Path Integration을 통해 Hive의 데이터를 기반으로 Druid의 OLAP큐브를 생성한다. 이렇게 생성된 OLAP큐브는 SQL을 통해 질의 될 수 있다. 즉, Hive 데이터에 대해 Druid는 OLAP인덱스를 제공하여 빠른 질의를 제공하게 되는 것이다.
Apach Calcite는 엔진의 강점에 따라 간단한 쿼리는 Druid에서 직접 응답하도록 하며 복잡한 연산의 경우 Hive에서 쿼리를 실행 할 수 있도록 한다. Druid가 담당하는 간단한 쿼리에는 TopN쿼리, 시계열 쿼리, 차원별 그룹화된 집계등이 포함된다. Calcite 통합을 통해 Hive의 SQL인터페이스는 Druid와 통합될 수 있는것이다.
추가작업
- Materialized View Navigation : OLAP인덱스 생성시 Calcite를 통해 투명하게 re-write함
- 인덱싱 속도 : Hive에서 OLAP인덱싱 생성시 segment와 reducer의 관계는 1:1로서 데이터가 큰 경우 지연이 발생함. 병렬 세그먼트 생성으로 인덱싱 속도를 높이고자함
- Seamless Lambda Architecture : 실시간 데이터와 historical 데이터에 대한 조인 수행 및 historical layer에 대한 ingestion/보존을 간단하게 함
- AtScale통합 : OLAP솔루션은 MDX(다차원식) 쿼리 지원을 해야하며 Atscale은 Adaptive Cache기술을 향상시켜 Hive를 사용하여 Druid지원 테이블을 작성하고 읽을 수 있도록 지원함. 참고글 http://blog.atscale.com/hive-druid-atscale
몇몇 이슈는 아직도 진행중이다. Druid와 Hive그리고 Calctie 간의 tight 한 integration이 진행중으로 결과는 좀 지켜봐도 좋을 듯 하다.