温馨提示×

HDFS在Ubuntu上的数据压缩如何操作

小樊
34
2025-12-10 22:05:06
栏目: 智能运维

在 Ubuntu 上使用 HDFS 进行数据压缩的完整操作指南

一 环境准备与编解码器配置

  • Ubuntu 上安装 Hadoop 客户端后,确认已安装所需压缩库(以 Snappy 为例):sudo apt-get install libsnappy1。
  • 在 Hadoop 配置中注册编解码器,编辑 $HADOOP_HOME/etc/hadoop/core-site.xml,确保包含常用编解码器:
    io.compression.codecsorg.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.BZip2Codec,org.apache.hadoop.io.compress.LzoCodec,org.apache.hadoop.io.compress.SnappyCodec,org.apache.hadoop.io.compress.ZstdCodec
  • 如使用 LZO,需额外安装 LZO 原生库并在 Hadoop 中配置 LzoCodec;如使用 Zstandard,确保 Hadoop 版本包含 ZstdCodec。完成后重启相关服务或重新加载配置。

二 命令行方式压缩与解压

  • 方式 A 预压缩后上传:先在本地压缩,再上传到 HDFS。示例:
    • 本地压缩:gzip input_file(生成 input_file.gz)
    • 上传:hadoop fs -put input_file.gz /hdfs/path/
    • 下载解压:hadoop fs -get /hdfs/path/input_file.gz . && gunzip input_file.gz
  • 方式 B 写入时压缩(MapReduce 输出):
    hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar wordcount \ -D mapreduce.output.fileoutputformat.compress=true \ -D mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.SnappyCodec \ /input /output_snappy
  • 读取与验证:
    • 查看:hadoop fs -ls /output_snappy
    • 内容校验:hadoop fs -cat /output_snappy/part-r-00000 | head
  • 说明:Hadoop 能自动识别常见压缩文件(如 .gz、.bz2),直接用 -cat/-get 即可读取或下载。

三 在 MapReduce 与 Spark 中启用压缩

  • MapReduce 关键参数(示例为 Snappy):
    • 作业输出压缩:
      conf.set(“mapreduce.output.fileoutputformat.compress”, “true”);
      conf.set(“mapreduce.output.fileoutputformat.compress.codec”, “org.apache.hadoop.io.compress.SnappyCodec”);
    • Map 端中间结果压缩(可选,提升 shuffle 性能):
      conf.set(“mapreduce.map.output.compress”, “true”);
      conf.set(“mapreduce.map.output.compress.codec”, “org.apache.hadoop.io.compress.SnappyCodec”);
    • 输入压缩(若输入已压缩):
      conf.set(“mapreduce.input.fileinputformat.input.compress”, “true”);
      conf.set(“mapreduce.input.fileinputformat.input.compress.codec”, “org.apache.hadoop.io.compress.GzipCodec”);
  • Spark 写入压缩(以 Parquet 为例):
    df.write.mode(“overwrite”).option(“compression”, “snappy”).parquet(“hdfs:///path/to/dest”)
  • 提示:选择 SnappyLZO 可获得更快的编解码速度;Gzip/Bzip2 压缩比更高但速度较慢。

四 在 Hive 与列式格式中启用压缩

  • Hive 表存储压缩(ORC 使用 Snappy):
    CREATE TABLE my_table (id INT, name STRING)
    STORED AS ORC
    TBLPROPERTIES (“orc.compress”=“SNAPPY”);
  • 列式格式(如 Parquet/ORC)天然支持压缩,结合合适的编解码器(如 SNAPPY/ZSTD)可在存储与查询性能间取得平衡。

五 常见问题与优化建议

  • 编解码器不可用:检查 core-site.xmlio.compression.codecs 是否包含对应 Codec,并确认节点已安装相应本地库(如 Snappy、LZO、Zstd)。
  • 读取失败或不解压:确认文件扩展名与编解码器匹配,或使用通用接口(如 LzoCodec 处理 .lzo)。
  • 性能与压缩比权衡:
    • 追求速度:选 Snappy/LZO(解压快,适合流式/交互场景)。
    • 追求压缩率:选 Gzip/Bzip2(更省存储,但 CPU 与时间开销更高)。
    • 综合表现:选 Zstandard(压缩比与速度兼顾,需 Hadoop 版本支持)。
  • 存储与计算:结合 Parquet/ORC+压缩 能显著降低存储并提升扫描性能;合理设置 dfs.blocksize 与压缩策略以优化 I/O。

0