Как решить ThrottlingException в Hbase
Я использую Map-Reduce для чтения HBase, время от времени я получаю
Error: org.apache.hadoop.hbase.quotas.ThrottlingException:
org.apache.hadoop.hbase.quotas.ThrottlingException:
request size limit exceeded - wait 0.00sec at
Из-за того, что вся работа по уменьшению карты убита, есть ли способ, как заставить hbase читать медленнее? Или сказать ему подождать и повторить?
2 ответа
Установка hbase.client.pause и hbase.client.retries.number в более высокие значения может помочь.
Исключение можно обработать, переопределив метод Mapper.run, я не нашел ни одного документа, который бы рекомендовал это решение. Это просто работает для меня.
@Override
public void run(Context context) throws IOException, InterruptedException {
setup(context);
try {
while (true) {
boolean wasResult;
int retry_number=0;
while (true) {
try {
wasResult = context.nextKeyValue();
break;
} catch (ThrottlingException te) {
retry_number+=1;
Thread.sleep(1000+200*retry_number);
}
}
if (!wasResult) break;
map(context.getCurrentKey(), context.getCurrentValue(), context);
}
} finally {
cleanup(context);
}
}