【问题标题】:How to flush the table in HBase如何刷新 HBase 中的表
【发布时间】:2017-05-26 11:27:41
【问题描述】:

我使用 HBase(客户端为 0.98,服务器为 HBase 1.1.2),底层数据存储为 HDFS。

我尝试使用以下代码刷新表,并且能够看到数据刷新到 Hadoop 中的 HFile 位置。

            htable.put(puts);
            htable.close();
            admin.flush(tableName);

Hadoop 中的数据位置

./hadoop fs -du /hbase/data/default/tableName/ 

当我关闭电源并重新启动节点时,重新启动 Hadoop 和 HBase 能够看到 HDFS 中的数据已损坏。

如果数据正确刷新到 HFile,为什么它会在断电期间损坏。

我需要对刷新表的代码进行任何更改吗?

谢谢, 竖琴

【问题讨论】:

  • 几个问题: 1.这是集群安装还是单节点安装? 2. 关闭机器之前是否优雅地关闭了namenode服务? 3.你怎么知道数据损坏了?

标签: java hadoop hbase hdfs bigdata


【解决方案1】:

几年前我得到了类似的东西,那是由于sync problem。我可以看到解决方案。 Here 是另一种描述,带有用于放置操作的序列图。

在你的情况下会发生什么?也许这个 put 非常小,并且以内存存储结束,而不是在 HFile 中,您要检查它是否“损坏”。

尝试写入 25MB 或更多 - 因为这是 hadoop 的页面大小,并且会触发所有写入。这样您就可以简单地消除其他问题。如果可行 - 那么您可以使用存储策略或只是等待更多。愚蠢的建议,但请注意,在正常系统中会有更多写入,因此无论如何都会触发对 HFile 的完整写入。其他选择是强制执行,但您的产品可能会因写入过多而变差。

【讨论】:

    猜你喜欢
    • 2019-06-22
    • 1970-01-01
    • 2012-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多