阅读量:3
Hadoop数据压缩在Linux上的配置指南
1. 准备工作:选择压缩格式
Hadoop原生支持多种压缩格式,需根据压缩比、速度、是否支持split等需求选择:
- Snappy:高速压缩/解压(适合MapReduce中间数据,如map输出),但压缩率较低(约50%),不支持split。
- Gzip:高压缩比(约68%),速度适中,Hadoop原生支持,但不支持split(适合小文件,如单文件<128MB)。
- Bzip2:最高压缩比(约72%),但速度慢,支持split,适合归档大文件。
- LZO:平衡速度与压缩率(约51%),支持split(需建索引),但需额外安装。
- Zstandard(Zstd):兼顾速度与压缩比(比Snappy更高),需Hadoop 2.7+支持。
2. 安装压缩编解码器依赖
根据选择的格式安装对应库(以Snappy、Gzip为例):
- Snappy(推荐用于中间数据):
# Debian/Ubuntu sudo apt-get install libsnappy-dev # CentOS/RHEL sudo yum install snappy-devel - Gzip(Linux自带,无需额外安装):
# 检查是否安装 gzip --version - LZO(需支持split):
# 安装lzo-devel和lzop sudo yum install lzo-devel lzop # 编译Hadoop时需开启LZO支持(参考Hadoop官方文档)
3. 配置Hadoop核心参数
修改Hadoop配置文件(位于$HADOOP_HOME/etc/hadoop/),启用压缩功能:
3.1 配置core-site.xml(全局压缩编解码器)
<configuration>
<property>
<name>io.compression.codecsname>
<value>org.apache.hadoop.io.compress.SnappyCodec,org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.DefaultCodecvalue>
property>
configuration>
3.2 配置mapred-site.xml(MapReduce作业压缩)
<configuration>
<property>
<name>mapreduce.map.output.compressname>
<value>truevalue>
property>
<property>
<name>mapreduce.map.output.compress.codecname>
<value>org.apache.hadoop.io.compress.SnappyCodecvalue>
property>
<property>
<name>mapreduce.output.fileoutputformat.compressname>
<value>truevalue>
property>
<property>
<name>mapreduce.output.fileoutputformat.compress.codecname>
<value>org.apache.hadoop.io.compress.BZip2Codecvalue>
property>
configuration>
3.3 配置hdfs-site.xml(HDFS块大小优化)
<configuration>
<property>
<name>dfs.blocksizename>
<value>134217728value>
property>
<property>
<name>dfs.namenode.handler.countname>
<value>100value>
property>
<property>
<name>dfs.datanode.handler.countname>
<value>100value>
property>
configuration>
4. 重启Hadoop服务
使配置生效:
# 根据实际服务名调整(如hadoop-namenode、hadoop-datanode等)
sudo systemctl restart hadoop-namenode
sudo systemctl restart hadoop-datanode
sudo systemctl restart hadoop-resourcemanager
sudo systemctl restart hadoop-nodemanager
5. 验证压缩功能
5.1 命令行上传压缩文件到HDFS
# 使用Snappy压缩上传本地文件
hadoop fs -put -f -D mapreduce.output.fileoutputformat.compress=true \
-D mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.SnappyCodec \
localfile.txt /user/hadoop/output/compressed_snappy/
5.2 查看压缩文件
# 列出HDFS中的压缩文件
hadoop fs -ls /user/hadoop/output/compressed_snappy/
# 下载并解压文件
hadoop fs -get /user/hadoop/output/compressed_snappy/localfile.txt.snappy ./localfile.txt
# 使用gunzip解压(如果是Gzip格式)
gunzip localfile.txt.gz
5.3 运行MapReduce作业验证
编写MapReduce程序(如WordCount),在驱动类中设置压缩配置:
Configuration conf = new Configuration();
conf.set("mapreduce.output.fileoutputformat.compress", "true");
conf.set("mapreduce.output.fileoutputformat.compress.codec", "org.apache.hadoop.io.compress.SnappyCodec");
Job job = Job.getInstance(conf, "WordCount");
// 其他配置...
System.exit(job.waitForCompletion(true) ? 0 : 1);
提交作业后,检查输出目录是否生成压缩文件(如.snappy后缀)。
注意事项
- LZO索引:若使用LZO格式,需为压缩文件创建索引(使用
lzopindex命令),并在MapReduce作业中指定LzoTextInputFormat。 - 压缩比与性能权衡:高压缩比(如Bzip2)会增加CPU开销和作业时间,适合归档;低压缩比(如Snappy)适合实时处理。
- 兼容性:确保压缩格式与Hadoop版本兼容(如Zstd需Hadoop 2.7+)。
以上就是关于“Hadoop数据压缩Linux上如何配置”的相关介绍,筋斗云是国内较早的云主机应用的服务商,拥有10余年行业经验,提供丰富的云服务器、租用服务器等相关产品服务。云服务器资源弹性伸缩,主机vCPU、内存性能强悍、超高I/O速度、故障秒级恢复;电子化备案,提交快速,专业团队7×24小时服务支持!
简单好用、高性价比云服务器租用链接:https://www.jindouyun.cn/product/cvm