【问题标题】:How to set autoflush=false in HBase table如何在 HBase 表中设置 autoflush=false
【发布时间】:2016-01-06 11:58:49
【问题描述】:

我有保存到 HBase HTABLE 的代码。预期的行为是该表将为每个分区推送提交或“刷新”到 hbase 的放置。

注意:这是更新后的代码

rdd.foreachPartition(p => {
  val table = connection.getTable(TableName.valueOf(HTABLE))
  val mutator = connection.getBufferedMutator(TableName.valueOf(HTABLE))

  p.foreach(row => {
    val hRow = new Put(rowkey)
    hRow.addColumn....
    // use table.exists instead of table.checkAndPut (in favor of BufferedMutator's flushCommits)
    val exists = table.exists(new Get(rowkey))
    if (!exists) {
      hRow.addColumn...
    }
    mutator.mutate(hRow)
  })
  table.close()
  mutator.flush()
  mutator.close()
})

在 HBase 1.1 中,不推荐使用 HTable,并且在 org.apache.hadoop.hbase.client.Table 中没有可用的 flushCommits()。

替换 BufferedMutator.mutate(put) 对普通 put 是可以的,但是 mutator 没有任何类似于 Table 的 checkAndPut。

【问题讨论】:

    标签: hadoop hbase


    【解决方案1】:

    在新的 API 中,使用了BufferedMutator

    您可以将Table t = connection.getTable(TableName.valueOf("foo")) 更改为BufferedMutator t = connection.getBufferedMutator(TableName.valueOf("foo"))。然后把t.put(p);改成t.mutate(p);

    它对我有用!

    在我搜索的时候,关于这方面的信息很少,即使在官方文档中也是如此。希望我的回答对您有所帮助,有人可以更新文档。

    【讨论】:

      【解决方案2】:

      您需要将 autoFlush 设置为 false 参见第 11.7.4 节 在http://hbase.apache.org/0.94/book/perf.writing.html

      【讨论】:

      • 谢谢阿农。你知道如何在 HBase 1.1 Table 中设置 autoflush=false 吗?由于 HTable 已被弃用
      • 在 HBase 1.1 中,您应该使用 BufferedMutator - 请参阅此处的幻灯片 42 slideshare.net/enissoz/meet-hbase-10
      • 我尝试用BufferedMutator.mutate(put)替换Puts,但是mutator没有任何类似于Table的checkAndPut
      • 正确 - 因为您无法以缓冲方式执行此操作,因为您正在处理批处理并且在 HBase 中没有原子性
      • 谢谢阿农。我将 BufferedMutator 用于 flushCommits :)
      【解决方案3】:

      您不需要做任何事情,因为您 DONT 想在客户端缓冲 put。 By default, HBase client will not buffer the PUTS at client side.

      仅当客户端处理何时向 HBase RegionServers 发送数据时,才需要显式调用 flushCommits()。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-03-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多