同时使用delete和put时无法在hbase中插入新数据

sbtkgmzw  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(384)

我正在使用hbase mapreduce计算报表。在reducer中,我尝试清除“result”列族,然后添加一个新的“total”列。但我发现列族是delete,而新数据不是insert。看来这个动作不起作用。你知道为什么吗?
减速器类中的示例代码:

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);
q9yhzks0

q9yhzks01#

它是hbase限制:删除掩码放置
27.3.1. 删除掩码放置删除掩码放置,甚至在输入删除后发生的放置。见hbase-2256。请记住,delete会写入一个墓碑,只有在运行下一次主压缩之后,墓碑才会消失。假设你删除了所有的东西⇐ t。在此之后,你做一个新的投入与时间戳⇐ t。这样一来,即使发生了删除后,也会被删除墓碑所掩盖。执行看跌期权不会失败,但当您执行get时,您会注意到看跌期权没有任何效果。主要压实完成后,它将重新开始工作。如果您对行中的新put始终使用递增版本,则这些问题应该不是问题。但即使你不在乎时间,它们也可能发生:只要删除并紧跟在彼此之后,它们就有可能在同一毫秒内发生。

相关问题