【问题标题】:HBase WAL file and HDFS data stagingHBase WAL 文件和 HDFS 数据暂存
【发布时间】:2015-12-21 17:18:04
【问题描述】:

我如何理解什么是 WAL: 预写日志提供一致的放置/删除操作。在更改区域之前,所有操作都会写入其中。如果区域服务器出现问题,我们可以从 WAL 修复信息。

我不明白 WAL 是如何在 HDFS 之上实现的?

来自 HDFS 文档:

创建文件的客户端请求没有到达NameNode 立即地。实际上,最初 HDFS 客户端缓存文件数据 到一个临时的本地文件中。应用程序写入是透明的 重定向到这个临时本地文件。当本地文件 累积超过一个 HDFS 块大小的数据,客户端联系 名称节点。 NameNode 将文件名插入文件系统 层次结构并为其分配一个数据块。 NameNode 响应 带有 DataNode 标识的客户端请求和 目标数据块。然后客户端从 本地临时文件到指定的DataNode。当一个文件是 关闭,临时本地文件中剩余的未刷新数据为 转移到DataNode

所以如果我做了一个小改动并且它的内容还没有转发到 hdfs,那么它可能会丢失 WAL 内容吗?

编辑: 据我了解: http://hadoop-hbase.blogspot.com.by/2012/05/hbase-hdfs-and-durable-sync.html

我们可以强制 hdfs 客户端同步数据,而无需等待它变得等于块大小。

【问题讨论】:

    标签: hadoop hbase hdfs


    【解决方案1】:

    你在 Hbase 中写入的数据会经历以下几个阶段 放 -> WAL -> memstore -> HFile。 HFile 是存储在 HDFS 中的实际文件。这就是上面的名称节点和数据节点进来的地方。并且HFile是排序的。

    排序操作在 Memstore 中完成,在此期间达到一定的缓冲区大小后,它会刷新到 HFile。

    现在为避免 memstore 中出现数据丢失,使用 WAL。

    您可以获取详细信息here

    【讨论】:

    • 你不明白我的问题。我明白为什么需要预写日志。我只是不明白如何在 HDFS 上正确实现它,因为 HDFS 客户端不会立即刷新到数据节点,而是当本地客户端缓冲区接近块大小(默认为 64MB)时。因此,如果我只将一条记录放到 HBASE 中,它的大小会非常小
    • HDFS 块和 Hbase 块不同,HBase 块在 64KB 左右,HDFS 为 64MB。当达到它们的块大小时,会发生相应的刷新。一些信息here。失去 WAL 意味着最终会导致区域服务器故障。因此,当我们重新启动区域服务器时,它会重播未刷新到内存存储的记录,然后将它们写入并继续前进。希望不同的块大小和 WAL 重放信息能帮助你理解
    • 块不同,但 hbase WAL 是一个存储在 HDFS 中的 hadoop 文件。 Hbase 不玩这个级别。文件刷新到 hdfs 完全由 HDFS 客户端负责。另一个问题:如果我们由于节点存储错误而无法重新启动区域服务器?我们失去了我们在沃尔的记录?
    • 那么这里的Hbase不是HBase的客户端吗?由于 WAL 也存储在 HDFS 中,因此复制因素进来了,理论上,如果 region server 完全消失,我们可能会丢失记录。但是,总是有恢复机制
    【解决方案2】:

    您可以查看刷新间隔。希望此链接有帮助: http://hbase.apache.org/0.94/book/perf.writing.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-28
      • 1970-01-01
      相关资源
      最近更新 更多