5.4 容器可重用性提高任务的完成效率
操作场景
容器可重用性可以提高任务完成的速度。一些优势如下所示:
容器可重用性的特性是可作用于一些Map以及Reduce任务使之能快速的完成从而缩短HBase数据批量加载的时间。使用容器重用场景是map 或reduce task比较短120秒以内,同时单个task处理的数据量不大,不超过256MB。
减少容器调度的时间和初始化的时间。
一旦MapReduce作业被提交。它将分发至Map和Reduce任务中。然后应用管理器(以下简称AM)将执行如下操作。
a. AM将向资源管理器(RM)申请容器去执行任务。所有容器将一起完成这个请求。当RM指定了容器,AM将会联系节点管理器(NM)去执行容器。
b. 当容器启动完毕,NM将从AM拉取任务。
c. 当一个任务完成了,运行该任务的容器不会被立即终止。该容器将会试着向AM拉取下一个任务。如果AM能分配一个新任务给这个容器,该容器会自我清空以及初始化本身,以适用于新任务。
d. 如果AM不能分配新任务,容器会请求终止自己的运行。
操作步骤
参数名 | 描述 |
---|---|
mapreduce.container.reuse.enabled | 该配置项打开则容器可重用,反之容器不可重用。false |
mapreduce.container.reuse.enforce.strict-locality | 当启用了强制本地执行策略,该配置将告知是否遵循严格的数据本地化。如果启用,重用容器只能被分配至本节点上的任务。false |
使用约束
当strict-locality为false时,容器重用的降低了数据本地性。
容器的重用将受限于job中任务的总数。容器不会被不同的job共享。
容器只能被尝试成功的任务重用,不能被尝试失败的任务重用。
任务应该设计成,当一个任务完成后堆栈里将不会存留任何对象。这对于容器重用中的数据一致性以及内存的优化非常重要。如果容器重用是激活状态,job将不会释放容器给资源管理器,除非所有属于该job的任务都完成了,这种情况会影响到公平调度的原则。
当强制本地执行策略被激活,只有本地节点的任务可以分配给可以重用的容器。