2015-05-13 4 views
1

Когда я пытаюсь сделать пакетное приращение на Hbase таблицы (без RowKey дублей)Batch Increment в Hbase

final List<Increment> increments = countPerUid.entrySet().stream() 
       .map(entry -> { 
        Increment increment = new Increment(toBytes(entry.getKey())); 
        increment.addColumn(toBytes(conf.parentColumnFamily()), toBytes(conf.parentRankQualifier()), entry.getValue()); 
        return increment; 
       }).collect(Collectors.toList()); 

public BatchOperationResult batchIncrement(HTable table, List<Increment> rows) { 
     Object[] results = new Object[rows.size()]; 
     try { 
      table.batch(rows, results); 
     } catch (IOException | InterruptedException e) { 
      Throwables.propagate(e); 
     } 
     return new BatchOperationResult(results); 
    } 

У меня такое исключение:

2015-05-13 09:53:43,674 [Thread-9] ERROR hbase_query_layer.service.HbaseLayerServiceHandlerImpl - java.lang.RuntimeException: java.util.concurrent.ExecutionException: java.lang.RuntimeException: org.apache.hadoop.hbase.client.RetriesExhaustedWithDetailsException: 
Failed 14896 actions: org.apache.hadoop.hbase.exceptions.OperationConflictException: The operation with nonce {-3517837563370374612, -1595005354043534544} on row [298270339298463040] may have already completed 

Кто знает, почему?/

У меня Hbase 0.98.0

+0

Значение, которое вы пытаетесь увеличить, это Long? HBase поддерживает приращения только на длинные. – Azwaw

+0

Я знаю. Это долго. –

+0

Можете ли вы проверить, имеют ли какие-то операции те же самые nonce? – Azwaw

ответ

0

Как tempolary решение мне нужно разделить приращения партии на более мелкие куски.

1

Несвязанный, но я думал, что предлагаю попробовать эффективные бесшумные приращения здесь, так как очевидно, вы пытаетесь ускорить ваши приращения с помощью пакетной обработки.

Пример HBase 0.98 можно найти здесь: https://github.com/caskdata/cdap-hbase-increments