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