Batchausnahmen verarbeiten
Die HBase API bietet zwei Möglichkeiten, mehrere Vorgänge als Batch zu schicken:
Table#batch(List, Object[])
kombiniert mehrere "Gets" und Mutationen in einem Batch.BufferedMutator#mutate(List<? extends Mutation> mutations)
kombiniert mehrere Mutationen zu einem Batch oder einer Reihe von Batches.
Mit dem Cloud Bigtable HBase-Client für Java können beide Methoden eine RetriesExhaustedWithDetailsException
auslösen. Diese Ausnahme wird ausgelöst, wenn mindestens ein Batch-Vorgang aus beliebigem Grund nicht möglich ist (beispielsweise bei fehlgeschlagener Verbindung). Sie enthält eine Liste fehlgeschlagener Anfragen mit Details über die Ausnahme, die das Scheitern des Befehls ausgelöst hat.
Eine Ausnahme der Art RetriesExhaustedWithDetailsException
allein sagt nichts darüber aus, warum eine Anfrage fehlgeschlagen ist. Sie müssen RetriesExhaustedWithDetailsException#getCauses()
aufrufen, um die detaillierten Ausnahmen für jede fehlgeschlagene Anfrage abzurufen. Für die Fehlerdiagnose ist es hilfreich, wenn Sie die Informationen über die einzelnen Ausnahmen protokollieren:
try {
mutator.mutate(mutationList);
} catch (RetriesExhaustedWithDetailsException e) {
for (Throwable cause : e.getCauses()) {
cause.printStackTrace();
}
throw e;
}
Eine Ausnahme kann auch auftreten, wenn Sie flush
oder close
aufrufen.
Es gilt dieselbe Fehlerbehandlung.