作者:clark010
出處:http://www.reibang.com/u/f9af3f199145
版權(quán):本文版權(quán)歸作者所有
轉(zhuǎn)載:歡迎轉(zhuǎn)載蔑赘,但未經(jīng)作者同意狸驳,必須保留此段聲明缩赛;必須在文章中給出原文連接耙箍;否則必究法律責(zé)任
背景
HBase的snapshot及restore都不涉及文件的移動和拷貝,操作耗時在秒級別酥馍;因為底層依賴的HDFS FileSystem不支持硬鏈接,所以HBase自己實現(xiàn)了一套FileLink的邏輯物喷,每次snapshot都只是進(jìn)行文件的link而不實際移動數(shù)據(jù)卤材,而這保證了snapshot操作的效率(雖然不可避免的需要進(jìn)行一下內(nèi)存flush峦失,但基本最耗時的消耗都在flush這一下)。下面會通過源碼的角度解析一下HBase snapshot的實現(xiàn)术吗。
** 本文基于HBase-1.1.2版本代碼分析 **
整個Snapshot相關(guān)內(nèi)容會分為四篇Blog,本文為第一篇
-
第一篇 - 簡介
- Snapshot命令行
- Snapshot相關(guān)存儲路徑
- 主要Java類
-
第二篇 - Snapshot源碼分析
- Take Snapshot
-
第三篇 - Restore源碼分析
- Restore Snapshot
-
第四篇 - Clone/Delete源碼分析
- Clone Snapshot
- Delete Snapshot
Snapshot命令行
-
list_snapshots
- 列出所有已經(jīng)存在的snapshot
-
snapshot <tableName> <snapshotName> [{SKIP_FLUSH => true}]
- 對table做snapshot
-
clone_snapshot <snapshotName> <tableName>
- 通過某一個snapshot clone一個新表
-
restore_snapshot <snapshotName>
- 從某一個snapshot對表做restore(需要先disable掉相關(guān)的hbase表)
需要注意一下较屿,使用snapshot功能需要在hbase-site.xml打開snapshot開關(guān)
<property>
<name>hbase.snapshot.enabled</name>
<value>true</value>
</property>
更多命令的詳細(xì)介紹可以參考HBase Wiki
Snapshot相關(guān)存儲路徑
/[hbase-root]
|__ .hbase-snapshot 存儲所有snapshot的元信息
|__ .tmp/ snapshot的workDir,臨時數(shù)據(jù)存放
|__ [snapshot name]
|__ .snapshotinfo snapshot的元信息
|__ data.manifest snapshot相關(guān)hfile的元信息
|__ data
|__ [namespace]
|__ [table]
|__ .tabledesc
|__ .tableinfo.[id]
|__ [encode region]
|__ .regioninfo
|__ [column family]
|__ [HFile / Link Files] HBase底層支持HFile及鏈接文件
|__ .links-[regionName] back reference隘蝎,用于快速的刪除無用的引用文件
|__ [ref files]
|__ .....
|__ archive
|__ data
|__ [namespace]
|__ [table]
|__ [encode region]
|__ [column family]
|__ [HFile / Link Files]
|__ WALs / oldWALs / ......
主要Java類
- Client:
-
HBaseAdmin
- 入口類
-
- Master:
-
MasterRpcServices
- 接收Client端的RPC請求 SnapshotManager
-
EnabledTableSnapshotHandler extends TableSnapshotHandler
- 在線表 -
DisabledTableSnapshotHandler extends TableSnapshotHandler
- 離線表 -
ProcedureCoordinator
- 用于提交分布式snapshot事務(wù) Procedure
ZKProcedureCoordinatorRpcs extends ProcedureCoordinator
-
SnapshotFileCache
- 緩存snapshot引用文件,用于判斷文件是否deletable -
SnapshotFileCleaner
- 清理snapshot文件線程
-
- RegionServer:
-
RegionServerSnapshotManager
- 監(jiān)控分布式任務(wù)嘱么,并創(chuàng)建管理具體子任務(wù) FlushSnapshotSubprocedure
-
RegionSnapshotTask
- FlushSnapshotSubprocedure內(nèi)部類 -
HRegion
- 調(diào)用snapshot接口狮含,處理具體的snapshot任務(wù) -
SnapshotManifest
- Utility class to help read/write the Snapshot Manifest -
SnapshotManifestV2/SnapshotManifestV1
- SnapshotManifest內(nèi)存數(shù)據(jù)結(jié)構(gòu)
-