Hbase
Hbase란?
Hbase는 hdfs위에 있는 Storage Engine으로 Parquet와 Kudu와 비교하여 Full scan보다는 Random Access 기반의 Read/Insert 작업에 특화되어 있습니다. 또한 Column-oriented DB로 칼럼 접근이 빠르고, sorted map형식으로 물리적으로 데이터가 저장되기 때문에 순차탐색에 유리합니다.
추가적으로 Hbase를 비롯한 대부분은 NoSQL이 Write performance가 빠른이유가 바로 LSM Tree 기반이기 때문입니다.
Memory에서 memTable이 self balancing binary tree로 구조 가져가 있어서 sorted된 형태로 데이터를 유지합니다. 해당 형태를 기준으로 특정 기준이 되면 disk에 flush하며 append-only이기 때문에 굉장히 빠릅니다. 너무 많은 Sorted String Table(disk 영역, Hfile) 파일이 생기게 되면 key를 찾는데 오래걸림으로 지속적으로 compaction과정을 거칩니다.
Hbase Random Access 유리한 이유?
Hfile의 안에는 다수의 Datablock, Trailer등으로 구성 되어있습니다. Client가 Region을 찾았더라도, 다수의 Hfile을 확인해봐야하는데 이러한 것을 I/O amplification이라고 합니다. 이를 해결하기 위해 Hfile은 Mulit-layered Index(RDB의 index테이블 개념이 아닌, b+트리)구조입니다.
또한 그림과 같이 볼 수 있듯이 memstore에 저장할 때부터 key,value로 저장할 시, sorted하게 저장하게 됩니다.
즉, Multi-layered Index와 BloomFilter통해서 Random Access가 빠릅니다.
Hbase Data Model
Hbase는 Table, Rowid, Column(ColumnFamilies, Column Qualifier), Timestamp로 구성되어 있으며
하나의 ColumnFamilies는 하나의 region에 물리적으로 같이 저장되어 데이터 처리 시 빠르게 접근 가능합니다.
데이터 Wrtie&Read mechanism
Write 작업 시, KUDU와 비슷하게 WAL/Memstore(memory) -> flush(memstore 꽉차면) -> Hfile(disk)에 저장하게 되는데 하나의 Hfile에 ColumnFamily가 저장되게 됩니다. Read 작업 시에는 bloom filters와 BlockCache(memory, LRU기반) 통해서 데이터를 우선 찾기 때문에 low-latency의 가장 큰 요인입니다.
Read & Wrtie 작업 시 Client가 Hmaster 통해서 metadata를 얻지 않고, Hbase는 Catalog Table을 Zookeeper에 META 테이블을 저장해둡니다. 해당 테이블 안에 Region별 테이블, relica 등 정보가 다 있어서 client가 처음에 request후 cache하여 해당 Region에 접근합니다. 만약, Region이 down, Load balance 등으로 메타데이터가 변경되면 다시 META테이블을 캐싱하여 작업을 하게 됩니다.
Hmaster & Zookeeper 역할
Hmaster : RegionServer들을 모니터링(zookeeper로 부터 regionserver가 다운되었는지 noti를 기다립니다.), DDL 작업, Load Balancing, RegionServer가 down 시에 zookeeper의 도움을 받아 Recovery 작업을 진행하게 됩니다.
Zookeeper : RegionServer heartbeat, Hmaster HA, .META 테이블 관리(Hbase Catalog Table)
Reference
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=talag&logNo=221019176724
https://nesoy.github.io/articles/2019-10/Hbase-Data-Model
https://nag-9-s.gitbook.io/hbase/hbase-architecture/fault-tolerance
https://velog.io/@andrewchea/HBase-Bloom-Filter
https://data-flair.training/blogs/hbase-architecture/
https://www.linkedin.com/pulse/hbase-how-deep-we-can-learn-chaaranpall-lambba/