HBase自帶的很多工具可用於管理、分析、修複和調試,這些工具一部分的入口是hbase shell 客戶端,另一部分是在hbase的Jar包中。 目錄: hbck hfile 數據備份與恢復 hbck: hbck 工具用於Hbase底層文件系統的檢測與修複,包含Master、RegionServer ...
HBase自帶的很多工具可用於管理、分析、修複和調試,這些工具一部分的入口是hbase shell 客戶端,另一部分是在hbase的Jar包中。
目錄:
- hbck
- hfile
- 數據備份與恢復
- Snapshots
- Replication
- Export
- CopyTable
- HTable API
- Offline backup of HDFS data
hbck:
- hbck 工具用於Hbase底層文件系統的檢測與修複,包含Master、RegionServer記憶體中的狀態及HDFS上數據的狀態之間的一致性、黑洞問題、定位元數據不一致問題等
- 命令: hbase hbck -help 查看參數幫助選項
- 命令: hbase hbck -details 顯示所有Region的完整報告
- 命令: hbase hbck -metaonly 只檢測元數據表的狀態,如下圖:
- 快捷修複命令:
- 命令:hbase hbck -repair -ignorePreCheckPermission
- 命令:hbase hbck -repairHoles -ignorePreCheckPermission
- 應用示例,參見:HBase(三): Azure HDInsigt HBase表數據導入本地HBase
hfile:
- 查看HFile文件內容工具,命令及參數如下:
- 命令:hbase hfile -p -f /apps/hbase/data/data/default/PerTest/7685e6c39d1394d94e26cf5ddafb7f9f/d/3ef195ca65044eca93cfa147414b56c2
- 效果如下圖:
數據備份與恢復:
- 常用的備份恢復方法如下圖:參考文檔: http://blog.cloudera.com/blog/2013/11/approaches-to-backup-and-disaster-recovery-in-hbase/
snapshots:
- HBase快照功能豐富,有很多特征,創建時不需要關閉集群
- 快照在幾秒內就可以完成,幾乎對整個集群沒有任何性能影響。並且,它只占用一個微不足道的空間
- 啟用快速需設置 hbase-site.xml 文件的 hbase.snapshot.enabled 為True
- 命令: snapshot 'PerTest','snapPerTest' 基於表 PerTest 創建名為 snapPerTest 的快照
- 命令: list_snapshots 查看快照列表
- 創建完快照後,在hbase 目錄下會生成 .hbase-snapshots 目錄,存放快照信息,如右下角圖
- 命令:delete_snapshot 'snapPerTest' 刪除快照
- 恢復快照需要對錶進行離線操作。一旦恢復快照,那任何在快照時刻之後做的增加/更新數據都會丟失,命令如下:
disable 'PerTest' restore_snapshot 'snapPerTest' enable 'PerTest'
-
命令:clone_snapshot 'snapPerTest','PerTest1' 根據快照clone新表(註:clone出來的新表不帶數據副本)
- ExportSnapshot tool 快照導出工具命令: hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot 'snapPerTest' -copy-to /apps/hbase/data/zhu
- 註意: 如果能訪問到另一集群,則後面的地址可直接改為另一集群hdfs目錄
- 導出的文件結構如下
Replication:
- HBase replication是另外一個負載較輕的備份工具。被定義為列簇級別,可以工作在後臺並且保證所有的編輯操作在集群複製鏈之間的同步
- 複製有三種模式:主->從(master->slave),主<->主(master<->master)和迴圈(cyclic)。這種方法給你靈活的從任意數據中心獲取數據並且確保它能獲得在其他數據中心的所有副本。在一個數據中心發生災難性故障的情況下,客戶端應用程式可以利用DNS工具,重定向到另外一個備用位置
- 註:對於一個存在的表,你需要通過本文描述的其他方法,手工的拷貝源表到目的表。複製僅僅在你啟動它之後才對新的寫/編輯操作有效
- 複製是一個強大的,容錯的過程。它提供了“最終一致性”,意味著在任何時刻,最近對一個表的編輯可能無法應用到該表的所有副本,但是最終能夠確保一致。
Export:
- Export是HBase一個內置的實用功能,它使數據很容易將hbase表內容輸出成HDFS的SequenceFiles文件
- 使用map reduce任務,通過一系列HBase API來獲取指定表格的每一行數據,並且將數據寫入指定的HDFS目錄中
- 示例說明:集群A:基於HDInsight創建的windows系統下的hbase 集群, 集群B 基於Azure 虛擬機創建的liunx系統下 hbase集群,將A集群中表StocksInfo表導出至集群B的hdfs目錄,遺憾的是兩個集群無法通信,只能先導到本地,再手工上傳
- 命令語法: hbase org.apache.hadoop.hbase.mapreduce.Export <tablename> <outputdir> 示例如下:
- 導出的文件結構如下:
- 命令:hdfs dfs -get /zhu c:/zhu 下載到A集群某節點c盤,手工上傳至liunx,如下圖
- 使用import命令導入數據至B集群HBase表,如下:(註:輸入目錄的文件必須是Export命令導出的文件格式)
- 命令語法:hbase org.apache.hadoop.hbase.mapreduce.Import <tablename> <inputdir> 如下圖:
- 查看Hbase 表,如下圖則OK
copyTable:
- 和導出功能類似,拷貝表也使用HBase API創建了一個mapreduce任務,以便從源表讀取數據。不同的地方是拷貝表的輸出是hbase中的另一個表,這個表可以在本地集群,也可以在遠程集群
- 它使用獨立的“puts”操作來逐行的寫入數據到目的表。如果你的表非常大,拷貝表將會導致目標region server上的memstore被填滿,會引起flush操作並最終導致合併操作的產生,會有垃圾收集操作等等
- 必須考慮到在HBase上運行mapreduce任務所帶來的性能影響。對於大型的數據集,這種方法的效果不太理想
- 命令語法:hbase org.apache.hadoop.hbase.mapreduce.CopyTable --new.name=PerTest2 PerTest (copy名為PerTest的表到集群中的另外一個表PerTest2) 如下圖
- 註意:若用到--new.name =xxx,首先這個新表要之前就被定義
Offline backup of HDFS data: