Kudu

[기초] Kudu 기본 개념

Sencia 2021. 3. 30. 16:12
반응형

KUDU 개념

  • 컬럼 베이스 DB 
  • PK 기반 동작 / PK 관련 질의 속도 빠름 
  • 랜덤액세스, 순차읽기에 빠른 속도 
  • 컬럼별 인코딩 타입, 압축 타입 설정 가능
  • upsert, delete 가능 

 

master server와 tablet server로 구성 
데이터는 tablet으로 불리고 replication group을 kafka처럼 leader, follower 그룹으로 관리 
partition을 어떻게 지정하느냐에 따라 tablet이 나뉘게 되고 고르게 분배할 수 있는 key를 설정해야 고르게 데이터 분포 가능 

 

 

Kudu의 특징 

1) 컬럼 베이스 DB 

kudu의 가장 큰 특징 중 하나로 한 테이블이 갖고 있는 칼럼의 인코딩 타입과 압축 타입을 별도 설정할 수 있다. 
데이터의 크기, 형태에 따라 알맞은 인코딩, 압축 타입을 설정하면 데이터 저장 측면에서도, 읽는 속도 측면에서도 장점이 있다. 

다만, 올바른 타입을 설정했을때의 장점이고 잘 사용하려면 각 케이스별로 어떻게 설정해줄지에 대한 기준이 필요하다. 

칼럼 인코딩 방식  기본값
int8, int16, int32 Plain Encoding, Bitshuffle Encoding, Run Length Encoding Bitshuffle Encoding
int64, unixtime_micros Plain Encoding, Bitshuffle Encoding, Run Length Encoding Bitshuffle Encoding
float, double Plain Encoding, Bitshuffle Encoding Bitshuffle Encoding
bool Plain Encoding, Run Length Encoding Run Length Encoding
string, binary Plain Encoding, Prefix Encoding, Dictionary Encoding Dictionary Encoding

 

2) PK 기반 동작 == 랜덤 액세스 속도 좋음 

일반 DBMS처럼 primary key를 제공해 랜덤 액세스 속도가 매우 빠르다는 점이다. Kudu의 primary key는 내부적으로 B+ 트리로 저장돼 있어 대규모 데이터에서도 primary key를 사용해 매우 빠르게 데이터에 접근할 수 있다. 수백억 건의 레코드에서도 primary key로 접근하는 데는 수 밀리초밖에 걸리지 않는다. 

* 참고 1) 블로그에서 발췌 

kudu와 parquet의 성능 비교는 다음 url을 참고해본다. kudu.apache.org/kudu.pdf

출처: https://kudu.apache.org/kudu.pdf

KUDU는 Apache parquet과 hbase의 중간 정도에 위치하고 있다.
특히 PK인 칼럼에 있어서는 굉장히 빠른 읽기 속도를 갖고 있다. 

 

3) 대규모 순차 읽기 최적화 

Parquet와 비슷하게 대규모 순차 읽기(sequential reading)에 매우 최적화돼 있다는 점이다. 데이터가 Bit-packing 방식이나 Run-length 방식을 사용해 효율적으로 인코딩돼 있기 때문에 순차 읽기 속도가 빠르다. 또한 Intel의 CPU에 최적화돼 있어 명령어 수준(instruction level)에서 데이터를 매우 빠르게 처리할 수 있다(SSE 4.2를 지원하는 Nehalem 이상의 CPU 필요).

* 참고 1) 블로그에서 발췌 


단일 태블릿(데이터)은 아래 요소들로 구성된다.

  • 단일 MemRowset(MRS)
  • 여러 개의 DiskRowsets (DRS)

MemRowset

위 그림은 2019년 클라우데라 웨비나 중 "Apache kudu를 이용한 실시간 워크로드 최적화" 세션의 자료에서 발췌
* 참고 5) 


● 단일 MemRowset (MRS)
    ○ 최근 삽입 된 행의 Landing zone 
    ○ Row-oriented B + 트리
    ○ 주기적으로 컬럼 포맷에서 disk로 flush (1GB마다/2분마다) 

 

위 그림은 2019년 클라우데라 웨비나 중 "Apache kudu를 이용한 실시간 워크로드 최적화" 세션의 자료에서 발췌
* 참고 5) 


● 여러 개의 DiskRowsets (DRS)

    ○ Primarykey
    ○ bloom filters
    ○ PK index 
    ○ Columnar data(Cfiles) 
    ○ In-memory DeltaMemstore(DMS) / 주기적으로 disk로 flush 
    ○ on-disk DeltaFiles  

 

4) Fault Tolerance 

Kudu는 기본적으로 replication을 3으로 유지한다. 복제본에 손실이 발생한 경우 몇 초 내에 스스로 복제하여 복제본의 수를 유지한다. 
이 복제 작업은  Raft 합의 알고리즘을 사용한다. 

 

 

본 편은 기본 개념에 대한 설명을 했고 후속편에 파티셔닝, 실제 data를 read, write하는 절차 등을 서술할 예정이다. 

 

참고 

1)  d2.naver.com/helloworld/9099561

2) kudu.apache.org/overview.html

3) kudu.apache.org/kudu.pdf

4) raft.github.io/

5) 2019년 클라우데라 웨비나 세션 중 "Apache kudu를 이용한 실시간 워크로드 최적화"

optimizing your realtime workfloads with kudu.pdf
3.37MB


 

반응형

'Kudu' 카테고리의 다른 글

[Kudu] Apache Ranger로 권한 제어  (0) 2021.04.13
[kudu] 3편 - Scaling cluster  (0) 2021.04.06
[kudu] 2편 - Schema, Compaction, Disk, Memory  (0) 2021.04.06
[kudu] 1편 - write, read, partition  (0) 2021.03.30
[사례] kudu X 카카오뱅크  (0) 2021.03.29