分散key后Shuffle时间和整体执行时间都变长了

分散key后Shuffle时间和整体执行时间都变长了

老师您好我生成了一些数据,1000个1,100000000个5, 8000个8,大概200多兆



直接执行word count,reduce执行时间的截图

https://img1.sycdn.imooc.com/climg/6625366d09be0fe031201062.jpg


添加了分散key的逻辑,后整体执行时间反而变长了,是因为数据量太小的缘故么,为什么elapsed time shuffle的执行时间增加了好多

 Random random = new Random();
        @Override
        protected void map(LongWritable key1, Text value1, Mapper<LongWritable, Text, Text, LongWritable>.Context context)
                throws IOException, InterruptedException {

            String[] words = value1.toString().split(" ");
            for(String word : words) {
                if("5".equals(word)) {
                    word = "5_" + random.nextInt(3);

                }
                Text key2 = new Text(word);
                LongWritable value2 = new LongWritable(1L);
                // 把 <key2, value2> 值写出去
                context.write(key2, value2);
            }

        }

    }



https://img1.sycdn.imooc.com/climg/6625372a09747a9831601420.jpg

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

主要还是因为数据量太小了,你使用课程中提供的数据文件测试一下看看

  • 老师请问我观察到的是, 添加随机key 后 elapsed time shuffle 这个阶段的时间会明显变多,请问这个阶段是进行排序然后按照key值把数据发给reduce的对吧。


    这里执行时间增加了是不是因为,原来5的数据都在一起不用排序了,添加了随机key反而需要排序,所以时间变长了?(我的猜测)


    请问大量数据下增加reduce数量产生的速度提升,可以抵消排序产生的时间消耗是么。

    2024-04-22 10:02:28
  • 1:elapsed time shuffle统计的是shuffle过程的耗时,shuffle过程只涉及数据文件的拷贝,不涉及排序。

    课程中有针对shuffle过程的详细解释【框架对多个map任务的输出,按照不同的分区,通过网络copy到不同的reduce节点。这个过程称作shuffle】

    2:针对200多兆的数据文件,添加了分散key的逻辑之后,理论上来说每个reduce任务中elapsed time shuffle的耗时不会增加太多,因为之前map阶段的数据只会让一个reduce任务去拉取,现在是由10个reduce任务【课程中设置的reduce任务数量是10】去拉取。但是之前key=5的数据都在一个分区,可以一次拉取,现在key=5的数据打散之后,会分到多个分区,拉取的时候需要到多个分区查找数据,但是这个速度也不会很慢。所以理论上来说此时每个reduce任务中elapsed time shuffle的耗时不会增加那么多。

    但是也会存在一些外因影响结果:例如数据量较小,这样结果对比就不明显;还有就是目前使用的是虚拟机搭建的集群,有时候虚拟机资源不稳定,主要是磁盘IO和CPU。


    所以建议:

    1,使用课程中的数据文件,这个文件的大小是GB级别的,测试的时候效果会明显一些。

    2,在测试这个任务的时候,不要在windows电脑中运行其它无关的软件,最好把无关的软件都关闭,只保留虚拟机即可,避免资源波动。

    3,多次执行这个任务进行观察对比,有时候可能会由于windows磁盘比较繁忙导致IO比较慢,这样会影响elapsed time shuffle的耗时,因为shuffle过程是拉取数据的,这个过程中主要影响因素就是磁盘IO和网络,由于目前使用的是虚拟机,网络一般不会有波动,但是磁盘IO会有波动,所以建议多执行几次进行观察。


    2024-04-22 11:06:34
  • 了解了,谢谢徐老师

    2024-04-22 18:48:04
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师