在 Spark 中,Map 任务将输出保存在本地磁盘的文件中(单个排序和合并的数据文件 + 索引/Map 任务)。此过程称为 ShuffleWrite。
在reduce阶段,使用外部shuffle服务(如果启用)读取Map输出文件,在读取数据时reduce任务应用Tim排序。
但为什么Shuffle的溢出(内存)远大于读取的数据总量呢?
package CollectionsTS;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
public class ArrayListTS {
public static void main(String[] args) {
HashSet<Integer> hset = new HashSet<Integer>();
for (int i = 0; i <= 1000; i++) {
hset.add(i);
}
MyRunnable mr = new MyRunnable();
mr.addElements(hset);
Thread t1 = new Thread(mr,"t1");
Thread t2 = new Thread(mr,"t2");
Thread t3 = new Thread(mr,"t3");
t1.start(); t2.start(); t3.start();
}
}
class MyRunnable implements Runnable {
List<Integer> ilist = new ArrayList<Integer>();
public void addElements(HashSet<Integer> hset) {
ilist.addAll(hset);
} …Run Code Online (Sandbox Code Playgroud) java sorting collections multithreading concurrentmodification