分享

为什么map没结束事reduce已经开始了?

shingo 发表于 2017-2-9 13:43:44 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 5 16627
17/02/08 19:34:18 INFO mapreduce.Job:  map 0% reduce 0%
17/02/08 19:45:52 INFO mapreduce.Job:  map 1% reduce 0%
17/02/08 19:47:56 INFO mapreduce.Job:  map 2% reduce 0%
17/02/08 19:48:39 INFO mapreduce.Job:  map 3% reduce 0%
17/02/08 19:49:46 INFO mapreduce.Job:  map 4% reduce 0%
17/02/08 19:50:54 INFO mapreduce.Job:  map 5% reduce 0%
17/02/08 19:52:08 INFO mapreduce.Job:  map 6% reduce 0%
17/02/08 19:52:26 INFO mapreduce.Job:  map 6% reduce 1%
17/02/08 19:53:15 INFO mapreduce.Job:  map 7% reduce 1%
17/02/08 19:56:12 INFO mapreduce.Job:  map 8% reduce 1%
17/02/08 19:59:04 INFO mapreduce.Job:  map 9% reduce 1%
17/02/08 19:59:21 INFO mapreduce.Job:  map 9% reduce 2%
17/02/08 20:00:13 INFO mapreduce.Job:  map 10% reduce 2%
17/02/08 20:01:47 INFO mapreduce.Job:  map 11% reduce 2%
17/02/08 20:02:59 INFO mapreduce.Job:  map 11% reduce 3%
17/02/08 20:04:13 INFO mapreduce.Job:  map 12% reduce 3%
17/02/08 20:04:41 INFO mapreduce.Job:  map 12% reduce 4%
17/02/08 20:07:15 INFO mapreduce.Job:  map 13% reduce 4%
17/02/08 20:08:33 INFO mapreduce.Job:  map 14% reduce 4%
17/02/08 20:08:35 INFO mapreduce.Job:  map 14% reduce 5%
17/02/08 20:10:00 INFO mapreduce.Job:  map 15% reduce 5%
17/02/08 20:11:15 INFO mapreduce.Job:  map 16% reduce 5%
17/02/08 20:12:11 INFO mapreduce.Job:  map 17% reduce 5%
17/02/08 20:12:13 INFO mapreduce.Job:  map 17% reduce 6%
17/02/08 20:12:58 INFO mapreduce.Job:  map 18% reduce 6%
17/02/08 20:13:55 INFO mapreduce.Job:  map 19% reduce 6%
17/02/08 20:15:04 INFO mapreduce.Job:  map 20% reduce 6%
17/02/08 20:15:05 INFO mapreduce.Job:  map 20% reduce 7%

按我的理解,map得把所有的数据读完并处理完之后reduce才能收到数据吧,比如1996 (100,120,130)。如果1996 130在原始文件最末端,map尚未结束的时候reduce就不能开始呀???

已有(5)人评论

跳转到指定楼层
ledasion 发表于 2017-2-14 16:31:31
本帖最后由 ledasion 于 2017-2-14 16:38 编辑

       MRAppMaster在确定reduce task启动时机时,需要自己设计资源申请策略以防止因reduce task过早启动照成资源利用率低下和map task因分配不到资源而饿死。MRAppMaster在MRv1原有策略(map task完成数目达到一定比例后才允许启动reduce task)基础上添加了更为严格的资源控制策略和抢占策略,这里主要涉及到以下三个参数:
mapreduce.job.reduce.slowstart.completedmaps:当map task完成的比例达到该值后才会为reduce task申请资源,默认是0.05。

yarn.app.mapreduce.am.job.reduce.rampup.limit:在map task完成之前,最多启动reduce task比例,默认是0.5

yarn.app.mapreduce.am.job.reduce.preemption.limit:当map task需要资源但暂时无法获取资源(比如reduce task运行过程中,部分map task因结果丢失需重算)时,为了保证至少一个map task可以得到资源,最多可以抢占reduce task比例,默认是0.5

     如果上面三个参数设置的不合理可能会出现提交的job出现大量的reduce被kill掉,因此MRAppMaster自己需要设计资源申请策略以防止因reduce task过早启动照成资源利用率低下和map task因分配不到资源而饿死,然后通过抢占机制,大量reduce任务被kill掉。可以合理调节上面三个配置参数来消除这种情况。
回复

使用道具 举报

einhep 发表于 2017-2-9 14:30:58
如果这样的话,应该太慢了。
map执行的过程中,reduce可以干的事情是拉取map的输出数据。
这样大大的提高效率。如果等map运行完毕,reduce在复制数据,效率太慢了。

回复

使用道具 举报

arsenduan 发表于 2017-2-9 14:37:34
1楼说对一半:
reduce也不是等到所有的map数据都拷贝过来的时候才开始运行reduce任务,而是当job执行完第一个map执行完才开始运行的.reduce 在shuffle阶段 实际上是从不同的并且已经完成的map上去下载属于自己的这个reduce,由于map任务数很多,所有这个copy过程是并行的,既同时有许多个reduce取拷贝map.这个并行 的线程是通过mapred.reduce.parallel.copies 参数指定的默认为5个,也就是说无论map的任务数是多少个,默认情况下一次只能有5个reduce的线程去拷贝map任务的执行结果.所以当map任务数很多的情况下可以适当的调整该参数,这样可以让reduce快速的获得运行数据来完成任务。
回复

使用道具 举报

shingo 发表于 2017-2-9 14:49:44
arsenduan 发表于 2017-2-9 14:37
1楼说对一半:
reduce也不是等到所有的map数据都拷贝过来的时候才开始运行reduce任务,而是当job执行完第 ...

谢谢!理解了。
回复

使用道具 举报

shingo 发表于 2017-2-9 14:50:21
einhep 发表于 2017-2-9 14:30
如果这样的话,应该太慢了。
map执行的过程中,reduce可以干的事情是拉取map的输出数据。
这样大大的提高 ...

谢谢!理解了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条