MapReduce 框架下,针对大规模数据处理场景,有哪些方法可以减少网络带宽消耗?
考察说明
考查对 MapReduce 数据流和优化手段的理解
回答思路
- 【回答框架 1】网络带宽主要在 shuffle 阶段的数据传输中消耗,优化核心是减少跨节点传输的数据量。
- 【回答框架 2】使用 combiner 在 map 端本地合并中间结果,减少传给 reducer 的数据量。
- 【回答框架 3】采用序列化压缩,如 Snappy,降低传输数据大小。
- 【回答框架 4】设计合理的分区和排序,减少数据倾斜导致的不均衡传输。
- 【回答框架 5】调节参数如 io.sort.mb 和 mapreduce.reduce.shuffle.parallelcopies,优化传输效率。
- 【关键点 1】combiner 在 map 端合并可减少 shuffle 数据量
- 【关键点 2】压缩序列化降低网络传输字节数
- 【关键点 3】合理分区避免数据倾斜导致的带宽浪费
- 【易错点 1】combiner 不适用于所有场景,如求平均值
- 【易错点 2】压缩需权衡 CPU 开销与带宽节省
- 【易错点 3】数据倾斜未处理时其他优化效果有限