일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- boj
- 리눅스
- 코드워
- 스칼라
- OOM
- codewars
- 동적프로그래밍
- dynamic programming
- 알고리즘
- redis
- DP
- 문제풀이
- docker
- golang
- zookeeper
- Python
- leetcode
- Java
- 튜토리얼
- HBase
- programmers
- scala
- 파이썬
- 주키퍼
- 자바
- 프로그래머스
- Linux
- go
- Go언어
- gradle
- Today
- Total
파이문
HBase TTL 본문
컬럼 패밀리에는 TTL 이라는 값을 초 단위로 세팅할 수 있다.
그러면 HBase 는 자동으로 expiration time (TTL) 에 다다른 row 는 삭제 한다. 이 삭제 작업은 모든 버젼의 row 에 해당한다. (HBase row 에는 여러 버젼이 있다. 조회 시에 나오는 값은 가장 최신 버젼의 데이터이다.)
TTL 시간 값은 인코딩 되어 있고 UTC 값이다.
컬럼 패밀리에 TTL 거는 예
hbase(main):002:0> create 'ttl_demo', {'NAME' => 'cf','TTL' => 20}
# 아님 요렇게도 가능하다. (결과는 같다.)
hbase(main):003:0> alter 'ttl_demo', NAME => 'cf', TTL => 20
Store file(HFile) 에는 expire 된 row 만 있는데 마이너 컴팩션(?!) 때 삭제 된다. hbase.store.delete.expired.storefile
값을 false 로 두면 이 작업은 disable 된다. 0 보다 작은 값으로 설정되어도 disable 된다.
셀 TTL 도 있는데 컬럼 패밀리 TTL 보다는 클 수 없다. (그리고 밀리세컨드 단위로 표현된다.)
(셀은 row, column, version 을 합친 값이다.)
TTL 은 마이너 컴팩션 때 삭제 된다?
사실 HBase 에서 Delete 연산을 해도 바로 삭제 되진 않는다. 툼스톤 마커라는 값을 사용해서 Scan 이나 Get 시에 조회가 되지 않게 하는 것일 뿐이다. (실제 삭제가 아니라 삭제 된 것 처럼 보여주지 않는 방식) 그리고 실제로 삭제 되는 시점은 Major 컴팩션 때 삭제가 된다.
이 때문에 TTL 로 된 것도 어떤 마킹을 하고 메이저 컴팩션때 삭제 되는 줄 알았는데 알고보니 TTL 만료된 데이터는 마이너 컴팩션 때 삭제 된다고 한다. TTL 은 툼스톤 마커를 만들지 않고 단지 필터링 될 뿐이다.
그런데 이 부분이 블로그, 문서 마다 조금씩 달라서... 헷갈리긴 한다 ㅠㅠ
그니까.. TTL 로 설정된 데이터는 툼스톤 마커 처럼 필터링 되고 실제 삭제는 마이너 컴팩션때 일어난다는...걸까..?
일단은 레퍼런스 가이드엔 요렇게 적혀 있다.
ColumnFamilies can set a TTL length in seconds, and HBase will automatically delete rows once the expiration time is reached. This applies to all versions of a row - even the current one. The TTL time encoded in the HBase for the row is specified in UTC.
Store files which contains only expired rows are deleted on minor compaction.
f the deletion happens because of an expired TTL, no tombstone is created. Instead, the expired data is filtered out and is not written back to the compacted StoreFile.
참고
- hbase.apache.org/book.html#ttl
- hbase.apache.org/book.html#compaction
- community.cloudera.com/t5/Support-Questions/Does-TTL-in-Hbase-require-Major-Compaction/td-p/214167
- www.quora.com/What-happens-in-HBase-when-a-TTL-has-been-set-up-on-a-column-family-but-external-non-time-related-versions-are-stored-in-the-timestamp-field
'컴퓨터 과학 > 분산 시스템 및 빅데이터' 카테고리의 다른 글
consensus algorithms (0) | 2020.01.31 |
---|---|
[Zookeeper] 주키퍼를 통한 리더 선출 (0) | 2019.10.09 |
주키퍼 (Zookeeper) 살펴보기 (0) | 2019.09.22 |
Split Brain 이란? (0) | 2019.09.22 |
복제(replication)와 샤딩(sharding) (0) | 2019.06.16 |