'Development'에 해당되는 글 32건

 

HBase CRUD

 

 
  • Data Write (Put)
    • 동일 Row에서 원자성 보장 (실패 시 연산은 버림)
    • 데이터는 먼저 WAL(HDFS)에 저장된 후 MemStore에 저장
  • Data Read (Get)
    • BlockCache, MemStore에서 먼저 검색 후 HDFS의 StoreFile을 탐색함
  • Data Delete
    • “Tombstones Marker”를 표시하여, 탐색 시 반환되지 않도록 함 (HDFS 때문)
    • Marker가 표시된 삭제 대상은 Major Compaction 과정 중 영구 삭제
    • 일괄처리 시에는 순서가 보장되지 않아 Delete와 Put 연산을 섞지 않는 것이 좋음
  • Schema Update
    • 만약 테이블이나 CF가 업데이트 되는 경우 (Region 크기, Block 크기 등)
      Major Compaction 과정에서 StoreFile이 다시 구성됨
  • Join
    • HBase는 지원하지 않으며, MapReduce를 이용한 Join 기능 구현을 권장함

 

 

Scan

 

 
  • BlockCache-MemStore-HFile 순으로 탐색, DB의 Cursor와 유사함

 

  • 캐싱과 일괄처리의 조합으로 RPC 횟수를 줄일 수 있음
    • 캐싱: 한번의 Result (next())로 반환 받을 수
    • 일괄처리: 한 번에 처리할 Column 수 (Result 인스턴스 수)
    • RPCs = (Rows * Cols per Row) / Min (Cols per Row, Batch Size) / Scanner Caching

캐싱

일괄처리

결과

RPC

1

1

200

201

200

1

200

2

2

10

20

11

5

100

10

3

5

20

10

3

10

10

20

3

 

 

 

20 Column, 10 Row

 

 

 

  • 비교 필터
    • BinaryComparator
    • BinaryPrefixComparator
    • LongComparator
    • NullComparator
    • RegexStringComparator: pattern match
    • SubstringComparator: contains() check
 
  • 비교 연산자
    • LESS (<)
    • LESS_OR_EQUAL ()
    • EQUAL (=)
    • NOT_EQUAL (!=)
    • GREATER_OR_EQUAL (>=)
    • GREATER (>)
    • NO_OP (no operation)

 

 

  • Key Filter (6 / 25)
    • RowFilter / PrefixFilter / RangeFilter
    • FirstKeyOnlyFilter: 모든 Row에서 첫번째 KeyValue 리턴
    • FirstKeyValueMatchingQualifiersFilter: KeyValue에 해당되는 첫번째 Column을 리턴
    • MultiRowRangeFilter: 다수 Key 범위를 이용한 Row Scan 수행
 
  • Column Filter (9 / 25)
    • FamilyFilter / QualifierFilter / TimstampsFilter
    • ColumnCountGetFilter: 모든 Row에서 처음 N개의 Column만 리턴(Get)
    • ColumnPaginationFilter: 모든 Row에서 limit과 offset에 해당되는 Column만 리턴
    • ColumnPrefixFilter: 모든 Row에서 prefix와 매칭되는 Column과 Key를 리턴
    • MultipleColumnPrefixFilter: 다수 Prefix를 이용한 ColumnPrefixFilter 수행
    • ColumnRangeFilter: 모든 Row에서 범위에 해당되는 Column과 Key를 리턴
    • DependentColumnFilter: 참조 Column의 처리를 정의함

 

  • Value Filter (3 / 25)
    • ValueFilter
    • SingleColumnValueFilter: Value를 기반으로 매칭하여 Cell을 리턴
    • SingleColumnValueExcludeFilter: 매칭된 결과를 제외하고 리턴
 
  • Others (7 / 25)
    • FuzzyRowFilter: 표현법에 따라 매칭된 Key, Fuzzyinfo를 리턴하고 스킵을 지원
    • InclusiveStopFilter: 일치하는 Row 이후에 스캔을 멈추기 위한 필터
    • RandomRowFilter: 랜덤으로 매칭되는 Row를 반환함 (Sampling으로 활용 가능)
    • SkipFilter: 다른 필터의 Wrapper로 사용되어 해당 필터 결과를 Skip하고 리턴
    • WhileMatchFilter: 다른 필터의 Wrapper로 사용되어 해당 필터와 매칭될 때까지 리턴
    • KeyOnlyFilter: 스캔 결과를 Key 값만 리턴
    • CustomFilter: FilterBase를 상속받아 구현

 

  • 예제
    • 단일 Column 대상의 필터링을 OR 연산으로 수행하여, “my value”와 같거나 “my other value”와 같은 Column을 걸러내고자 함

 

 

 

  • Problem
    1. 10억 건의 문서(10가지 종류)가 있으며, 키 값은 현재 해시값으로써 변경할 수 없음
    2. ‘contents:url’ Column만을 가지고 필터 기능만으로 1가지 종류의 문서를 얻는 최적의 방법은?
  • Solution
    1. SingleColumnValueFilter(“contents”, “url”, EQUAL, BinaryPrefixComparator(“xxx.tistory.com”))
    2. Mapper를 이용한 필터링 수행
    3. Observer Coprocessor
      • postPut: 새로운 데이터가 입력되면 ‘contents:url’의 value를 파싱하여 카테고리 결정
    4. Endpoint Coprocessor
      • Micro-batch 방식으로 주기적인 카테고리 데이터 생성

 

Coprocessor

 

 
  • RS에서 이벤트 발생에 반응하거나 대량의 데이터를 원격지에서 처리 후 반환하기 위한 보조 처리 도구
    • Observer Coprocessor
      • ‘pre’와 ‘post’로 구분되는 전처리/후처리 메소드를 작성함
      • 연산(Put, Get 등)에 대한 Security, Referential Integrity, Secondary Index 등을 수행
      • RegionObserver, RegionServerObserver, WALObserver, MasterObserver
    • Endpoint Coprocessor
      • 다중 Region에 걸친 Table에 대해 평균, 총합 등을 구현할 수 있음
      • Coprocessor / CoprocessorService를 구현한 후 Dynamic/Static Loading으로 Table에 대한 서비스를 구동
  • 하지만 Coprocessor를 업데이트하기 위해서는 RS를 재시작해야하며, Logging API를 제공하지 않음

 

 

참조: HBase: The Definitive Guide

'Development > Hadoop' 카테고리의 다른 글

HBase Region Split Policy  (0) 2019.01.30
HBase 공부 - Tuning, Monitoring  (0) 2019.01.24
HBase 공부 - HBase의 특징과 구조  (1) 2019.01.24
하둡 공부 - Yarn Scheduler  (0) 2019.01.24
하둡 공부 - Apache Hadoop 3.0.0  (0) 2019.01.24
블로그 이미지

나뷜나뷜

,