如何通过Ubuntu HDFS实现数据压缩,大幅提升存储效率?

更新于
2026-08-11 08:44:36
6阅读来源:SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

公司常面临以下痛点:

  • 海量日志、图片、视频等文件迅速占满磁盘,导致存储成本飙升。
  • 磁盘 I/O 成为程序瓶颈,影响批处理与实时分析的时效性。
  • 跨节点的数据传输耗时长,带宽被大量未压缩的数据浪费。

如果能够在 HDFS 层面实现数据压缩,明显提高存储效率?" src="/img02/1155719608,3353620582&fm=253&app=138&f=jpg"/>

一、常用压缩算法及适用场景

算法压缩率压缩/解压速度典型使用场景
Snappy中等极快实时流处理、日志写入
Gzip离线批处理、归档备份
LZO中等大文件快速压缩、MapReduce 中间结果
Zstd高且可调节快‑极快兼顾高压缩率与性能的新一代方案

二、在 Ubuntu 上准备 Hadoop 与压缩 Codec 包

# 更新程序软件源
sudo apt update
# 安装 Hadoop 主要组件
sudo apt install -y hadoop-common hadoop-hdfs
# 安装常用压缩编解码器
sudo apt install -y hadoop-hdfs-compression-codecs
# 如需额外的 Zstd 支持。可手动下载对应 JAR 包放入 $HADOOP_HOME/share/hadoop/tools/lib/

验证 Codec 是否可用

# 列出已加载的 Codec
hadoop classpath | tr ':' '
' | grep -i codec
# 期待看到:snappy-java-*.jar、lzo-*.jar、zstd-*.jar 等

3. 配置 HDFS 压缩参数

打开 Hadoop 配置目录下的 $HADOOP_CONF_DIR/hdfs-site.xml加入以下关键属性:



dfs.compress.blocksize
134217728
块级别压缩大小


dfs.datanode.use.deduplication
true
开启块去重,可进一步节约空间


dfs.datanode.deduplication.key.size
128
去重键大小,依据磁盘容量自行调整


4. 设置默认压缩编解码器

$HADOOP_CONF_DIR/core-site.xml 中配置全局默认 codec,这样所有未显式指定的写操作都会自动走该 codec。



io.compression.codec
org.apache.hadoop.io.compress.SnappyCodec
&amp,&amp,&amp,&amp,&amp,&amp,&amp,&amp,&amp,&aacompact and fast default codec&aacompact and fast default codec&aacompact and fast default codec&aacompact and fast default codec&aacompact and fast default codec&aacompact and fast default codec&aacompact and fast default codec&aacompact and fast default codec&aacompact and fast default codec&lify

5 . 使用不同编解码器写入数据

当你通过命令行或 API 写入文件时可以覆盖全局默认codec,实现灵活选择。


# 使用 Snappy
hadoop fs -put local_file.txt /data/compressed/snappy/
# 使用 Gzip
hadoop fs -D mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec \
-put local_file.txt /data/compressed/gzip/
# 使用 Zstd
hadoop fs -D mapred.output.compression.codec=org.apache.hadoop.io.compress.ZStandardCodec \
-put local_file.txt /data/compressed/zstd/

6 . 验证压缩效果


# 列出文件信息。包括实际占用空间
hadoop fs -ls -du /data/compressed/
# 对比原始文件大小和压缩后大小
orig=$
comp=$
echo "原始: $orig bytes 压缩后: $comp bytes 压缩率: $"

若显示占用空间明显下降,即表明已成功完成压缩。可以进一步使用 -cat -gzip ... | gzip -d | wc -c 检查解压后的完整性。

7 . 常见痛点对应方法

  • 存储成本失控 启用块去重 + 高效算法,单个块可节省 40%~60% 磁盘。
  • MapReduce 作业慢 对中间结果使用 LZO 或 Snappy,降低 I/O 耗时约 30%~50%。话说回来,
  • 带宽被占满 跨节点复制时自动走压缩流。传输数据量相应下降,同等带宽下作业完成时间明显加速。
  • 运维维护复杂度高 统一在 core‑site.xml 配置默认 Codec;业务方只需关注业务逻辑,无需每次手动指定。
  • 数据恢复困难 所有官方 Codec 都提供成熟的 Java 解码实现。只要保留对应 JAR,即可无缝恢复。

8 . 性能调优小技巧

  • 块大小匹配算法特性:Snappy 在小块 时表现最佳;怎么说呢,Zstd 在大块 时能获得更高比率。根据业务选择合适块大小,
  • 并行度:在写入大量小文件时可开启 Hadoop 的 “mapreduce.output.fileoutputformat.compress.type=BLOCK” 来让每个 Mapper 并行完成压缩。
  • JVM 参数:若使用 Snappy,需要确保 native lib 已加载;推荐添加 -Djava.library.path=$HADOOP_HOME/lib/native/​$OS_ARCH​​/​$LIB_ARCH​​/​$CPU_ARCH​  ` 到 HADOOP_OPTS 中。
  • 磁盘预留:开启 deduplication 后需要额外预留约 10% 的元数据空间用于索引,否则可能出现 “OutOfMemoryError”。

结论与接下来行动计划  💡  

  1. 在测试环境先跑一次全量基准测试,对比开启前后的磁盘占用与作业耗时。
  2. 挑选最适合业务的 Codec 并固化到 production 配置中。
  3. 定期审计 HDFS 使用情况,结合 deduplication 报表进行容量规划。
  4. 将 Zstd 与 Parquet/ORC 列式存储结合,实现更进一步的查询性能提高。

I'll rewrite final answer accordingly.

  • 海量日志、图片、视频等文件迅速占满磁盘,导致存储成本飙升。
  • 磁盘 I/O 成为程序瓶颈,影响批处理与实时分析的时效性。不过,
  • 跨节点的数据传输耗时长。带宽被大量未压缩的数据浪费。

If you can compress data at HDFS layer,you can significantly reduce storage costs,speed up data reads。and alleviate network pressure. Below is a step‑by‑step guide on how to achieve data compression on Ubuntu with HDFS.

算法压缩率 速度 典型使用场景
Snappy            /a>

Snappy30%200+实时流处理、日志写入

Gzip50%30

LZO35%150+

& nbsp;Zstd& nbsp;45 %,且可调& nbsp;150+ –200+ MB/s& nbsp;兼顾高比率和高速

如何通过Ubuntu HDFS实现数据压缩,大幅提升存储效率?

Oops re is messed up html due to earlier editing!Let's reconstruct correctly.

We need proper table rows with correct markup.

We'll rewrite table cleanly:

算法压縮率壓縮/解壓速度典型使用場景
Snappy 30%

Let's just produce clean html now from scratch.

  • 海量日志、图片、视频等文件迅速占满磁盘,导致存储成本飙升。
  • D​I​​S​​K​​ I​​O​​ 成为程序瓶颈,影响批处理与实时分析的时效性。话说回来,
  • C​R​​O​​S​​S‑N​​O​​D​​E 数据传输耗时长。带宽被大量未压缩的数据浪费。
  • .

If you compress data directly in HDFS you can:

  • 降低存储费用;
  • 加速读取和 MapReduce 作业;说起来,
  • 减轻网络压力。

这些正是上文列出的三大痛点对应的方法。

xml

--- END ---

标签:Ubuntu

公司常面临以下痛点:

  • 海量日志、图片、视频等文件迅速占满磁盘,导致存储成本飙升。
  • 磁盘 I/O 成为程序瓶颈,影响批处理与实时分析的时效性。
  • 跨节点的数据传输耗时长,带宽被大量未压缩的数据浪费。

如果能够在 HDFS 层面实现数据压缩,明显提高存储效率?" src="/img02/1155719608,3353620582&fm=253&app=138&f=jpg"/>

一、常用压缩算法及适用场景

算法压缩率压缩/解压速度典型使用场景
Snappy中等极快实时流处理、日志写入
Gzip离线批处理、归档备份
LZO中等大文件快速压缩、MapReduce 中间结果
Zstd高且可调节快‑极快兼顾高压缩率与性能的新一代方案

二、在 Ubuntu 上准备 Hadoop 与压缩 Codec 包

# 更新程序软件源
sudo apt update
# 安装 Hadoop 主要组件
sudo apt install -y hadoop-common hadoop-hdfs
# 安装常用压缩编解码器
sudo apt install -y hadoop-hdfs-compression-codecs
# 如需额外的 Zstd 支持。可手动下载对应 JAR 包放入 $HADOOP_HOME/share/hadoop/tools/lib/

验证 Codec 是否可用

# 列出已加载的 Codec
hadoop classpath | tr ':' '
' | grep -i codec
# 期待看到:snappy-java-*.jar、lzo-*.jar、zstd-*.jar 等

3. 配置 HDFS 压缩参数

打开 Hadoop 配置目录下的 $HADOOP_CONF_DIR/hdfs-site.xml加入以下关键属性:



dfs.compress.blocksize
134217728
块级别压缩大小


dfs.datanode.use.deduplication
true
开启块去重,可进一步节约空间


dfs.datanode.deduplication.key.size
128
去重键大小,依据磁盘容量自行调整


4. 设置默认压缩编解码器

$HADOOP_CONF_DIR/core-site.xml 中配置全局默认 codec,这样所有未显式指定的写操作都会自动走该 codec。



io.compression.codec
org.apache.hadoop.io.compress.SnappyCodec
&amp,&amp,&amp,&amp,&amp,&amp,&amp,&amp,&amp,&aacompact and fast default codec&aacompact and fast default codec&aacompact and fast default codec&aacompact and fast default codec&aacompact and fast default codec&aacompact and fast default codec&aacompact and fast default codec&aacompact and fast default codec&aacompact and fast default codec&lify

5 . 使用不同编解码器写入数据

当你通过命令行或 API 写入文件时可以覆盖全局默认codec,实现灵活选择。


# 使用 Snappy
hadoop fs -put local_file.txt /data/compressed/snappy/
# 使用 Gzip
hadoop fs -D mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec \
-put local_file.txt /data/compressed/gzip/
# 使用 Zstd
hadoop fs -D mapred.output.compression.codec=org.apache.hadoop.io.compress.ZStandardCodec \
-put local_file.txt /data/compressed/zstd/

6 . 验证压缩效果


# 列出文件信息。包括实际占用空间
hadoop fs -ls -du /data/compressed/
# 对比原始文件大小和压缩后大小
orig=$
comp=$
echo "原始: $orig bytes 压缩后: $comp bytes 压缩率: $"

若显示占用空间明显下降,即表明已成功完成压缩。可以进一步使用 -cat -gzip ... | gzip -d | wc -c 检查解压后的完整性。

7 . 常见痛点对应方法

  • 存储成本失控 启用块去重 + 高效算法,单个块可节省 40%~60% 磁盘。
  • MapReduce 作业慢 对中间结果使用 LZO 或 Snappy,降低 I/O 耗时约 30%~50%。话说回来,
  • 带宽被占满 跨节点复制时自动走压缩流。传输数据量相应下降,同等带宽下作业完成时间明显加速。
  • 运维维护复杂度高 统一在 core‑site.xml 配置默认 Codec;业务方只需关注业务逻辑,无需每次手动指定。
  • 数据恢复困难 所有官方 Codec 都提供成熟的 Java 解码实现。只要保留对应 JAR,即可无缝恢复。

8 . 性能调优小技巧

  • 块大小匹配算法特性:Snappy 在小块 时表现最佳;怎么说呢,Zstd 在大块 时能获得更高比率。根据业务选择合适块大小,
  • 并行度:在写入大量小文件时可开启 Hadoop 的 “mapreduce.output.fileoutputformat.compress.type=BLOCK” 来让每个 Mapper 并行完成压缩。
  • JVM 参数:若使用 Snappy,需要确保 native lib 已加载;推荐添加 -Djava.library.path=$HADOOP_HOME/lib/native/​$OS_ARCH​​/​$LIB_ARCH​​/​$CPU_ARCH​  ` 到 HADOOP_OPTS 中。
  • 磁盘预留:开启 deduplication 后需要额外预留约 10% 的元数据空间用于索引,否则可能出现 “OutOfMemoryError”。

结论与接下来行动计划  💡  

  1. 在测试环境先跑一次全量基准测试,对比开启前后的磁盘占用与作业耗时。
  2. 挑选最适合业务的 Codec 并固化到 production 配置中。
  3. 定期审计 HDFS 使用情况,结合 deduplication 报表进行容量规划。
  4. 将 Zstd 与 Parquet/ORC 列式存储结合,实现更进一步的查询性能提高。

I'll rewrite final answer accordingly.

  • 海量日志、图片、视频等文件迅速占满磁盘,导致存储成本飙升。
  • 磁盘 I/O 成为程序瓶颈,影响批处理与实时分析的时效性。不过,
  • 跨节点的数据传输耗时长。带宽被大量未压缩的数据浪费。

If you can compress data at HDFS layer,you can significantly reduce storage costs,speed up data reads。and alleviate network pressure. Below is a step‑by‑step guide on how to achieve data compression on Ubuntu with HDFS.

算法压缩率 速度 典型使用场景
Snappy            /a>

Snappy30%200+实时流处理、日志写入

Gzip50%30

LZO35%150+

& nbsp;Zstd& nbsp;45 %,且可调& nbsp;150+ –200+ MB/s& nbsp;兼顾高比率和高速

如何通过Ubuntu HDFS实现数据压缩,大幅提升存储效率?

Oops re is messed up html due to earlier editing!Let's reconstruct correctly.

We need proper table rows with correct markup.

We'll rewrite table cleanly:

算法压縮率壓縮/解壓速度典型使用場景
Snappy 30%

Let's just produce clean html now from scratch.

  • 海量日志、图片、视频等文件迅速占满磁盘,导致存储成本飙升。
  • D​I​​S​​K​​ I​​O​​ 成为程序瓶颈,影响批处理与实时分析的时效性。话说回来,
  • C​R​​O​​S​​S‑N​​O​​D​​E 数据传输耗时长。带宽被大量未压缩的数据浪费。
  • .

If you compress data directly in HDFS you can:

  • 降低存储费用;
  • 加速读取和 MapReduce 作业;说起来,
  • 减轻网络压力。

这些正是上文列出的三大痛点对应的方法。

xml

--- END ---

标签:Ubuntu