2016-11-16 2 views
2

Hbase mapreduce를 사용하여 보고서를 계산하고 있습니다. 감속기에서 '결과'열 패밀리를 지우고 새로운 '전체'열을 추가하려고합니다. 그러나 열 패밀리가 삭제되었음을 알았지 만 새로운 데이터는 삽입되지 않습니다. Put 액션이 작동하지 않는 것 같습니다. 왜 그런지 알아? 감속기 클래스의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. 마스크 컷을 삭제합니다. 마스크 풋을 삭제합니다. 삭제가 입력 된 후에도 발생합니다. HBASE-2256을 참조하십시오. 삭제는 삭제 표시를 쓰는 것을 기억하십시오. 삭제 표시는 다음 주요 압축이 실행 된 후에 사라집니다. 당신이 모든 것을 삭제했다고 가정하면 ⇐ T입니다.이 후에는 타임 스탬프 ⇐ T를 가진 새로운 put을합니다.이 put은 삭제 후에 일어난 경우에도 삭제 삭제 삭제에 의해 가려집니다. put을 수행하는 것은 실패하지 않을 것이지만, get을하면 put이 아무런 효과가 없다는 것을 알게 될 것입니다. 주요 압축이 실행 된 후 다시 작업을 시작합니다. 새로운 랠리에 항상 증가하는 버전을 사용하면 이러한 문제는 문제가되지 않습니다. 그러나 시간을 신경 쓰지 않아도 문제가 발생할 수 있습니다. 삭제하고 서로를 바로 처리하면 동일한 밀리 초 내에 발생할 가능성이 있습니다.