根据hbase的设计,hbase使用memstore来存储写操作,最终当memstore达到大小限制时,它会将其刷新到hdfs。这个冲水练习是在主题后面自动进行的。在我的例子中,我想做一个hdfs迁移,从一个集群迁移到另一个集群,在关闭源集群中的hbase进程之前,我需要确保内存中没有剩余的东西。不管怎样,我们可以手动强制刷新,即使memstore还没有达到限制。==添加的问题==进一步的问题:你怎么知道冲水完成了?通过指标?
w1e3prcc1#
由于要将hbase迁移到整个数据库,因此可能需要执行批禁用:
disable_all '.*'
这将迫使hbase清除memstore并将所有内容写入hfiles。你也会注意到,即使在禁用后,你仍然会看到一些WAL下 /hbase/WALs ,但别担心,这是因为hbase有一个wal ttl,它可以将wal保存一段时间,即使在刷新到hfiles之后也是如此。要回答您的问题“如何验证刷新是否完成”:转到hbase ui->区域->内存你会看到的 Memstore Size ,确保它们都是“0”s。
/hbase/WALs
Memstore Size
c86crjj02#
在shell中,您只需执行以下操作:flush'tablename'来刷新memstore。但是,如果要通过hdfs备份/hbase/table文件夹,方法是:-禁用表:(从shell:禁用“tablename”)-复制文件:hadoop fs-cp/hbase/tablename/hbase backup/tablename-启用表:(从shell:启用“tablename”)也可以使用copytable或export工具(http://hbase.apache.org/book/ops.backup.html)
2条答案
按热度按时间w1e3prcc1#
由于要将hbase迁移到整个数据库,因此可能需要执行批禁用:
这将迫使hbase清除memstore并将所有内容写入hfiles。你也会注意到,即使在禁用后,你仍然会看到一些WAL下
/hbase/WALs
,但别担心,这是因为hbase有一个wal ttl,它可以将wal保存一段时间,即使在刷新到hfiles之后也是如此。要回答您的问题“如何验证刷新是否完成”:
转到hbase ui->区域->内存
你会看到的
Memstore Size
,确保它们都是“0”s。c86crjj02#
在shell中,您只需执行以下操作:flush'tablename'来刷新memstore。
但是,如果要通过hdfs备份/hbase/table文件夹,方法是:-禁用表:(从shell:禁用“tablename”)-复制文件:hadoop fs-cp/hbase/tablename/hbase backup/tablename-启用表:(从shell:启用“tablename”)
也可以使用copytable或export工具(http://hbase.apache.org/book/ops.backup.html)