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
- 10억 건의 문서(10가지 종류)가 있으며, 키 값은 현재 해시값으로써 변경할 수 없음
- ‘contents:url’ Column만을 가지고 필터 기능만으로 1가지 종류의 문서를 얻는 최적의 방법은?
- Solution
- SingleColumnValueFilter(“contents”, “url”, EQUAL, BinaryPrefixComparator(“xxx.tistory.com”))
- Mapper를 이용한 필터링 수행
- Observer Coprocessor
- postPut: 새로운 데이터가 입력되면 ‘contents:url’의 value를 파싱하여 카테고리 결정
- 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를 제공하지 않음
'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 |