对未经优化的HashShuffleManager产生小文件数的验证。

入:HDFS读数据:partiton=task split
出:
map端最后一个rdd的partiton数作为ResultStage的partition
reduceByKey(func, X) X就是ResultStage的partition

ShuffleManager

val shortShuffleMgrNames = Map(
  "hash" -> "org.apache.spark.shuffle.hash.HashShuffleManager",  ## 1.2版本之前默认使用,2版本之后就没有hash了。
  "sort" -> "org.apache.spark.shuffle.sort.SortShuffleManager",
  "tungsten-sort" -> "org.apache.spark.shuffle.sort.SortShuffleManager")

每一个maptask的都会生成N个reducetask的文件
在这里插入图片描述
对相同的key执行hash算法,从而将相同的key都写入到一个磁盘文件中,而每一个磁盘文件都只属于下游stage的一个task。在将数据写入磁盘之前,会先将数据写入到内存缓冲,当内存缓冲填满之后,才会溢写到磁盘文件中。但是这种策略的不足在于,下游有几个task,上游的每一个task都就都需要创建几个临时文件,每个文件中只存储key取hash之后相同的数据,导致了当下游的task任务过多的时候,上游会堆积大量的小文件。

小文件数 = M * R
Bucket:Core * R


环境准备:将版本改到1.6.0,并 set spark.shuffle.manager = hash;


4*2

 val dataRDD = sc.textFile("file:///E:\\ruozeinput.txt",4)
 dataRDD.flatMap(_.split("\t")).map((_,1)).reduceByKey(_ + _,2).foreach(println)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述


5*3

val dataRDD = sc.textFile("file:///E:\\ruozeinput.txt",5)

    dataRDD.flatMap(_.split("\t")).map((_,1)).reduceByKey(_ + _,3).foreach(println)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值