HDFS在Ubuntu上的数据压缩如何操作
导读:在 Ubuntu 上使用 HDFS 进行数据压缩的完整操作指南 一 环境准备与编解码器配置 在 Ubuntu 上安装 Hadoop 客户端后,确认已安装所需压缩库(以 Snappy 为例):sudo apt-get install lib...
在 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”) - 提示:选择 Snappy 或 LZO 可获得更快的编解码速度;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.xml 的 io.compression.codecs 是否包含对应 Codec,并确认节点已安装相应本地库(如 Snappy、LZO、Zstd)。
- 读取失败或不解压:确认文件扩展名与编解码器匹配,或使用通用接口(如 LzoCodec 处理 .lzo)。
- 性能与压缩比权衡:
- 追求速度:选 Snappy/LZO(解压快,适合流式/交互场景)。
- 追求压缩率:选 Gzip/Bzip2(更省存储,但 CPU 与时间开销更高)。
- 综合表现:选 Zstandard(压缩比与速度兼顾,需 Hadoop 版本支持)。
- 存储与计算:结合 Parquet/ORC+压缩 能显著降低存储并提升扫描性能;合理设置 dfs.blocksize 与压缩策略以优化 I/O。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: HDFS在Ubuntu上的数据压缩如何操作
本文地址: https://pptw.com/jishu/769550.html
