同时使用 Delete 和 Put 时无法在 HBase 中插入新数据

Posted

技术标签:

【中文标题】同时使用 Delete 和 Put 时无法在 HBase 中插入新数据【英文标题】:Can't insert new data in HBase when using Delete and Put at same time 【发布时间】:2016-11-16 01:39:23 【问题描述】:

我正在使用 Hbase mapreduce 来计算报告。 在减速器中,我尝试清除“结果”列族,然后添加一个新的“总计”列。但我发现列族已删除,但未插入新数据。看来 Put 操作不起作用。你知道为什么吗?

reducer 类中的示例代码:

      Delete del = new Delete(rowkey.getBytes());
      del.addFamily(RESULT);
      context.write(new ImmutableBytesWritable(Bytes.toBytes(key.toString())), del);
      Put put = new Put(rowkey.getBytes());
      put.addColumn(RESULT, TOTAL, totalNum);
      context.write(new ImmutableBytesWritable(Bytes.toBytes(key.toString())), put);

【问题讨论】:

【参考方案1】:

这是hbase的限制: Deletes mask Puts

27.3.1。删除掩码 删除掩码放置,甚至在输入删除后发生的放置。请参阅 HBASE-2256。请记住,删除会写入一个墓碑,只有在下一次主要压缩运行后才会消失。假设您删除所有内容 ⇐ T。在此之后,您使用时间戳 ⇐ T 执行新 put。即使发生在删除之后,该 put 也将被删除墓碑掩盖。执行 put 不会失败,但是当你执行 get 时,你会发现 put 没有任何效果。主要压缩运行后,它将再次开始工作。如果您使用不断增加的版本来连续添加新的 put,这些问题应该不是问题。但即使您不关心时间,它们也可能发生:只需删除并立即放置,它们有可能在同一毫秒内发生。

【讨论】:

以上是关于同时使用 Delete 和 Put 时无法在 HBase 中插入新数据的主要内容,如果未能解决你的问题,请参考以下文章

AJAX:POST-PUT-DELETE的问题

无法在 JQuery 1.6.4 中使用 CORS 进行 PUT/POST/DELETE HTTP 调用

Laravel 5.6 DELETE 和 PUT 403 访问被禁止

Chrome 的插件 CORS Toggle 无法使用 POST/PUT/DELETE 方法

Ajax中Put和Delete请求传递参数无效的解决方法(Restful风格)

Express 无法 PUT/DELETE 方法。出了啥问题?