파이문

HBase META 테이블 본문

NoSQL/HBase

HBase META 테이블

민Z 2020. 10. 23. 00:41

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:splitAinfo: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
Comments