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.codecsname>
<value>org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.SnappyCodec,org.apache.hadoop.io.compress.DefaultCodecvalue>
property>
GzipCodec:支持Gzip格式;SnappyCodec:支持Snappy格式;DefaultCodec:默认压缩格式(无压缩)。
2. (可选)修改hdfs-site.xml
调整HDFS块大小(默认128MB),根据压缩率优化存储效率(如压缩后文件较小,可适当减小块大小):
<property>
<name>dfs.blocksizename>
<value>67108864value>
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必须安装对应压缩工具,否则无法解压数据。
以上就是关于“Ubuntu HDFS压缩功能怎么用”的相关介绍,筋斗云是国内较早的云主机应用的服务商,拥有10余年行业经验,提供丰富的云服务器、租用服务器等相关产品服务。云服务器资源弹性伸缩,主机vCPU、内存性能强悍、超高I/O速度、故障秒级恢复;电子化备案,提交快速,专业团队7×24小时服务支持!
简单好用、高性价比云服务器租用链接:https://www.jindouyun.cn/product/cvm