我正在使用Hbase mapreduce来计算报告。 在reducer中,我尝试清除'result'列族,然后添加一个新的'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);
答案 0 :(得分:2)
这是hbase限制: Deletes mask Puts
27.3.1。删除蒙版Puts 删除掩码放置,甚至删除输入删除后发生的放置。见HBASE-2256。请记住,删除会写一个逻辑删除,只有在下一次主要压缩运行后才会消失。假设你删除了所有内容⇐T。在此之后你做了一个带有时间戳⇐T的新put。这个put,即使它发生在删除之后,也会被删除墓碑掩盖。执行看跌期权不会失败,但是当你做到获得时你会注意到看跌期权没有效果。在主要压缩运行后它将再次开始工作。如果您对行添加使用始终增加的版本,则这些问题不应成为问题。但即使你不关心时间,它们也会发生:只需删除并立即放在彼此之后,并且它们有可能在同一毫秒内发生。