Ubuntu HDFS压缩功能怎么用
Ubuntu环境下HDFS压缩功能使用指南
一、准备工作:安装压缩工具
HDFS支持多种压缩格式(如Gzip、Snappy、LZO、Zstandard等),需根据需求安装对应的Linux工具包。以Ubuntu为例,常用命令如下:
- Gzip(系统自带):无需额外安装,直接使用
gzip
命令。 - Snappy:通过APT安装开发库和工具:
sudo apt-get update sudo apt-get install libsnappy-dev snappy-tools
- LZO:需安装
lzo-devel
和lzop
工具(需手动编译LZO库):sudo apt-get install lzo-dev lzop
- Zstandard (zstd):通过APT安装:
sudo apt-get install zstd
确保Hadoop集群所有节点均安装对应工具,避免压缩/解压时出现兼容性问题。
二、配置Hadoop支持压缩
需修改Hadoop核心配置文件(位于$HADOOP_HOME/etc/hadoop/
目录),启用HDFS对压缩的支持:
1. 修改core-site.xml
配置Hadoop支持的压缩编解码器,指定哪些压缩格式可用于HDFS操作:
<
property>
<
name>
io.compression.codecs<
/name>
<
value>
org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.SnappyCodec,org.apache.hadoop.io.compress.DefaultCodec<
/value>
<
/property>
GzipCodec
:支持Gzip格式;SnappyCodec
:支持Snappy格式;DefaultCodec
:默认压缩格式(无压缩)。
2. (可选)修改hdfs-site.xml
调整HDFS块大小(默认128MB),根据压缩率优化存储效率(如压缩后文件较小,可适当减小块大小):
<
property>
<
name>
dfs.blocksize<
/name>
<
value>
67108864<
/value>
<
!-- 64MB -->
<
/property>
修改完成后,重启Hadoop集群使配置生效:
$HADOOP_HOME/sbin/stop-dfs.sh
$HADOOP_HOME/sbin/start-dfs.sh
三、使用命令行工具进行压缩与解压
1. 本地文件压缩
使用Linux命令行工具将本地文件压缩为HDFS支持的格式:
- Gzip:
gzip -c /local/path/input.txt > /local/path/input.txt.gz
- Snappy:
snappy -c /local/path/input.txt > /local/path/input.txt.snappy
- Zstandard:
zstd -c /local/path/input.txt > /local/path/input.txt.zst
2. 上传压缩文件到HDFS
使用hadoop fs -put
命令将本地压缩文件上传至HDFS目标路径:
hadoop fs -put /local/path/input.txt.gz /hdfs/path/destination/
3. HDFS文件解压
将HDFS中的压缩文件下载至本地,再用Linux工具解压:
- 下载文件:
hadoop fs -get /hdfs/path/destination/input.txt.gz /local/path/
- 解压文件:
gzip -d /local/path/input.txt.gz # 解压为input.txt
4. 直接上传压缩文件(可选)
使用hadoop fs -put
的-compress
选项,直接将本地未压缩文件上传并压缩到HDFS:
hadoop fs -put -compress snappy /local/path/input.txt /hdfs/path/destination/
此命令会自动将input.txt
压缩为Snappy格式并上传至HDFS。
四、在MapReduce作业中使用压缩
若需在MapReduce作业中压缩中间数据或最终输出,需配置作业参数:
1. 启用Map输出压缩
减少Map任务到Reduce任务的中间数据传输量:
Configuration conf = new Configuration();
conf.set("mapreduce.map.output.compress", "true");
conf.set("mapreduce.map.output.compress.codec", "org.apache.hadoop.io.compress.SnappyCodec");
2. 启用最终输出压缩
压缩Reduce任务的输出结果(如保存到HDFS的文件):
conf.set("mapreduce.output.fileoutputformat.compress", "true");
conf.set("mapreduce.output.fileoutputformat.compress.codec", "org.apache.hadoop.io.compress.GzipCodec");
3. 提交作业
将配置应用到MapReduce作业(如Java程序)并提交:
Job job = Job.getInstance(conf, "Compressed MapReduce Job");
// 设置其他作业参数(如输入输出路径、Mapper/Reducer类)
System.exit(job.waitForCompletion(true) ? 0 : 1);
五、验证压缩效果
-
检查HDFS中的压缩文件:
hadoop fs -ls /hdfs/path/destination/
输出应显示压缩后的文件(如
input.txt.gz
、input.txt.snappy
)。 -
查看文件内容:
- 对于Gzip文件:
hadoop fs -cat /hdfs/path/destination/input.txt.gz | gzip -d
- 对于Snappy文件:
hadoop fs -cat /hdfs/path/destination/input.txt.snappy | snappy -d
- 对于Gzip文件:
-
检查压缩率:
hadoop fs -du -h /hdfs/path/destination/input.txt.gz # 查看压缩后大小 hadoop fs -du -h /local/path/input.txt # 查看原始大小
注意事项
- 压缩格式选择:
- 需要高压缩比且不频繁随机访问:选Bzip2;
- 需要快速压缩/解压:选Snappy或LZO;
- 平衡压缩比与速度:选Zstandard(推荐)。
- Split支持:Gzip不支持split(需整个文件解压才能读取),适合小文件;Snappy、LZO支持split,适合大文件。
- 资源消耗:压缩/解压会占用CPU资源,建议在集群低峰时段操作。
- 节点一致性:所有DataNode必须安装对应压缩工具,否则无法解压数据。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu HDFS压缩功能怎么用
本文地址: https://pptw.com/jishu/720451.html