Hadoop: почему время ожидания яростно пишущей задачи сокращения может истечь?

#java #timeout #hadoop

#java #тайм-аут #hadoop

Вопрос:

У меня есть задача сокращения Hadoop, которая считывает свои входные записи пакетами, выполняет большую обработку и записывает много выходных данных для каждого входного пакета. Я читал, что Hadoop считает вывод записи «прогрессом» с целью уничтожения зависших задач. Однако, несмотря на постоянное написание большого количества выходных данных, время ожидания моей задачи все еще истекает и завершается. Итак: как я могу узнать, когда Hadoop считает, что задача в последний раз сообщала о ходе выполнения? Почему я должен вызывать context.progress() с каждым context.write() ? Существуют ли какие-либо ситуации, когда запись не учитывается как прогресс? (Например, мои ключи — NullWritable s.) Я использую Cloudera CDH3u1 на CentOS 5.7, если это имеет какое-либо значение.

Ответ №1:

Не уверен, почему задачи завершаются, но вы могли бы увеличить значение mapreduce.task.timeout, по умолчанию оно равно 600000 мс. Это может быть не очень хорошей практикой, поскольку задачи rouge будут выполняться дольше из-за увеличения значения таймаута.