본문 바로가기

Big DATA

Apache Kudu 소개

Apache Kudu는 Hadoop 플랫폼용으로 개발된 컬럼어 스토리지이며, 하둡 에코 프로젝트의 기본 사항인 범용 하드웨어 사용, 수평 확장성 및 가용성 보증과 같은 속성을 그대로 지원합니다. Kudu의 혜택은 다음과 같습니다: 

  • OLAP 워크로드의 빠른 처리
  • MapReduce, Spark, Flume 및 다른 Hadoop 에코 프로젝트와 연계/통합 지원
  • Apache Impala와 완벽한 통합: Apache Parquet 파일의 HDFS의 완벽한 대안/대체 가능
  • 강력하지만 유연한 데이터 일관성(Consistency) 모델 지원: 엄격한 직렬화 옵션을 포함하여 사용자에게 요청 기반으로 데이터 일관성 옵션을 선택하여 사용할 수 있습니다.
  • 순차(Sequential) 및 랜덤 데이터 접근을 사용하는 워크로드의 동시 수용 및 빠른 성능
  • Cloudera Manager를 통한 관리 편의성 제공
  • HA: Tablet Server와 Master는 Raft consensus algorithm을 사용하여 가용성 기능을 제공하며, Leader Tablet이 장애가 발생한 경우, 데이터 읽기 오퍼레이션은 read-only follower tablet에서 지속적으로 서비스를 제공할 수 있습니다. 
  • 구조화된 데이터 모델(Structured data model).
Kudu는 현재 하둡의 스토리지 계층 기술에서 구현하기 어렵거나 불가능한 요구사항을 해결할 수 있는 옵션을 제공합니다. 

Kudu-Impala Integration Features

  • CREATE/ALTER/DROP TABLE: Impala는 Kudu에서 테이블 생성, 변경, 삭제 오페레이션을 지원합니다. 테이블은 Impala에서 다른 테이블과 동일한 Internal/External 접근법을 따르므로 유연한 데이터 처리 및 쿼리가 가능합니다. 
  • INSERT : Impala는 HDFS와 HBase와 동일한 메커니즘을 사용하여 Kudu에 데이터 Insert작업을 수행합니다.  
  • UPDATE/DELETE :  Impala는 Kudu 테이블에 저장된 데이터에 대해 Row 단위 또는 배치 방식의 UPDATE 및 DELETE SQL 명령어를 지원합니다. SQL 명령어 구문은 가능한 기존 솔루션과 호환되도록 고안되었습니다. 단순한 DELETE나 UPDATE 명령어 외에 쿼리의 FROM 절에 복잡한 조인절을 지정하여 사용할 수 있습니다.  
  • Flexible Partitioning : Hive의 테이블 파티셔닝 개념과 유사하게 클러스터 전역에서 균등한 쓰기 및 쿼리 작업이 분산되도록 Kudu는 테이블을 해쉬나 범위기반으로 사전에 정의된 태블릿 개수만큼 동적으로 분활합니다.  
  • Parallel Scan : 범용 하드웨어에서 최적의 성능을 달성하기 위해서, Impala에서 사용한 Kudu 클라이언트는 다중 태블릿에서 스캔을 병렬처리 합니다. 

Concepts and Terms

Columnar Datastore

kudu는 컬럼형 데이터저장소로 컬럼 기반의 스키마 설계된 저장소에 데이터를 저장합니다. 이러한 이유로 Kudu는 분석 및 데이터 웨어하우스 워크로드에 적잡한 데이터 저장소입니다.

Read Efficiency
일반적인 분석 쿼리에 특성은 전체 컬럼의 모든 데이터보다는 단일 컬럼이나 특정 컬럼들을 대상으로 합니다. 이러한 특성 때문에 디스크의 최소 블록을 사용하여 읽기 요청을 처리할 수 있습니다. Row기반의 데이터 베이스의 경우에는 일부 컬럼의 정보만을 필요한 경우에도 내부적으로 전체 Row를 모두 참조해야 하는 단점을 가지고 있습니다. 
Data Compression
특정 컬럼은 하나의 데이터 타입에 대한 데이터만을 포함되므로, 패턴-기반 압축은 데이터 유형이 혼제되어 있는 데이터를 암축하는 것 보다 더 효율적입니다. 압축을 통해 디스크에서 더 적은 블록에 대한 읽기 작업을 수행할 수 있기 때문에 읽기 쿼리의 효율성을 최대화 할 수 있습니다. 

Raft Consensus Algorithm

잠재적인 리더 그룹에서 분산 클러스터의 Leader를 선출할 때 "Raft Consensus 알고리즘"을 활용합니다. Follower가 현재 Leader에 접속하지 못하는 경우, Follower가 Leader의 후보군(Candiate)으로 전환됩니다. Quorum의 결과로 후보군중 하나의 Follower가 Leader로 승격되며, 나머지 후보자들은 다시 Follower로 전환됩니다. Raft Consensus 알고리즘은 이와 같은 분산 클러스터 환경에서 Leader와 Follower의 역할에 대한 매우 견고한 알고리즘을 제공합니다. Kudu는 쓰기 작업의 성공 및 실패에 대한 의사 결정 과정 및 마스터와 리더 태블릿(Leader Tablets)선출에 대해 Raft Consensus Algorithm을 사용합니다. 

Table

테이블은 Kudu에 데이터가 저장되는 장소입니다. 테이블은 스키마와 Primary Key를 가지고 있습니다. 하나의 테이블은 Primary Key에 의해 태블릿이라는 세그먼트로 분활되어 저장됩니다. 

Tablet

태블릿은 관계형 데이터베이스의 파티션과 유산한 단일 테이블의 분활들입니다. 하나의 태블릿은 다중 태블릿 서버에 복제되며, 복제본 중 하나가 Leader Tablet이 됩니다. 모든 복제본에서 데이터 Read 서비스를 제공할 수 있으며, Write 작업을 모든 태블릿을 제공하는 태블릿 서버 그룹간의 합의를 통해 수행됩니다. 

Tablet Server

태블릿 서버(Tablet Server)는 테블릿을 저장하고 클라이언트에게 테블릿을 제공하는 역할을 담당합니다. 특정 태블릿에 대해, 하나의 탯블릿 버서는 Leader의 역할을 수행하고 나머지 태블릿 서버는 해당 태블릿의 복제본에 대한 Follower의 역할을 담당합니다. Write 요청은 Leader에서만 수행되며, Read 요청은 Leader 및 Follower 모두 수행할 수 있습니다. Leader는 Raft Consensus 알고리즘을 사용하여 선출되며, 단일 태블릿 서버에는 여러 개의 태블릿을 제공합니다.  

Master

마스터는 모든 태블릿, 태블릿 서버, 카탈로그 태이블 및 클러스터와 관련된 다른 메타데이터 정보를 추적관리 합니다. 특정 시점에는 단일 마스터가 Leader 역할을 수행하며, 현재 Leader에 문제가 발생한 경우, Raft Consensus 알고리즘을 사용하여 신규 마스터가 등록됩니다. 

마스터는 클라이언트에 대한 메타 데이터 오퍼레이션을 조정하는 역할도 담당합니다. 예를 들어, 클라이언트가 신규 테이블을 생성하는 경우 마스터에게 해당 요청을 전송합니다. 마스터는 카탈로그 테이블에 신규 데이블에 대한 메타 정보를 작성하고 테블릿 서버에 태블릿 생성하는 작업을 중재합니다. 모든 마스터의 데이터는 태블릿에 저장되며, 이 데이터는 다른 마스터 후보군에 복제됩니다. 태블릿 서버들은 마스터에 Heartbeat 통신을 합니다. 

Catalog Table

카탈로그 테이블(Catalog Table)은 Kudu의 메타정보의 중앙 저장소입니다. 카탈로그 테이블에는 테이블과 테블릿에 대한 정보를 저장됩니다. 클라이언트들은 Client API를 사용하여 마스터를 통해 카탈로그 테이블에 접속할 수 있습니다. 즉, 카탈로그 테이블은 직접 읽기나 쓰기 작업을 수행할 수 없기 때문에 Client API에서 제공되는 메타데이터 오퍼레이션을 통해 접속하여 작업을 수행할 수 있습니다. 카탈로그 테이블에는 다음과 같은 두 가지 유형의 메타데이터가 저장됩니다: 

Contents of the Catalog Table
Tables

테이블 스키나, 위치 및 상태 정보

Tablets

기존 태블릿의 목록: 각 태블릿의 복제본을 가진 태블릿 서버, 태블릿의 현재 상태 및 시작/종료 키 

Logical Replication

Kudu는 디스크상의 데이터가 아닌 오퍼레이션을 복제합니다. 이를 물리적 복제의 반대 개념인 "논리적 복제(Logical Replication)"이라고 합니다. Kudu가 논리적 복제 방식을 사용함으로써 가지는 이점은 다음과 같습니다: 

  • Insert/Update 작업이 네트워크를 통해 데이터를 전송하지만, Delete 작업의 경우 데이터를 이동할 필요가 없습니다. 즉, 삭제 작업 요청을 실제 데이터를 삭제할 각 태블릿 서버에 전달하면 됩니다.  
  • 압축과 같은 물리적 작업이 Kudu내에서 네트워크를 통해 데이터를 전송할 필요가 없습니다. 이는 구성된 복제본 수를 생성하기 위해 블록을 네트워크를 통해 전송해야하는 HDFS와 구별되는 차이점 입니다.
  • 태블릿을 같은 시점에 동일한 스케쥴을 통해 압축을 실행할 필요가 없으며, 물리적 스토리지 계층에 동기화 상태를 유지할 필요가 없습니다. 이를 통해 모든 태블릿 서버에 압축이나 무거운 쓰기 로드작업이 동시에 집중되어 높은 대시기간이 발생할 확률을 낮춰줍니다. 

Architectural Overview

다음 그림은 3개의 마스터(Master)와 다중 태블릿 서버와 각 태블릿 서버에서는 여러개의 태블릿을 저장하여 서비스를 제공하는 Kudu 클러스터입니다. 또한, Raft Consensus 알고리즘을 통해 마스터와 태블릿 서버의 Leader와 Follower가 선정되어 있는 상태 정보도 확인할 수 있으며, 하나의 태블릿 서버에는 일부 태블릿에 대한 Leader를 보유할 수 있으며 동시에 다른 태블릿에 대한 Follower를 포함하고 있는 것을 확인할 수 있습니다.

Kudu Architectural Overview
Kudu architectural overview

Example Use Cases

Streaming Input with Near Real Time Availability

일반적인 비즈니스 과제는 새로운 데이터의 유입 패턴은 갑작스럽거나 지속적으로 생성되기 때문에 다양한 패턴으로 유입된 데이터를 거의 실시간으로 Read, Scan 및 Update 오퍼레이션을 사용할 수 있어야 한다는 것입니다. Kudu는 단일 스토리지 계층에서 실시간 분석 과제를 수행하도록 빠른 Insert/Update 오퍼레이션 성능을 보장함과 동시에 효율적인 컬럼 기반 스캔 오퍼레이션 기능을 제공합니다. 

Time-Series Application with Widely Varying Access Patterns

시계열(Time-Series) 스키마는 데이터가 발생되는 시간에 따라 구조화되는 데이터입니다. 이와 같은 데이터는 시간 경과에 따른 메트릭 성능을 조사하거나 과거 데이터 기반으로 미래 행동을 예측하는 업무에 적용될 수 있습니다. 예를 들어, 시계열 기반의 고객 데이터는 구매 클릭-스트림 이력을 저장하고 향후 구매 패턴을 예측하는 용도로 활용될 수 있으며, 고객 지원 부서에서 고객 기반의 CRM 업무에 활용할 수 있습니다. 이러한 다른 유형의 분석이 수행되는 동안, 데이터의 입력 및 변경이 데이터 개별적으로 또는 배치 형태로 발생될 수 있기 때문에 읽기 작업 성능에 영향을 미칠 수 있습니다. Kudu는 확장 가능하며 효과적인 방식으로 다양한 접근 패턴을 동시에 수용할 수 있습니다.

Kudu는 시계열 워크로드에 적합한 스토리지입니다. 즉, Kudu의 해쉬-기반 파티셔닝 기능과 복합 행 키(Compound row keys) 지원 기능을 활용하여,  Range 파티셔닝 사용시 일반적으로 발생되는 "hotspotting"의 위험없이 복수 서버에 분산된 테이블 구성을 단순화할 수 있습니다. Kudu의 컬럼형 스토리지 엔진은 시계열 워크로드는 전체 Row에 대한 읽기 작업 대신 업무적으로 필요한 몇 개의 컬럼에 대한 읽기 작업을 요구 하기 때문에 컨텍스트에 유용합니다.

과거 빅데이터 영역에서 다양한 데이터 접근 패턴을 수용하기 위해 여러 데이터 저장소를 사용해야 했습니다(예: HDFS 및 NoSQL). 이는 애플리케이션이나 플랫폼 아키텍처를 복잡하게 만들며, 데이터를 중복으로 저정해야 하는 문제가 발생하였습니다. 즉, Kudu를 활용하면, 다양한 워크로드를 단일 스토리지 영역에서 수용하기 때문에 앞서 언급한 다양한 아키텍처 및 스토리지 활용에 대한 많은 문제를 효율적으로 해결할 수 있습니다.

Predictive Modeling

데이터 과학자들은 일반적으로 대량 데이터를 활용하여 예측 학습 모델을 개발합니다. 모델과 데이터는 데이터 학습이 진행되면서 종종 변경되거나 수정될 필요가 있습니다. 또한, 과학자들은 모델의 하나 이상의 팩터를 변경하여 시간 경과에 따라 어떠한 변화가 발생하는지를 살펴볼 필요가 있습니다. HDFS에 파일 기반으로 저장된 데이터를 업데이트하는 것은 개별 파일들을 새롭게 작성해야 하는 매우 리소스-집약적인 작업입니다. 반면, Kudu에서 데이터 업데이트는 준실시간으로 처리 가능합니다. 즉, Kudu를 활용하여 과학자들은 특정 값을 변경하고 쿼리를 재실행 할 수 있으며, 시간 단위를 테스트별로 조정가능합니다. 또한, 배치나 데이터 추가는 준실시간으로 항상 실행될 수 있습니다. 





'Big DATA' 카테고리의 다른 글

CDP 7.1.4+ - Hive-Kafka 통합  (0) 2021.04.27
Sqoop: Oracle JDBC Driver - Connection reset 에러  (1) 2017.04.11
HBase Authorization  (0) 2017.01.04