我正在使用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紧接在一起,它们就有可能在同一毫秒内发生。