2016-11-16 14 views
2

Hbase mapreduceを使用してレポートを計算しています。 還元剤では、私は '結果'列ファミリをクリアし、新しい '合計'列を追加しようとします。しかし、列ファミリは削除されていますが、新しいデータは挿入されていません。それはプットアクションが動作しないようです。なぜなのかご存知ですか?DeleteとPutを同時に使用するときにHBaseに新しいデータを挿入できません

減速クラスのサンプルコードは:

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

答えて

2

はHBaseの制限である: Deletes mask Puts

27.3.1。 mask Putsを削除します。 マスクのputsを削除します。削除された後に起こったputsも削除します。 HBASE-2256を参照してください。削除が削除マークを書き込むことを忘れないでください。削除マークは、次に大きな圧縮が実行された後に消えるだけです。あなたがすべてを削除したとしましょう。⇐T。この後、タイムスタンプ⇐Tで新しいputを実行します。このputは、削除後に起こったとしても、delete tombstoneによってマスクされます。 putを実行することは失敗しませんが、getを実行するとputが何の効果もないことに気づくでしょう。主要な圧縮が実行された後、再び作業を開始します。あなたが常に新しい行を追加するために常に増加するバージョンを使用すると、これらの問題は問題になるはずはありません。しかし、たとえあなたが時間を気にしなくても起こることがあります。削除してお互いに直ちに入れて、同じミリ秒以内に起こる可能性があります。

関連する問題