2012-12-04 77 views
4

根據Hbase設計,Hbase使用memstore來存儲寫入,並最終在memstore達到大小限制時將其刷新到HDFS。這個沖洗練習是在主題背後自動發生的。Hbase memstore手動刷新

在我的情況下,我想做一個hdfs遷移,從一個集羣遷移到另一個集羣,我需要確保在將源集羣中的hbase進程關閉之前,內存中沒有剩餘內存。無論如何,即使存儲器尚未達到極限,我們也可以手動強制刷新。

==問題補充==

進一步的問題:你怎麼知道刷新完成?通過指標?

回答

9

從shell中你可以做到:flush'tableName' 來刷新memstore。

,但如果你想通過HDFS做/ HBase的/表文件夾的備份做到這一點的方法是: - 禁用表:(從shell:禁用「表名」) - 複製文件:Hadoop的FS -cp/hbase/tableName/hbase-backup/tableName - 啓用表:(從shell:enable'tableName')

或者您可以使用CopyTable或Export工具(http://hbase.apache。 org/book/ops.backup.html)

+0

禁用表格會刷新我假設的內存。 – Shengjie

+0

是的,對不起,禁用表「停止」整個表服務。這意味着memstore刷新,不接受表上的讀或寫,等等。 – th30z

0

由於您要遷移hbase整個數據庫,因此您可能需要執行批量禁用操作:

disable_all '.*' 

這將強制hbase刷新內存並將所有內容寫入HFile。 您還會注意到,即使在禁用之後,您仍然會看到/hbase/WALs下的一些WAL,但不用擔心,這是因爲hbase有一個WAL ttl,即使在衝入HFile之後,WAL也會保留一段時間。
回答你的問題「如何驗證清空完成」:
去HBase的UI - >區域 - >內存
你會看到Memstore Size,確保它們都是「0」。