嗨,我刚刚想出了一个奇怪的任务:
我使用EMR运行java-MapReduce作业。
数据大约是1T,我使用了1个主人+8个奴隶。
所有实例都是r2.2xlarge。
最初,一切看起来都很好,如下所示:
INFO mapreduce.Job: map 0% reduce 0%
INFO mapreduce.Job: map 1% reduce 0%
INFO mapreduce.Job: map 2% reduce 0%
INFO mapreduce.Job: map 3% reduce 0%
INFO mapreduce.Job: map 4% reduce 0%
INFO mapreduce.Job: map 5% reduce 0%
INFO mapreduce.Job: map 6% reduce 0%
INFO mapreduce.Job: map 7% reduce 0%
...
然而,我只是注意到进度转向回落(从7%下降到1%)。
INFO mapreduce.Job: map 4% reduce 0%
INFO mapreduce.Job: map 5% reduce 0%
INFO mapreduce.Job: map 6% reduce 0%
INFO mapreduce.Job: map 7% reduce 0%
INFO mapreduce.Job: map 6% reduce 0%
INFO mapreduce.Job: map 5% reduce 0%
INFO mapreduce.Job: map 4% reduce 0%
INFO mapreduce.Job: map 3% reduce 0%
...
当我像3G数据一样测试时,结果是正确的,过程进展顺利,没有出现这种情况。
有人能告诉我为什么会出现这种情况吗?
最佳。
答案 0 :(得分:1)
显示的作业进度是NodeManagers报告的作业的已完成和正在进行的任务的统一状态。
逆转作业进度表明NodeManager已经崩溃,或者它很少向ResourceManager发送心跳和任务状态。在这两种情况下,RM都将其视为NM故障,并使NM报告的特定未完成作业的所有任务进度无效。成功完成的任务以及崩溃前运行的任务必须由ApplicationMaster重新运行。因此,失败的NM对工作进展的贡献变得无效,工作进度得到重新计算。
此处,输入量很大可能会导致OOM错误或任务超时。默认情况下,mapreduce.task.timeout
为600毫秒(10分钟)。如果任务在超时期限内未显示任何进度,则任务将失败。单个作业的多个故障(默认为3个)会将NM列入黑名单,并重新计算进度。 Nodemanager日志可以提供更清晰的信息。