3
回答
关于hadoop …在完成map后再次启动reduce花费很长时间求解
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

 

如图,map 完成后, 等了将近40分钟,而且前面的reduce(11%)好慢,但是后面花括号部分的就正常了, 不知怎么办,求教????

有combiner ……会不会是combiner 花了太长时间

举报
maoyaozong
发帖于5年前 3回/2K+阅

以下是问题补充:

  • @maoyaozong :12/11/23 20:59:26 INFO mapred.JobClient: map 96% reduce 0% 12/11/23 20:59:27 INFO mapred.JobClient: map 98% reduce 0% 12/11/23 20:59:29 INFO mapred.JobClient: map 99% reduce 0% 12/11/23 20:59:32 INFO mapred.JobClient: map 100% reduce 0% 12/11/23 21:35:12 INFO mapred.JobClient: map 100% reduce 2% 12/11/23 21:41:01 INFO mapred.JobClient: map 100% reduce 11% 12/11/23 21:58:11 INFO mapred.JobClient: map 100% reduce 16% 12/11/23 21:58:20 INFO mapred.JobClient: map 100% reduce 22% 12/11/23 22:00:20 INFO mapred.JobClient: map 100% reduce 25% 12/11/23 22:00:26 INFO mapred.JobClient: map 100% reduce 30% 12/11/23 22:00:32 INFO mapred.JobClient: map 100% reduce 100% 12/11/23 22:00:37 INFO mapred.JobClient: Combine input records=48000 12/11/23 22:00:37 INFO mapred.JobClient: SPLIT_RAW_BYTES=1440 12/11/23 22:00:37 INFO mapred.JobClient: Reduce input records=12 12/11/23 22:00:37 INFO mapred.JobClient: Reduce input groups=1 12/11/23 22:00:37 INFO mapred.JobClient: Combine output records=12 图片看不清的话,这里是文字 (5年前)
共有3个答案 最后回答: 5年前
hadoop 这种东西到底是干啥的,解决啥问题的?
--- 共有 5 条评论 ---
宏哥回复 @iHuHoo.W : 明白了, 难怪这玩意开源了. 5年前 回复
iHuHoo给你个应用场景吧: 有200T的数据需要分析,很显然,单台机器没有这么大的容量。那么,给你200台PC服务器,每个服务器有3*2T的普通SATA磁盘,让你来分析这些数据(*PC 服务随时会宕机,普通磁盘也可能随时会坏掉)。这个就是 hadoop 的通常使用场景。 5年前 回复
nubo宏哥不清楚是因为这东西已经过了推广阶段了,现在只剩下了对这东西吐槽和用这东西忽悠钱 5年前 回复
宏哥回复 @Credo : 我真不懂, 一直听说搞大数据的, 但是不知道它做哪些计算, 如果说OLAP的 cube那我还懂点. 5年前 回复
Zhao-Qian卧槽,宏哥你能不能不要这么卖萌..... 5年前 回复
楼主给出的信息太少了,只能根据经验来估计,是不是设定了map结束后进行全局排序(job.setSortComparatorClass)?把jobConf贴出来看看吧。
--- 共有 5 条评论 ---
maoyaozong为了提高性能我还改了参数,但是也没用呀 conf1.set("mapred.task.timeout","0"); conf1.set("io.sort.factor","1000"); conf1.set("io.sort.mb","300"); 5年前 回复
maoyaozongjob.setCombinerClass(SequenceCombiner.class); job.setNumReduceTasks(1); job.setReducerClass(StarSequenceReducer.class); 5年前 回复
maoyaozongjobConf很简单的 Job job=new Job(conf1,"MSA_step1"); job.setJarByClass(MSA_console.class); job.setInputFormatClass(TextInputFormat.class); job.setMapperClass(FirstMapper.class); 5年前 回复
maoyaozong我的job里面没有设定排序方法,因为我的map的key值设定为taskID, 我想让相同taskID 所对应的value(一维数组),求每列最大值(在combiner上做) 5年前 回复
maoyaozong额……我的一个map的value输出一个一维数组,cominer 要做的是对所有value的每一列求最大值,可以想象成就是在一个二维表里面求每一列的最大值……这个应该不是什么特别耗花费的计算才对呀 5年前 回复

hadoop的task执行进度是其自己估计的,对于map-tasks,进度就是已经处理过的input的比例。对于reduce-tasks就稍微复杂一点,但是系统仍然可以估计reduce input处理的比例。把reduce的整个过程分为3部分:copy,sort,reduce。如果一个reduce-task处理了一半的input,那么这个task就完成了5/6(copy和sort各占1/3,再加上reduce这份的一半,即1/3 + 1/3+ 1/6 = 5/6),按楼主的情况数据量应该不会很多,copy,sort不会太耗时,应该是卡在map结束后 combiner,楼主是在学习hadoop吗?如果是伪分布式那没必要去调优了。

--- 共有 1 条评论 ---
maoyaozong我在导师的集群上跑的……我把做reduce的那部分工作提出来,放到单机上跑了,速度立马就上去……现在程序退化成只是利用了map的并行性……唉…刚学,对mapreduce内部运行机制都不熟悉…… 5年前 回复
顶部