파이문

HBase TTL 본문

컴퓨터 과학/분산 시스템 및 빅데이터

HBase TTL

민Z 2020. 10. 20. 19:43
728x90

컬럼 패밀리에는 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.

 

참고

Comments