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