일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 주키퍼
- DP
- gradle
- Python
- scala
- codewars
- 튜토리얼
- redis
- 알고리즘
- Go언어
- go
- Linux
- 자바
- 프로그래머스
- 리눅스
- Java
- docker
- leetcode
- 코드워
- OOM
- programmers
- dynamic programming
- golang
- 파이썬
- boj
- 스칼라
- 문제풀이
- zookeeper
- HBase
- 동적프로그래밍
- Today
- Total
파이문
HBase META 테이블 본문
Catalog Table
hbase shell 에서 list
명령어를 치면 안나와서 헷갈릴 수 있지만 hbase:meta 도 다른 테이블 처럼 그냥 테이블 중에 하나이다.
원래 -ROOT-
라는 테이블도 있었는데 버젼이 업데이트(0.96 이상 부터) 되면서 삭제 되었다. (참고 issues.apache.org/jira/browse/HBASE-3171)
(현재 가장 유명한? HBase 책인 HBase 완벽가이드가 버젼이 0.92이여서 -ROOT-
라는 테이블 정보가 아직 있어서 헷갈렸다. 새 책 언제 나오나요?!!오라일리!!)
hbase:meta
이전에는 .META.
라고 불렸던 hbase:meta
테이블은 모든 리젼에 대한 정보를 가지고 있다. 그리고 이 hbase:meta
는 주키퍼에 저장되어 있다.
hbase:meta
테이블 구조는 다음과 같다.
key
[table],[region start key],[region id]
형식으로 되어 있다.
values
info:regioninfo
region 인스턴스 (HRegionInfo) 가 직렬화되어 저장되어 있다.info:server
region 정보가 있는 regionServer 의 server:port 정보가 있다.info:serverstartcode
region 정보가 있는 regionServer 의 시작 시간이 있다.
테이블이 분리될 때 info:splitA
와 info:splitB
라는 두 개의 컬럼이 생성된다. 이 컬럼은 두개의 자식 리젼을 의미하고 Region 이 분할 되면 이 row 들도 삭제 된다.
# 이런식으로 정보 확인 가능
hbase(main):004:0> scan 'hbase:meta'
HBase 부트 시 주키퍼에서 hbase:meta
위치를 찾고 hbase:meta
는 server 와 startcode 값을 업데이트 한다.·
(주키퍼에서 /hbase/meta-region-server
라는 곳에 위치해 있다.)
META 데이터 활용
META 테이블에는 region 정보가 있고 META 정보는 zookeeper 에 있는 것이다.
클라이언트는 쿼리할 때 Master 랑 통신하는게 아니고 최초에 META 테이블을 봐서 region 정보를 캐싱하고 region/regionServer 정보를 알기 때문에 RegionServer 와 직접 통신하게 된다.
Region 이 분리되거나 하면 다시 META 테이블에 접근하여 캐싱했었다 (!!!)
그런데 3.0.0 버젼 이후 부터는 이 로직이 조금 바뀌었다.
예를 들어 region 이 다른 regionServer 로 가게 되는 경우 클라이언트는 Master 랑 통신해야 한다.
(참고 hbase.apache.org/book.html#client.masterregistry)
참고
'NoSQL > HBase' 카테고리의 다른 글
HBase Region 할당 순서 (0) | 2020.10.23 |
---|---|
HBase 기본 명령어 (0) | 2020.09.25 |