同时使用"删除"和"放置"时无法在 HBase 中插入新数据



我正在使用Hbase mapreduce来计算一个报表。在减速器中,我尝试清除"结果"列族,然后添加一个新的"total"列。但是我发现列族是删除的,但是新数据不是插入的。看起来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);

这是hbase的限制:删除掩码放置

27.3.1。删除掩码删除掩码看跌期权,甚至删除输入后发生的看跌期权。看到hbase - 2256。请记住,删除操作会写入一个墓碑,只有在下一次主要压缩运行后,墓碑才会消失。假设您删除了所有内容<= T.在此之后,您使用时间戳<= t做了一个新的put操作,即使它发生在删除之后,也会被delete墓碑所掩盖。执行看跌操作不会失败,但是当您执行get操作时,您会注意到看跌操作没有效果。它将在主压缩运行后再次开始工作。如果您使用不断增加的版本对行进行新的放入,这些问题应该不是问题。但是,即使你不关心时间,它们也会发生:只要delete和put紧接在一起,它们就有可能在同一毫秒内发生。

相关内容

  • 没有找到相关文章

最新更新