Как решить 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);
    }
}
Другие вопросы по тегам