Python: увеличение значения тайм-аута в EMR с помощью yelps MRJOB

Я использую MRIob yelp для написания некоторых программ mapreduce. Я запускаю его на EMR. В моей программе есть код редуктора, выполнение которого занимает много времени. Я замечаю, что из-за периода ожидания по умолчанию в EMR я получаю эту ошибку

Task attempt_201301171501_0001_r_000000_0 failed to report status for 600 seconds.Killing!

Я хочу, чтобы увеличить время ожидания EMR. Я прочитал официальную документацию mrjobs о том же, но я не смог понять процедуру. Может кто-нибудь предложить способ решения этой проблемы.

1 ответ

Решение

В прошлом я сталкивался с подобной проблемой с EMR, объектом, который вы ищете. mapred.task.timeout что соответствует количеству миллисекунд до завершения задачи, если она не читает входные данные, не записывает выходные данные и не обновляет свою строку состояния.

С MRJob вы можете добавить следующую опцию:

--jobconf mapred.task.timeout=1800000

РЕДАКТИРОВАТЬ: Похоже, что некоторые EMR AMI появляются не поддерживают параметры настройки, такие как время ожидания с jobconf во время выполнения. Вместо этого вы должны использовать конфигурацию во время начальной загрузки следующим образом:

--bootstrap-action="s3://elasticmapreduce/bootstrap-actions/configure-hadoop -m mapred.task.timeout=1800000"

Я бы все же попробовал первый, чтобы начать, и посмотреть, сможете ли вы заставить его работать, в противном случае попробуйте действие начальной загрузки.

Чтобы запустить любой из этих параметров, просто создайте свою работу, начиная с MRJobэтот класс имеет jobconf метод, который будет читать ваши --jobconf параметры, поэтому вы должны указать их как обычные параметры в командной строке:

python job.py --num-ec2-instances 42 --python-archive t.tar.gz -r emr --jobconf mapred.task.timeout=1800000 /path/to/input.txt
Другие вопросы по тегам