# HBase
------------
1. 정의 : HDFS에 구현한 분산 컬럼 기반 database
2. hiostory :
- 2006년 말 : 구글의 빅테이블(구조화된 데이터용 분산 스토리지 시스템)을 모델 을 기반으로 시작
- 2007년 10월, HBase 배포판 open
- 2010년 5월, 하둡 서브프로젝트 > 아파치 최고 수준 프로젝트 로 등록
- 도입 사례 : 어도비, 스텀블 어폰, 트위터, 야후 등
3. pre requirements
- java 7 이상
4. architecture
- feature
- Master - Slaver(region server) 구조 이다
- Zookeeper : 분산 시스템 코디네이터
- region 단위로 auto sharding 을 지원
5. 데이터 모델
- Table
- Row들의 집합 (Row Key가 있으며 다수의 column family로 구성)
- Schema 정의서 Column Family 만 정의
- Row Key
- 임의의 Byte열로 사전순으로 내림차순 정렬
- 빈 Byte문자열은 테이블의 시작과 끝을 의미
- 문자열, 정수 바이너리, 직렬화된 데이터 구조까지 어떤 것도 로우키가 될 수 있다
- Column Family
- Column들의 그룹으로 모든 컬럼패밀리의 Member는 같은 접두사를 사용
- NOSQL:Cassandra와 NOSQL:HBASE 는 NOSQL이라는 컬럼 패밀리의 멤버컬럼
- 컬럼패밀리 접두사는 반드시 표시할 수 있는 문자로 구성
- 테이블 스키마에서 정의의 한 부분을 먼저 지정해야 한다
- 모든 컬럼패밀리 멤버는 물리적으로 파일시스템에서 함께 저장
- 새로운 컬럼패밀리 멤버는 동적으로 추가가능
- Cell
- ROW KEY & Column & Version이 명시된 튜플
- 값은 임의의 Byte열이며 Timestamp
- 테이블 셀은 버전관리 된다 (오직 셀들만)
6. 논리 스토리지 구조
- 하나의 key-value (column)에 대한 data block
- Row key : sharding key 이면서 유일한 key
- Column Quailifier : 컬럼 명
- row size 계산
- physical key 에 해당하는 고정 값 들의 byte 합이 기본으로 저장된다
- 따라서 rowkey, column family name, column qualifier 의 이름은 짧게 유지하는 것이 좋다
6. Sharding 기준
- Row key 기준으로 Range Sharding 방식을 따른다
- Row range 단위로 물리 Region 을 생성
- Region 을 RegionServer 로 분산하여 관리
7. write / read 방식
- write
- step 1 : wal 파일에 transaction 정보 입력
- step 2 : memstore 에 데이터 기록 후 client 에 결과 return
- step 3 : memstore full 시 disk 에 write
- step 4 : disk compaction
- read
- step 1 : read from memstore
- step 2 : step 1 에서 결과를 받지 못하였을 때, read from block cache
- step 3 : step 2 에서 결과를 받지 못하였을 때, read from disk
(block cache write 이후에 client 에게 전달)
8. replication
- master - slave replication : master(write) <- sync - slave
- master - master replication (== peer to peer) : 각각이 master 로 write 실행
- cyclic replication : write node <- replica - other node
- request 에 따라 매번 다른 node 에 write 를 요청하며 write 가 일어난 node 를 다른 node 에서 replication 한다
9. consistency level
- write consistency : wal 파일과 memstore 에 저장 성공이면 replica 의 성공여부와 상관없이 success
- read consistency : 선택한 하나의 node 에서 read 요청
(== cassandra 의 ONE level 과 유사)
10. DR 아키텍쳐
- cluster 간 replication
- master cluster 는 wal reader 가 wal 파일 을 읽어 waledits 형태로 전송 준비를 함
- replication 우선순위 queue 에 waledits 를 저장
- slave cluster 는 queue 에서 오래된 waledits 부터 비동기 방식으로 순차적으로 처리
- zookeeper 역할
- slave cluster 등록
- replication 시작/중지
- queue 에 wal 등록
- region server 의 장애 핸들링
참조
https://hbase.apache.org/book.html
http://wiki.gurubee.net/display/DEVSTUDY/NoSQL+HBase