节点黑名单
MR3 中的节点黑名单
MR3 实现了一种节点黑名单机制,用于限制将 TaskAttempt 分配给反复失败 TaskAttempt 的节点。对于每个节点,DAGAppMaster 不断更新在一定时间窗口内所有 TaskAttempt 中不成功的比例。当该比例达到阈值时,节点被列入黑名单。一旦被列入黑名单,节点不会以其全部容量执行 TaskAttempt。
以下配置键控制 MR3 对节点黑名单的行为:
mr3.am.maxtaskfailure.percent指定不成功 TaskAttempt 的比例阈值。例如,默认值 5 意味着如果在过去时间窗口内 5% 的 TaskAttempt 失败,则该节点被列入黑名单。mr3.am.max.safe.resource.percent.blacklisted指定被列入黑名单的节点可以使用的最大资源百分比。例如,默认值 50 意味着在被列入黑名单时,节点只能容纳占用其 50% 资源(CPU 核数和内存)的 TaskAttempt。mr3.am.min.safe.resource.percent.blacklisted指定被列入黑名单的节点可以使用的最小资源百分比。例如,默认值 10 意味着节点至少可以容纳占用其 10% 资源(CPU 核数和内存)的 TaskAttempt。
下图绘制了节点资源百分比与所有 TaskAttempt 中成功 TaskAttempt 比例的关系: 
需要注意的是,即使在最坏的情况下(所有 TaskAttempt 始终失败),节点仍然可以被 DAGAppMaster 分配新的 TaskAttempt。因此,它永远不会从 TaskAttempt 的考虑中被消除(前提是配置键 mr3.am.min.safe.resource.percent.blacklisted 设置得足够大)。通过这种方式,当 TaskAttempt 开始再次成功完成时,DAGAppMaster 可以有机会将节点从黑名单中移除。