如何在Debian HDFS上进行数据压缩
导读:在 Debian 上的 Hadoop HDFS 数据压缩实操指南 一 环境准备与编解码器安装 安装基础运行环境(若尚未安装): 更新索引并安装 Java 11 与 Hadoop: sudo apt update sudo apt in...
在 Debian 上的 Hadoop HDFS 数据压缩实操指南
一 环境准备与编解码器安装
- 安装基础运行环境(若尚未安装):
- 更新索引并安装 Java 11 与 Hadoop:
- sudo apt update
- sudo apt install openjdk-11-jdk hadoop
- 更新索引并安装 Java 11 与 Hadoop:
- 安装常用压缩库(按需选择):
- Snappy:sudo apt install libsnappy-dev
- Gzip:sudo apt install zlib1g-dev
- LZO:sudo apt install liblzo2-dev
- 说明:HDFS 本身不“全局压缩”存储,压缩发生在数据写入阶段(如 MapReduce/Spark 输出、列式格式自带压缩等)。上述库为 Hadoop 进程提供编解码能力。
二 配置 Hadoop 启用压缩
- 在 $HADOOP_HOME/etc/hadoop/core-site.xml 中注册编解码器(示例启用 Snappy 与 Gzip):
- io.compression.codecs org.apache.hadoop.io.compress.SnappyCodec,org.apache.hadoop.io.compress.GzipCodec
- 在 $HADOOP_HOME/etc/hadoop/mapred-site.xml 中开启作业压缩(Map 与 Reduce 输出):
- mapreduce.map.output.compress true
- mapreduce.map.output.compress.codec org.apache.hadoop.io.compress.SnappyCodec
- mapreduce.output.fileoutputformat.compress true
- mapreduce.output.fileoutputformat.compress.codec org.apache.hadoop.io.compress.SnappyCodec
- 可选:为 Gzip 设置压缩级别(1–9,默认通常为 6):
- io.compression.codec.gzip.level 6
- 使配置生效(按你的部署方式重启相应服务,示例命令):
- sudo systemctl restart hadoop-namenode
- sudo systemctl restart hadoop-datanode
- sudo systemctl restart hadoop-resourcemanager
- sudo systemctl restart hadoop-nodemanager
三 在作业与存储中启用压缩
- MapReduce 作业输出压缩(Java API 示例):
- Configuration conf = new Configuration(); Job job = Job.getInstance(conf); FileOutputFormat.setCompressOutput(job, true); FileOutputFormat.setOutputCompressorClass(job, SnappyCodec.class);
- 命令行直接写入压缩文件(使用 Hadoop 提供的本地压缩库):
- hadoop org.apache.hadoop.io.compress.GzipCodec -out /user/hadoop/out.gz < /local/file
- 列式存储(推荐):将输出写为 Parquet/ORC,并启用其内置压缩(如 Snappy/Zstd),可在建表/写入时指定,查询引擎会自动解压,兼顾压缩率与扫描性能。
四 压缩格式选择与分片影响
- 常见编解码器对比与适用场景:
| 编解码器 | 压缩/解压速度 | 压缩比 | 分片支持 | 典型场景 |
|---|---|---|---|---|
| Gzip | 中 | 中-高 | 否 | 通用、兼容性要求高 |
| Bzip2 | 慢 | 高 | 是 | 归档、极致压缩 |
| LZO | 快 | 中 | 是(需索引) | 大文件、需并行切分 |
| Snappy | 快 | 中 | 否 | 中间结果、低延迟 |
| Zstandard | 快 | 中-高 | 视实现而定 | 新项目、性能与压缩比平衡 |
- 要点:
- 需要 MapReduce 对大文件进行可切分并行处理时,选择支持切分的格式(如 Bzip2、LZO(需建索引));若使用 Snappy/Gzip,通常按块边界切分,单个压缩文件不会跨多个 split 并行。
- 中间 shuffle 数据建议用 Snappy(速度快、开销低);最终落地若追求压缩率可用 Gzip/Bzip2,若追求查询/读取性能优先 Snappy/Zstd。
五 验证与常见问题
- 验证方法:
- 作业完成后检查输出文件后缀与大小:hadoop fs -ls /user/hadoop;若使用 Snappy,常见为 .snappy;Gzip 为 .gz。
- 读取验证:hadoop fs -cat /user/hadoop/out.snappy | head(能正常解压即表明编解码器可用)。
- 常见问题与排查:
- 出现 ClassNotFoundException/NoClassDefFoundError:说明对应编解码器库未安装或未在 io.compression.codecs 中注册,安装库并修正配置后重启服务。
- 压缩后作业无法切分或并发下降:多因使用 Gzip/Snappy 等不支持切分的压缩;改用 Bzip2 或为 LZO 建立索引。
- 性能不达预期:结合数据特征调整 dfs.blocksize(如 128MB/256MB)、合理设置副本数与并发线程,必要时选用 Zstd/Snappy 并配合列式格式。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 如何在Debian HDFS上进行数据压缩
本文地址: https://pptw.com/jishu/756105.html
