阅读量:2
Ubuntu上HDFS数据压缩实操指南
一 常用压缩格式与适用场景
- Gzip:通用、压缩/解压速度中等、压缩率中等;适合一次性落地与归档。
- Bzip2:压缩率高,但速度慢;适合对存储节省要求高、可接受较长处理时间的场景。
- LZO:压缩率与速度折中,支持索引以便较快随机访问(需额外索引/许可);适合频繁读取的大数据。
- Snappy:压缩/解压速度快,压缩率一般;适合高吞吐计算与交互式查询。
- Zstandard(Zstd):压缩率与速度兼顾,较新;适合在存储与性能间寻求平衡的场景。
二 前置检查与集群配置
- 在 core-site.xml 中注册需要的编解码器(确保集群节点均可用相应库):
<configuration>
<property>
<name>io.compression.codecsname>
<value>
org.apache.hadoop.io.compress.GzipCodec,
org.apache.hadoop.io.compress.DefaultCodec,
org.apache.hadoop.io.compress.BZip2Codec,
org.apache.hadoop.io.compress.SnappyCodec,
org.apache.hadoop.io.compress.ZstdCodec
value>
property>
configuration>
- 在 mapred-site.xml 中启用常用压缩(按需调整):
<configuration>
<property>
<name>mapreduce.map.output.compressname>
<value>truevalue>
property>
<property>
<name>mapreduce.map.output.compress.codecname>
<value>org.apache.hadoop.io.compress.SnappyCodecvalue>
property>
<property>
<name>mapreduce.output.fileoutputformat.compressname>
<value>truevalue>
property>
<property>
<name>mapreduce.output.fileoutputformat.compress.codecname>
<value>org.apache.hadoop.io.compress.SnappyCodecvalue>
property>
configuration>
- 如使用 Gzip 并希望调整压缩级别,可在 core-site.xml 增加(可选):
<property>
<name>io.compression.codec.gzip.levelname>
<value>6value>
property>
- 验证编解码器可用性(任一节点执行):
- 查看 Snappy:hadoop checknative -a | grep snappy
- 查看 Zstd:hadoop checknative -a | grep zstd
- 若无输出,需在集群各节点安装相应本地库(如 libsnappy、libzstd)并重启相关服务。
三 三种常用压缩方式
-
方式一 预压缩后上传
- 本地压缩并上传:
- Gzip:gzip input_file → hadoop fs -put input_file.gz /path/in/hdfs
- 读取:hadoop fs -cat /path/in/hdfs/input_file.gz | gunzip
- 说明:简单通用,Hadoop 读取常见压缩文件(如 Gzip/Bzip2/Snappy)时通常可自动解压;适合批处理与归档。
- 本地压缩并上传:
-
方式二 作业内启用压缩(MapReduce 示例)
- 在驱动中设置(示例为 Snappy):
Configuration conf = new Configuration();
conf.setBoolean("mapreduce.output.fileoutputformat.compress", true);
conf.set("mapreduce.output.fileoutputformat.compress.codec",
"org.apache.hadoop.io.compress.SnappyCodec");
Job job = Job.getInstance(conf);
// ... 其他作业配置
-
或在命令行提交作业时传入:
- hadoop jar your-job.jar YourMainClass
-D mapreduce.output.fileoutputformat.compress=true
-D mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.SnappyCodec
-input /input -output /output
- hadoop jar your-job.jar YourMainClass
-
方式三 使用列式格式自带的压缩(推荐用于分析场景)
- Hive(ORC 使用 Snappy):
CREATE TABLE my_table (
id INT,
name STRING
)
STORED AS ORC
TBLPROPERTIES ("orc.compress"="SNAPPY");
- Spark(Parquet 使用 Snappy):
df.write
.mode("overwrite")
.option("compression", "snappy")
.parquet("/hdfs/path/to/dest")
- 说明:ORC/Parquet 原生支持压缩与谓词下推,通常比文本格式更高效。
四 小文件与存储优化
- 大量小文件会显著增加 NameNode 内存压力(每个块元数据常驻内存)。可用 HAR(Hadoop Archive) 归档合并:
- 归档:hadoop archive -archiveName myhar.har -p /user/ubuntu /user/my
- 查看:hdfs dfs -ls har:///user/my/myhar.har
- 解包:hdfs dfs -cp har:///user/my/my.har /user/your
- 列式格式(如 ORC/Parquet)配合压缩,可在保持查询性能的同时降低存储占用。
五 快速选择建议
- 追求写入/读取吞吐与通用性:选 Snappy(或 LZO,若需索引/更快随机访问)。
- 追求最高压缩率、可接受较慢速度:选 Bzip2(适合冷数据归档)。
- 通用归档与兼容性:选 Gzip。
- 在存储与性能间平衡且需更好压缩:选 Zstd(需集群具备相应本地库)。
以上就是关于“Ubuntu HDFS数据如何压缩”的相关介绍,筋斗云是国内较早的云主机应用的服务商,拥有10余年行业经验,提供丰富的云服务器、租用服务器等相关产品服务。云服务器资源弹性伸缩,主机vCPU、内存性能强悍、超高I/O速度、故障秒级恢复;电子化备案,提交快速,专业团队7×24小时服务支持!
简单好用、高性价比云服务器租用链接:https://www.jindouyun.cn/product/cvm