首页主机资讯Ubuntu HDFS数据如何压缩

Ubuntu HDFS数据如何压缩

时间2025-12-09 16:34:04发布访客分类主机资讯浏览551
导读:Ubuntu上HDFS数据压缩实操指南 一 常用压缩格式与适用场景 Gzip:通用、压缩/解压速度中等、压缩率中等;适合一次性落地与归档。 Bzip2:压缩率高,但速度慢;适合对存储节省要求高、可接受较长处理时间的场景。 LZO:压缩率与...

Ubuntu上HDFS数据压缩实操指南

一 常用压缩格式与适用场景

  • Gzip:通用、压缩/解压速度中等、压缩率中等;适合一次性落地与归档。
  • Bzip2:压缩率高,但速度慢;适合对存储节省要求高、可接受较长处理时间的场景。
  • LZO:压缩率与速度折中,支持索引以便较快随机访问(需额外索引/许可);适合频繁读取的大数据。
  • Snappy:压缩/解压速度快,压缩率一般;适合高吞吐计算与交互式查询。
  • Zstandard(Zstd):压缩率与速度兼顾,较新;适合在存储与性能间寻求平衡的场景。

二 前置检查与集群配置

  • core-site.xml 中注册需要的编解码器(确保集群节点均可用相应库):
<
    configuration>
    
  <
    property>
    
    <
    name>
    io.compression.codecs<
    /name>
    
    <
    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>
    
  <
    !-- Map输出压缩 -->
    
  <
    property>
    
    <
    name>
    mapreduce.map.output.compress<
    /name>
    
    <
    value>
    true<
    /value>
    
  <
    /property>
    
  <
    property>
    
    <
    name>
    mapreduce.map.output.compress.codec<
    /name>
    
    <
    value>
    org.apache.hadoop.io.compress.SnappyCodec<
    /value>
    
  <
    /property>
    
  <
    !-- Reduce输出压缩 -->
    
  <
    property>
    
    <
    name>
    mapreduce.output.fileoutputformat.compress<
    /name>
    
    <
    value>
    true<
    /value>
    
  <
    /property>
    
  <
    property>
    
    <
    name>
    mapreduce.output.fileoutputformat.compress.codec<
    /name>
    
    <
    value>
    org.apache.hadoop.io.compress.SnappyCodec<
    /value>
    
  <
    /property>
    
<
    /configuration>
    
  • 如使用 Gzip 并希望调整压缩级别,可在 core-site.xml 增加(可选):
<
    property>
    
  <
    name>
    io.compression.codec.gzip.level<
    /name>
    
  <
    value>
    6<
    /value>
    
<
    /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
  • 方式三 使用列式格式自带的压缩(推荐用于分析场景)

    • 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(需集群具备相应本地库)。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Ubuntu HDFS数据如何压缩
本文地址: https://pptw.com/jishu/767232.html
Ubuntu文件管理如何移动大文件 Debian Compton是否支持透明效果

游客 回复需填写必要信息