在同时使用Delete和Put时,无法在HBase中插入新数据

时间:2016-11-16 01:39:23

标签: hadoop mapreduce hbase

我正在使用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);

1 个答案:

答案 0 :(得分:2)

这是hbase限制: Deletes mask Puts

  

27.3.1。删除蒙版Puts   删除掩码放置,甚至删除输入删除后发生的放置。见HBASE-2256。请记住,删除会写一个逻辑删除,只有在下一次主要压缩运行后才会消失。假设你删除了所有内容⇐T。在此之后你做了一个带有时间戳⇐T的新put。这个put,即使它发生在删除之后,也会被删除墓碑掩盖。执行看跌期权不会失败,但是当你做到获得时你会注意到看跌期权没有效果。在主要压缩运行后它将再次开始工作。如果您对行添加使用始终增加的版本,则这些问题不应成为问题。但即使你不关心时间,它们也会发生:只需删除并立即放在彼此之后,并且它们有可能在同一毫秒内发生。