2012-12-04 107 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”。