我正在使用 yelp MRjob 编写一些 mapreduce 程序。我在 EMR 上运行它。我的程序有 reducer 代码,需要很长时间才能执行。我注意到由于 EMR 中的默认超时期限,我收到此错误
Task attempt_201301171501_0001_r_000000_0 failed to report status for 600 seconds.Killing!
我想要一种增加 EMR 超时的方法。我阅读了 mrjobs 官方文档,但我无法理解该过程。有人可以建议解决此问题的方法。
最佳答案
我过去处理过与 EMR 类似的问题,您要查找的属性 mapred.task.timeout
对应于 任务执行前的毫秒数如果它既不读取输入,也不写入输出,也不更新其状态字符串,则终止。
使用 MRJob,您可以添加以下选项:
--jobconf mapred.task.timeout=1800000
编辑:似乎某些 EMR AMI 似乎不支持在运行时使用 jobconf 设置超时等参数。相反,您必须像这样使用 Bootstrap-time 配置:
--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
关于Python:使用 yelps MRJOB 增加 EMR 中的超时值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14382410/