压缩
Hive 压缩配置:Map 阶段压中间数据,Reduce 阶段压最终结果
| 阶段 | 压什么 | 目的 | 推荐算法 |
|---|---|---|---|
| Map 输出压缩 | Map 任务输出的中间数据 | 减少 Shuffle 阶段网络传输 | Snappy(速度快) |
| Reduce 输出压缩 | 最终写入 HDFS 的结果数据 | 减少存储占用 | Snappy / Gzip(看场景) |
选压缩算法的核心原则:中间数据要快(Snappy),结果数据要省空间(Gzip)。
Map 输出压缩:让 Shuffle 跑得更快
Map 阶段的输出会通过网络传到 Reduce 节点。数据量一大,网络就成了瓶颈。
Map 输出压缩就是把 Map 的结果先压缩再传,减少网络传输量。
配置(在 Hive 会话中执行):
-- 开启中间数据压缩
SET hive.exec.compress.intermediate=true;
-- 指定压缩算法(Snappy 速度最快,推荐)
SET mapreduce.map.output.compress.codec=org.apache.hadoop.io.compress.SnappyCodec;
什么时候该开:
- Map 输出数据量大(每个 Map 输出 > 100MB)
- 网络带宽是瓶颈
- 集群 CPU 有余量(压缩消耗 CPU)
什么时候不该开:
- Map 输出数据量小(< 10MB)
- CPU 已经是瓶颈
- 集群 Snappy 没装(会报错)
Reduce 输出压缩:让 HDFS 存得更省
Reduce 输出的数据最终写入 HDFS,存得越久越占空间。
Reduce 输出压缩就是压缩最终结果文件,省存储。
配置: