Ubuntu Hadoop 数据压缩实操指南
一 常用压缩格式与选型
二 环境准备与可用编解码器检查
sudo apt-get install -y libsnappy-devsudo apt-get install -y liblzo2-2 liblzo2-devhadoop checknative。若状态为 false,需安装对应 native 库或调整库路径。<configuration>
<property>
<name>io.compression.codecs</name>
<value>
org.apache.hadoop.io.compress.SnappyCodec,
org.apache.hadoop.io.compress.GzipCodec,
org.apache.hadoop.io.compress.BZip2Codec,
org.apache.hadoop.io.compress.Lz4Codec,
com.hadoop.compression.lzo.LzoCodec,
com.hadoop.compression.lzo.LzopCodec
</value>
</property>
</configuration>
如需使用 LZO,还需添加:io.compression.codec.lzo.class=com.hadoop.compression.lzo.LzoCodec。三 在 MapReduce 中启用压缩
Configuration conf = new Configuration();
conf.setBoolean("mapreduce.map.output.compress", true);
conf.set("mapreduce.map.output.compress.codec",
"org.apache.hadoop.io.compress.SnappyCodec"); // 或 Lz4Codec
conf.setBoolean("mapreduce.output.fileoutputformat.compress", true);
conf.setString("mapreduce.output.fileoutputformat.compress.codec",
"org.apache.hadoop.io.compress.GzipCodec"); // 归档用 Gzip/BZip2
hadoop jar your-job.jar \
-D mapreduce.output.fileoutputformat.compress=true \
-D mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.SnappyCodec \
input output
hadoop checknative 输出。四 在 Hive 与 Spark 中使用压缩
SET hive.exec.compress.output=true;
SET mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.SnappyCodec;
SET mapreduce.map.output.compress=true;
SET mapreduce.map.output.compress.codec=org.apache.hadoop.io.compress.SnappyCodec;
STORED AS ORC TBLPROPERTIES ("orc.compress"="SNAPPY")。spark.sql("SET spark.sql.parquet.compression.codec=snappy")
df.write.mode("overwrite").parquet("hdfs:///path/out")
-- Spark 3.x
spark.conf.set("spark.shuffle.compress", "true")
spark.conf.set("spark.io.compression.codec", "snappy")
五 LZO 索引与常见问题处理
# 使用 hadoop-lzo 提供的索引工具(需先部署 hadoop-lzo)
hadoop jar /path/hadoop-lzo.jar com.hadoop.compression.lzo.LzoIndexer /data/file.lzo
建索引后,配合 LzoCodec 与正确的 InputFormat 即可实现分片读取。hadoop checknative 排查 native 库;确认 core-site.xml 已正确声明编解码器;必要时在 hadoop-env.sh 中补充 HADOOP_CLASSPATH 指向相关 JAR。