课程进度 39% · 第4/8章第4/8章 · 标签 1/8
— 1 —
分区让数据能并行处理
当事件无法由一个进程高效处理时,可以切成多个分区并行读取与转换。存储分区与计算分区并不相同:目录date=某日用于减少扫描范围,运行时的任务分区决定同时处理多少份数据。按日期查询应尽早过滤分区;按user_id建立大量目录则可能制造海量小文件,目录越细并不总是越快。
并行速度受最慢任务限制,而非只取决于机器总数。先确认分区是否均衡,再观察序列化、网络与磁盘开销,避免把并行度直接当加速倍数。
— 2 —
什么操作需要shuffle
单条事件的字段转换可在原分区执行,但按course_id统计播放数时,同课程记录必须汇合。shuffle将数据重新分发给负责该键的任务,涉及网络、序列化和磁盘。连接两张大表、排序及分组都可能产生此类成本。优化前先确认输出正确,再查看执行计划与任务指标,识别真正的数据交换环节。
过滤与逐行字段转换通常可在原分区完成,按不同键分组往往需要重新分布。提前丢弃无用字段能减少后续移动的数据量。