直接回答
10GB 文件超出单机内存时用外部排序:先把文件分块读入内存,每块内排序后写成临时有序文件(归并段),再多路归并这些临时文件得到整体有序输出。10TB 量级单机磁盘和耗时都难以承受,需分布式排序,如 MapReduce/Spark 的全排序,或分片到多机分别外排再归并。
展开解析
外排关键参数是内存块大小与归并路数。k 路归并用一个大小为 k 的最小堆(败者树亦可),堆中每个元素记录来自哪个文件,依次取最小写输出并补充该文件下一条。归并路数越大、趟数越少,但单趟 I/O 仍是瓶颈,常用多路平衡归并。若数据是定长数值还可用范围分区(如按首字节桶排序)减少归并压力。10TB 场景追问点:数据倾斜导致某节点负载过高、中间结果磁盘放大、容错(节点挂掉重算)、以及用采样确定分区边界保证各分片大小均匀。易错点是忽略排序关键字仅占记录一部分时如何搬运整条记录。
示例
假设内存能装 1GB,10GB 文件切成 10 块各排好序后,用 10 路堆归并一遍即完成;10TB 则先按 key 范围哈希/采样分区到几十台机器,每台外排后汇总。