5

根据 Hbase 的设计,Hbase 使用 memstore 来存储写入,最终当 memstore 达到大小限制时,它会将其刷新到 HDFS。这个冲洗练习是在主题后面自动发生的。

就我而言,我想做一个 hdfs 迁移,从一个集群迁移到另一个集群,在我关闭源集群中的 hbase 进程之前,我需要确保内存中没有任何剩余。无论如何我们可以手动强制刷新,即使 memstore 没有达到限制。

==添加问题==

进一步的问题:你怎么知道冲洗完成?通过指标?

4

2 回答 2

12

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:

  • disable the table: (from the shell: disable 'tableName')
  • copy files: hadoop fs -cp /hbase/tableName /hbase-backup/tableName
  • enable the table: (from the shell: enable 'tableName')

...or you can use the CopyTable or Export tools (http://hbase.apache.org/book/ops.backup.html)

于 2012-12-04T16:19:07.543 回答
1

由于您要迁移 hbase 整个数据库,因此您可能需要批量禁用:

disable_all '.*'

这将迫使 hbase 清除 memstore 并将所有内容写入 HFiles。您还会注意到,即使在禁用之后,您仍然会在 下看到一些 WAL /hbase/WALs,但不要担心,这是因为 hbase 有一个 WAL ttl,即使在刷新到 HFiles 之后,它也会将 WAL 保留一段时间。
回答您的问题“如何验证刷新是否完成”:
转到 Hbase UI -> Regions -> Memory
you will see Memstore Size,确保它们都是“0”。

于 2017-02-14T16:54:37.117 回答