温馨提示×

Hadoop数据压缩Linux如何设置

小樊
71
2025-11-14 23:32:21
栏目: 智能运维

Linux环境下设置Hadoop数据压缩

一 环境准备与编解码器安装

  • Linux 节点安装所需压缩库(以 Snappy 为例):
    • Debian/Ubuntu:sudo apt-get install -y libsnappy-dev
    • CentOS/RHEL:sudo yum install -y snappy-devel
  • 验证本机可用的原生压缩库(Hadoop 自带工具):
    • hadoop checknative -a
    • 若输出中 Snappytrue,表示库可用;若为 false,需检查库路径、位数匹配(如 x86_64)、环境变量(LD_LIBRARY_PATH)与重启相关进程。

二 配置Hadoop启用压缩

  • 编辑 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.Lz4Codec
    </value>
  </property>
</configuration>
  • 编辑 mapred-site.xml,开启 Map 输出与作业最终输出的压缩(示例用 Snappy):
<configuration>
  <!-- 中间结果(shuffle)压缩 -->
  <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>

  <!-- 作业最终输出压缩 -->
  <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>
  • 如集群使用 Hive/Spark,可叠加存储层压缩(如 ORC/Parquet 的 Snappy)以减少存储与 I/O。

三 命令行与作业中的使用示例

  • 命令行一次性压缩输出(将本地文件处理后写入 HDFS 并压缩为 Snappy):
    • 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.snappy
  • 说明:Hadoop 会根据文件扩展名与编解码器自动完成压缩/解压,多数场景下无需手动解压即可参与后续计算。

四 常用压缩格式选择建议

  • Snappy:压缩/解压速度快、CPU 开销低、压缩比中等;适合 shuffle最终输出 的通用场景。
  • Gzip:压缩比高、速度较慢;适合对存储空间敏感、后续不常随机读的结果归档。
  • Bzip2:压缩比最高、速度最慢,但支持 可分割(splittable);适合大文件离线归档与批处理输入。
  • LZO:需额外索引才支持 splittable;适合大表存储与查询加速(需建索引)。
  • Lz4:极快、压缩比低;适合极致 shuffle 性能场景。

五 常见问题与排查

  • 启用后仍报 Codec 不可用:运行 hadoop checknative -a 确认库加载;检查 LD_LIBRARY_PATH、库版本与 Hadoop 进程是否重启。
  • 压缩后作业变慢:优先使用 Snappy/Lz4 做中间压缩;最终结果再按存储/带宽需求选 Gzip/Bzip2
  • 压缩文件不可分片导致并发差:避免将 Gzip 作为大表输入;选择 Bzip2/LZO(建索引) 或将输入转换为 ORC/Parquet 等列式格式。
  • 是否需要重启服务:修改 core-site.xml/mapred-site.xml 后,需重启 HDFS/YARN 相关进程(如 NameNode、DataNode、ResourceManager、NodeManager)以生效。

0