根据 Hbase 的设计,Hbase 使用 memstore 来存储写入,最终当 memstore 达到大小限制时,它会将其刷新到 HDFS。这个冲洗练习是在主题后面自动发生的。
就我而言,我想做一个 hdfs 迁移,从一个集群迁移到另一个集群,在我关闭源集群中的 hbase 进程之前,我需要确保内存中没有任何剩余。无论如何我们可以手动强制刷新,即使 memstore 没有达到限制。
==添加问题==
进一步的问题:你怎么知道冲洗完成?通过指标?
From the shell you can just do flush 'tableName'
to flush the memstore.
But if you want to do a backup of /hbase/table
folder via hdfs, the way to do that is:
...or you can use the CopyTable
or Export
tools (http://hbase.apache.org/book/ops.backup.html)
由于您要迁移 hbase 整个数据库,因此您可能需要批量禁用:
disable_all '.*'
这将迫使 hbase 清除 memstore 并将所有内容写入 HFiles。您还会注意到,即使在禁用之后,您仍然会在 下看到一些 WAL /hbase/WALs
,但不要担心,这是因为 hbase 有一个 WAL ttl,即使在刷新到 HFiles 之后,它也会将 WAL 保留一段时间。
回答您的问题“如何验证刷新是否完成”:
转到 Hbase UI -> Regions -> Memory
you will see Memstore Size
,确保它们都是“0”。