/mapreduce/workerCallback создает ответ http 429

Я работаю на Java и смог запустить работу по уменьшению карты. Задание прошло этап ShardedJob, но теперь застряло на этапе ExamineStatusAndReturnResult. В очереди задач я вижу несколько заданий, например: /mapreduce/workerCallback/map-hex-string. Все эти задания снова ставятся в очередь, потому что код возврата — 429 Too Many Requests (http://tools.ietf.org/html/rfc6585#section-4). Я чувствую, что достигаю какого-то предела квоты, но не могу понять, где/почему.

Как узнать, почему эти задачи получают код ответа 429?


person wspeirs    schedule 09.06.2014    source источник


Ответы (1)


Библиотека mapreduce пытается избежать OOM, выполняя собственный расчет предполагаемого потребления памяти (это можно настроить, переопределив методы AssessmentMemoryRequirement Worker/InputReader/OutputWriter, и это работает лучше всего, когда задания MR выполняются в своих собственных экземплярах [модуль, серверная часть, версия ]). При получении запроса MR из очереди задач библиотека mapreduce проверит предполагаемую память запроса, и если она меньше доступной в настоящее время, запрос будет отклонен с кодом ошибки HTTP 429. Чтобы свести к минимуму такие случаи, вы должны либо увеличить объем доступные ресурсы (тип, количество экземпляров) и/или уменьшить параллельную нагрузку (количество одновременных заданий, сегментов на задание и избегать любого другого типа нагрузки на одни и те же экземпляры).

person ozarov    schedule 10.06.2014
comment
Спасибо за информацию. Есть ли способ узнать, сколько памяти было использовано на каждом этапе (это в отчете о конвейере?), чтобы я мог переопределить эти методы и предоставить более точные оценки движку? - person wspeirs; 11.06.2014
comment
Как уже упоминалось, вы можете переопределить свой рабочий (сопоставитель/редуктор) метод оценкиMemoryRequirement, чтобы вернуть объем памяти, который потребуется для его работы. Библиотека MR будет использовать это значение в дополнение к оценке, полученной от входного считывателя и выходного записывающего устройства. - person ozarov; 11.06.2014
comment
Я понимаю, что могу сообщить библиотеке, сколько памяти, думаю, она будет использовать, но это всего лишь предположение... как я могу узнать, сколько памяти она использует на самом деле? - person wspeirs; 15.06.2014
comment
Вы можете указать разницу между Runtime.getRuntime().freeMemory(), но библиотека MR берет/использует оценку, прежде чем запускать преобразователь/редуктор для каждого среза. - person ozarov; 16.06.2014