Scala 控制mapreduce分区输出的输出数

Scala 控制mapreduce分区输出的输出数,scala,mapreduce,scoobi,bigdata,Scala,Mapreduce,Scoobi,Bigdata,我有一个巨大的输入数据集(~3 Tb),我使用Scala/Scoobi重新处理并写入分区输出。输出有54个分区,但重新处理和浓缩后的数据总大小是输入数据大小的2倍多 作为重新处理的结果,我得到一个DList[(String,String)],其中第一个字符串是分区键(即“year=2016/month=1/day=14”),第二个字符串是一些数据(即“val1^val2^val3”)。在将此数据列表写入hdfs之前,我会进行一些分组,以减少每个分区中输出文件的数量: out .groupBy(r

我有一个巨大的输入数据集(~3 Tb),我使用Scala/Scoobi重新处理并写入分区输出。输出有54个分区,但重新处理和浓缩后的数据总大小是输入数据大小的2倍多

作为重新处理的结果,我得到一个DList[(String,String)],其中第一个字符串是分区键(即“year=2016/month=1/day=14”),第二个字符串是一些数据(即“val1^val2^val3”)。在将此数据列表写入hdfs之前,我会进行一些分组,以减少每个分区中输出文件的数量:

out
.groupBy(r => r._1)
.mapFlatten(r => r._2)
.toPartitionedTextFile("outputPath/", identity, overwrite = true)
.persist
它基本上是在将输出写入文件之前按键对输出进行排序。但是,使用这种方法,某些还原程序下的数据大小达到400GB,并且需要数小时才能处理

如果我在编写数据之前不使用MapFlant进行groupBy排序,我会在54个分区下获得65000个输出文件,其中一些分区的大小小于1Kb。我不明白为什么有这么多的文件,如果我只有3000多个减速机为这项工作

我还将reduce.bytes参数设置为100000000,但我看不出它对处理有任何影响

有没有办法让MR在处理时拆分400 Gb的减速机?我不介意每个分区下有100个输出文件,但是每个分区有2000个太多了