테이블을 지우기 전에 되돌릴 지점을 만들어 두고, 필요하면 같은 이름 또는 다른 이름으로 되살린다. 스냅샷은 HFile 을 복사하지 않고 참조만 기록하므로 생성이 빠르고 공간을 거의 쓰지 않는다.
snapshot 'emp', 'emp_snapshot_20250307'
list_snapshots
list_snapshots 'emp.*'
delete_snapshot 'emp_snapshot_20250307'
list_snapshots 는 스냅샷 이름과 원본 테이블, 생성 시각을 함께 출력한다. 셸 밖에서 뽑으려면 echo "list_snapshots" | hbase shell -n 형태를 쓴다.
restore_snapshot 은 대상 테이블을 스냅샷 시점 상태로 덮어쓴다. 스키마와 데이터가 모두 그 시점으로 돌아가므로 스냅샷 이후에 들어온 데이터는 사라진다. 실행 전에 테이블을 disable 해야 한다.
disable 'emp'
restore_snapshot 'emp_snapshot_20250307'
enable 'emp'
원본을 건드리지 않고 비교하거나 일부만 꺼내려면 clone_snapshot 을 쓴다. 새 테이블이 만들어지며 원본은 그대로 남는다. 테이블을 이미 drop 한 뒤라면 restore_snapshot 대신 clone_snapshot 으로 원래 이름을 다시 만드는 편이 확실하다.
clone_snapshot 'emp_snapshot_20250307', 'emp_restored'
hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot \
-snapshot emp_snapshot_20250307 \
-copy-to hdfs://target-nn:8020/hbase \
-mappers 16
내보낸 뒤 대상 클러스터에서 clone_snapshot 또는 restore_snapshot 으로 테이블을 만든다. S3 호환 스토리지로 보낼 때는 -copy-to s3a://bucket/path 를 쓰고, 대상 파일시스템 자격증명은 core-site.xml 에 둔다.
스냅샷은 /hbase/archive 의 HFile 을 참조한다. 스냅샷이 살아 있는 동안에는 그 파일들이 cleaner 에게 지워지지 않으므로, 스냅샷을 방치하면 archive 가 계속 커진다. 반대로 archive 를 수동으로 지우면 스냅샷 복구가 깨진다.
테이블 삭제 절차는 disable 다음 drop 이며, disable 없이 drop 하면 오류가 난다. Kerberos 환경에서는 테이블을 만든 주체와 지우는 주체의 권한이 다르면 권한 오류가 난다.
disable 'emp'
drop 'emp'
exists 'emp'