타조는 그루터에서 만든 하둡 기반의 차세대 빅데이터 분석 처리 엔진입니다기존 시스템과 통합을 하거나 이를 대체할 수 있도록 표준 SQL을 지원합니다또한 CPU와 메모리를 적절히 활용하여 높은 처리 성능을 보장합니다타조는 기존 하둡 빅데이터 처리엔진인 하이브(Hive)보다 10배에서 100배까지 빠르게 데이터를 처리할 수 있습니다타조와 같은 인터렉티브 분석(IA, Interactive Analysis) 기술과 하둡 생태계 기술들을 최적화할 경우관계형 데이터베이스에서 제품군에서 제공하는 뛰어난 성능의 상용 데이터웨어하우스(DW, Dataware house) 제품들을 대체할 수 있습니다.

 

타조는 하둡 기반의 대용량 데이터웨어하우스(DW) 시스템을 목표로 하는 솔루션으로 현재 아파치 인큐베이션 프로젝트(http://tajo.incubator.apache.org/)로 진행중인 오픈 소스 프로젝트이며그루터가 개발을 주도하고 있습니다타조는 분산된 저장소에 저장된 데이터를 SQL질의를 분산 실행시켜 빠르게 데이터를 처리하는 기능을 제공하는 플랫폼입니다.

 

 

기존 맵-리듀스 기반 분석 시스템

하둡(Hadoop)은 대규모 데이터의 분산처리를 위한 오픈 소스 프레임워크입니다하둡은 크게 데이터를 저장할 수 있는 하둡 분산 파일 시스템(HDFS, Hadoop Distributed File System)과 저장된 데이터를 처리하는 맵-리듀스(Map-Reduce)로 구성되어 있습니다하둡은 크게 3가지의 장점을 가지고 있습니다.

 

첫번째는 유연성입니다데이터베이스에 저장되어 있는 정형화된 데이터나트위터와 페이스북에서 생성되는 비정형화된 데이터등 여러 형태의 다양한 데이터 포맷을 지원해 주며자바(Java), 루비(Ruby), 파이썬(Python)등과 같은 범용 프로그래밍 언어를 이용하여 다양한 분석 알고리즘 적용이 가능합니다.

 

두번째는 확장성입니다하둡은 노드(Node)를 증가함에 따라서 성능과 용량이 선형적으로 증가합니다시스템의 성능을 높이기 위해서 프로그램과 리소스를 튜닝하는것보다 노드(Node)와 같은 장비를 확장함으로써 더 좋은 성능을 발휘할수 있습니다.

 

마지막으로 비용입니다하둡은 x86과 같은 저가의 노드(Node)들을 서로 연계시켜도 성능면에서 떨어지지 않는 장점을 가지고 있습니다또한 이러한 저가의 서버들을 수십대에서 수만대까지 연계시킬 수 있으므로 대용량의 데이터를 처리하는데 저 비용으로 시스템을 구축할 수 있습니다.

 

 

하이브(Hive)

하이브는 하둡 기반의 데이터웨어하우스(DW, Data warehouse)입니다하이브는 HiveQL(Hive Query Language)이라는 SQL과 유사한 언어로 만들어졌습니다하이브는 사용자가 HiveQL으로 명령어를 입력하면 하이브는 내부적으로 맵-리듀스 작업으로 변환하여 처리를 합니다초기에 하이브가 사용자들에게 사랑을 받은 이유가 맵-리듀스라는 프로그래밍 언어를 알지 못해도, HiveQL를 사용하여 쉽게 하둡 분산 파일 시스템에 저장되어 있는 데이터를 분석할 수 있습니다.

 

 

-리듀스의 문제점

-리듀스는 배치 처리(Batch processing)를 목적으로 만들어진 시스템으로 맵과 리듀스간의 셔플링(Shuffling) 작업에 많은 시간을 허비하여 실시간 분석에 적합하지 않은 문제점을 가지고 있습니다.

 

셔플링(Shuffling)이란 메모리에 저장되어 있는 맵 함수(Map function)의 출력 데이터를 파티셔닝과 정렬을 해서 로컬 디스크에 저장한 후에 네트워크를 통해 리듀서의 입력 데이터로 전달하는 과정을 말합니다.

 

문제는 분산된 수많은 노드(Node)에서 수집한 맵 함수에 대한 결과들을 하나의 리듀스 서버로 전달을 해야 합니다이 과정에서 네트워크에 많은 부하가 발생하게 되며맵 과정에서도 빈번하게 하둡 분산 파일 시스템(HDFS)에 데이터를 읽고 쓰는 작업을 반복해야 함으로써 분석 성능을 저하시키는 원인이 됩니다.

 

하이브의 문제점

하이브는 HiveQL이라는 언어를 통해서 맵-리듀스 언어로 변환이 되어서 맵-리듀스 처리를 해야합니다이러한 이유로 맵-리듀스의 모든 문제점을 가지고 있습니다-리듀스을 처리하기 위해서 수행되는 여러 개의 태스크(Task)들이 실행되어서 준비되는 시동시간이 5~15초에 달합니다그리고 HiveQL SQL과 유사한 언어이지만표준 SQL(Ansi SQL)과는 많은 차이가 있습니다.

 

 

SQL 온 하둡

하둡 기반의 차세대 분석 엔진을 의미합니다기존 하둡이 가지고 있는 맵-리듀스와 하이브(Hive)의 문제점을 개선하여 실시간 분석이 가능하도록 시스템을 개선한 것입니다. SQL 온 하둡의 특징은 다음과 같습니다.

 

 SQL 표준 지원

기존 관계형 데이터베이스에서 사용하던 SQL을 그대로 사용하도록 표준 SQL 문법을 준수합니다이를 통하여 SQL에 친숙한 분석가들과 사용자들을 하둡으로 전향할 때 발생할 수 있는 거부감을 줄여줄수 있습니다.

 

 높은 처리 성능

기존의 맵-리듀스를 사용하지 않고 실시간 분석이 가능한 새로운 분산 처리 프레임워크를 사용하고 인-메모리(In-Memory) 기능의 활용과 CPU 사용을 극대화 시키는 기술을 도입하여 낮은 반응 시간(Low latency)이 나오도록 지원합니다.

 

 성능에 대한 보장

-리듀스는 프로그래밍 언어로서 개발자의 역량이 중요합니다같은 내용의 프로그램이라고 할지라도 누가 만들었는지 어떤 방식으로 설계했는지에 따라서 성능에 큰 차이가 나타날 수 있습니다또한 존재하는 버그를 찾는데 많은 시간과 노력을 필요로 합니다하이브(Hive)의 경우에도 사용자가 어떻게 질의를 했는가에 따라서 성능에 큰 영향을 미칩니다. SQL 온 하둡은 사용자에 의해서 발생할 소지가 있는 문제점들을 분석 시스템에서 자동적으로 보정해주는 작업을 진행하여 똑같은 성능이 나오도록 보장을 해 줍니다.

 

 

타조의 특징

타조는 하둡 기반의 데이터웨어하우스(DW, Data warehouse)이며, HDFS및 다양한 형태의 데이터를 추출하고 분석 시스템에 전송하여 집계 및 연산조인정렬 기능을 제공합니다.

 

 호환성

표준 SQL을 지원하여 기존 사용자들이 사용하는데 거부감이 없으며사용자들이 함수를 작성하여 사용할수 있도록UDF(User Defined Function)를 지원합니다그리고 JDBC를 지원하고 있으며, ODBC는 추후 지원할 계획입니다.

 

 고성능 및 낮은 반응 시간(Low latency)

-리듀스를 사용하지 않고 유연하고 효율적인 분산 처리 엔진을 자체 개발하여 사용하고 있으며비용 기반 최적화 엔진(cost-based optimization) JIT Query Compliation  Vectorized 질의 엔진을 사용하고 있습니다.

 

 오픈 소스 (http://tajo.incubator.apache.org)

클라우데라에서 만든 임팔라의 경우 오픈 소스이지만사용자들이 개발에 참여할 수 없지만타조는 오픈 소스이며 사용자 참여가 모두 가능합니다.

 

타조의 목표

 잘못된 질의에 대한 최적화

-리듀스와 하이브의 경우에는 작성하는 개발자의 능력에 따라서 성능이 다르게 나오는 문제점을 가지고 있으며하이브에서는 ‘From’ 절의 배치 순서에 따라서 나오는 결과가 수분 또는 몇시간이 걸릴 수 있습니다타조에서는 사용자가 입력한 질의에 대해서 엔진에서 최적화가 될수 있도록 보정 작업을 진행합니다.

 

 분산 처리 프레임워크

-리듀스의 경우 하나의 테스크를 시작하는데 걸리는 시간이 수십밀리 초에서 1초 정도 걸리고 맵과 리듀스 작업을 위해서 데이터를 네트워크를 통해서 전송하는데 많은 병목현상이 발생합니다이러한 문제점을 해결하여 실시간 분석이 가능한 분산 처리 프레임워크를 개발하였습니다.

 

 

Master-Worker 모델

전형적인 Master-Worker 모델입니다마스터(Master)가 존재하고 마스터가 발생하는 작업들을 하부에 있는 워커(Worker)들에게 할당하는 구조입니다네티(Netty) Protocol Buffer등을 이용하여 RPC(Remote Procedure Call)로 마스터와 워커간의 통신을 담당합니다.

 

 마스터(Master)

타조 마스터는 쉘 커맨드나 프로그램에서 보내온 질의에 대한 처리를 담당하며카탈로그 서버(메타 서버)에서 테이블 스키마나 물리적인 정보와 각종 통계 자료들을 보유하고 있습니다마스터는 또한 쿼리를 파싱하고 최적화하여 동일한 성능을 보장을 해주며클러스터 자원들을 관리하는 역할를 수행합니다.

 

 워커(Worker)

워커는 쿼리 마스터(Query Master)와 타조 워커(Tajo Worker)로 구성이 되어 있으며질의에 대한 처리를 담당합니다질의 하나당 쿼리 마스터 하나가 생성되며질의에 대한 수행 계획과 최적화 작업을 진행합니다쿼리 마스터가 여러 개의 타조 워커(Tajo Worker)를 띄워서 물리적인 데이터를 HDFS에 데이터를 쓰고읽는 작업을 진행합니다그리고 로컬에 질의 엔진을 가지고 있어서 할당 받은 작업을 수행합니다타조 워커는 기존에 자바로 구현이 되어 있는데속도 향상을 위해서 C++로 대체하는 작업을 진행중입니다.

 

다음 그림은 타조의 구조를 나타냅니다타조 클라이언트에서 질의가 들어오면 타조 마스터에서 질의에 대한 계획을 세우고 리소스를 받아서 쿼리 마스터를 띄워서 질의를 수행하기 위해서 타조 워커(Tajo Worker)에게 질의를 할당하는 작업을 진행합니다.

 

타조의 구조 ]

 

 

질의 계획 및 최적화 엔진


 비용 기반 최적화 (Cost-based optimization)

조인 순서를 사용자에게 의존하지 않고 최적의 성능이 나오도록 엔진이 스스로 조인 순서를 결정합니다.

 

 확장 가능한 Rewrite Rule 엔진

기존에 상용 데이터베이스에서 지원하는 확장 가능한 Rewrite rule를 사용하여 튜닝이 가능하도록 지원합니다.

 

 적응형 최적화 (Progressive query reoptimization)

질의가 실행되는 시간에 통계 정보를 바탕으로 질의의 남은 부분들을 최적화할 수 있으며나쁜 질의에 대해서는 회피도 가능합니다.

 

 데이터 셔플(Shuffle) 방법

기존에 맵-리듀스에서 사용하던 해쉬(Hash) 뿐만 아니라 레인지 파티션(Range Partition)도 지원합니다레인지 파티션은 각각의 서버들에게 할당된 범위안에서 데이터 처리를 분배해주는 방법입니다.


⑤ 데이터 전송 방법

기존의 데이터 전송 방식은 풀(Pull) 방식입니다풀 방식이란 중간 데이터를  저장을 해 놓으면 필요한 워커들이 데이터를 끌어가는 방식을 말합니다지금은 푸쉬(Push) 방식을 사용하는데 중간 과정의 데이터를 디스크에 저장하지 않고 다른 워커에게 전송하는 방식입니다이 방식은 자원을 즉시 사용할 수 있어서 실시간 처리에 적합한 구조입니다.


⑥ Vectorized Engine

컬럼(Column) 방식으로 데이터를 처리합니다하나의 테이블이 있으면 컬럼 단위로 분할을 하며 분할된 컬럼들을 백터(Vector)라고 부릅니다벡터의 크기는 CPU 캐시 크기에 맞추어서(row) 데이터 조회시 빠른 결과를 얻을 수 있습니다데이터 처리는 벡터 단위로 루프(Loop)를 반복해서 처리를 하며셀렉션 벡터(Selection vector)등과 같은 여러가지 기능들을 제공합니다.

 

[ Vectorized Engine ]

 

 

⑦ JIT (Just In Time) 코드 생성기

데이터 조회에 필요한 프리미티브(Primitive)를 미리 만들어 놓지 않고, LLVM(Low Level Virtual Machine)을 이용해서 런타임시에 실시간으로 생성합니다. LLVM은 프로그래밍 언어 컴파일러 집합으로 컴파일 시간이나 런타임 시간등 다양한 상황에서 최적화를 쉽게 구현할수 있도록 구성되어 있습니다.

+ Recent posts