容错相关参数
一、mapreduce.map.maxattempts
每个Map Task最大重试次数,一旦重试参数超过该值,则认为Map Task运行失败,默认值:4。
二、mapreduce.reduce.maxattempts
每个Reduce Task最大重试次数,一旦重试参数超过该值,则认为Map Task运行失败,默认值:4。
三、mapreduce.job.maxtaskfailures.per.tracker
当失败的Map Task失败比例超过该值为,整个作业则失败,默认值为0. 如果你的应用程序允许丢弃部分输入数据,则该该值设为一个大于0的值,比如5,表示如果有低于5%的Map Task失败(如果一个Map Task重试次数超过mapreduce.map.maxattempts,则认为这个Map Task失败,其对应的输入数据将不会产生任何结果),整个作业仍认为成功。
四、mapreduce.task.timeout
Task超时时间,默认值为600000毫秒 (600秒),经常需要设置的一个参数,该参数表达的意思为:如果一个task在一定时间内没有任何进入,即不会读取新的数据,也没有输出数据,则认为该task处于block状态,可能是卡住了,也许永远会卡住,为了防止因为用户程序永远block住不退出,则强制设置了一个该超时时间(单位毫秒)。如果你的程序对每条输入数据的处理时间过长(比如会访问数据库,通过网络拉取数据等),建议将该参数调大,该参数过小常出现的错误提示是
“AttemptID:attempt_14267829456721_123456_m_000224_0 Timed out after 600 secsContainer killed by the ApplicationMaster.”。
如果Reduce处理的数据量巨大(数据倾斜),在做full gc的时候,stop the world。导致响应超时,超出默认的600秒,任务被杀掉。也会出现上面的报错信息。