Hadoop压缩技术的概念
发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,本篇内容主要讲解"Hadoop压缩技术的概念",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Hadoop压缩技术的概念"吧!1 概述压缩策略和原则2 MR
千家信息网最后更新 2025年12月03日Hadoop压缩技术的概念
本篇内容主要讲解"Hadoop压缩技术的概念",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Hadoop压缩技术的概念"吧!
1 概述

压缩策略和原则

2 MR 支持的压缩编码
| 压缩格式 | hadoop自带 | 算法 | 文件扩展名 | 是否可切分 | 换成压缩格式后,原程序是否需要修改 |
|---|---|---|---|---|---|
| DEFLATE | 是,直接使用 | DEFLATE | .deflate | 否 | 和文本处理一样,不需要修改 |
| Gzip | 是,直接使用 | DEFLATE | .gz | 否 | 和文本处理一样,不需要修改 |
| bzip2 | 是,直接使用 | bzip2 | .bz2 | 是 | 和文本处理一样,不需要修改 |
| LZO | 否,需要安装 | LZO | .lzo | 是 | 需要建索引,还需要指定输入格式 |
| Snappy | 否,需要安装 | Snappy | .snappy | 否 | 和文本处理一样,不需要修改 |
为了支持多种压缩/解压缩算法,Hadoop 引入了编码/解码器,如下表所示。
| 压缩格式 | 对应的编码/解码器 |
|---|---|
| DEFLATE | org.apache.hadoop.io.compress.DefaultCodec |
| gzip | org.apache.hadoop.io.compress.GzipCodec |
| bzip2 | org.apache.hadoop.io.compress.BZip2Codec |
| LZO | com.hadoop.compression.lzo.LzopCodec |
| Snappy | org.apache.hadoop.io.compress.SnappyCodec |
压缩性能的比较
| 压缩算法 | 原始文件大小 | 压缩文件大小 | 压缩速度 | 解压速度 |
|---|---|---|---|---|
| gzip | 8.3GB | 1.8GB | 17.5MB/s | 58MB/s |
| bzip2 | 8.3GB | 1.1GB | 2.4MB/s | 9.5MB/s |
| LZO | 8.3GB | 2.9GB | 49.3MB/s | 74.6MB/s |
3 压缩方式选择
3.1 Gzip 压缩
3.2 Bzip2 压缩
3.3 Lzo 压缩
3.4 Snappy 压缩
4 压缩位置选择
5 压缩参数配置
| 参数 | 默认值 | 阶段 |
|---|---|---|
| io.compression.codecs [在core-site.xml] | org.apache.hadoop.io.compress.DefaultCodecorg apache.hadoop.io.compress.GzipCodec org.apache.hadoop.io.compress.BZip2Codec | 输入压缩 |
| mapreduce.map.output.compress [mapred-site.xml] | false | mapper输出 |
| mapreduce.map.output.compress.codec [mapred-site.xml] | org.apache.hadoop.io.compress.DefaultCodec | mapper输出 |
| mapreduce.output.fileoutputformat.compress [mapred-site.xml] | false | reducer输出 |
| mapreduce.output.fileoutputformat.compress.codec [mapred-site.xml] | org.apache.hadoop.io.compress DefaultCodec | reducer输出 |
| mapreduce.output.fileoutputformat.compress.type [mapred-site.xml] | RECORD | reducer输出 |
6 压缩实操案例
6.1 数据流的压缩和解压缩
package com.djm.mapreduce.zip;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.Path;import org.apache.hadoop.io.IOUtils;import org.apache.hadoop.io.compress.CompressionCodec;import org.apache.hadoop.io.compress.CompressionCodecFactory;import org.apache.hadoop.io.compress.CompressionInputStream;import org.apache.hadoop.io.compress.CompressionOutputStream;import org.apache.hadoop.util.ReflectionUtils;import java.io.*;public class CompressUtils { public static void main(String[] args) throws IOException, ClassNotFoundException { compress(args[0], args[1]); decompress(args[0]); } private static void decompress(String path) throws IOException { CompressionCodecFactory factory = new CompressionCodecFactory(new Configuration()); CompressionCodec codec = (CompressionCodec) factory.getCodec(new Path(path)); if (codec == null) { System.out.println("cannot find codec for file " + path); return; } CompressionInputStream cis = codec.createInputStream(new FileInputStream(new File(path))); FileOutputStream fos = new FileOutputStream(new File(path + ".decoded")); IOUtils.copyBytes(cis, fos, 1024); cis.close(); fos.close(); } private static void compress(String path, String method) throws IOException, ClassNotFoundException { FileInputStream fis = new FileInputStream(new File(path)); Class codecClass = Class.forName(method); CompressionCodec codec = (CompressionCodec) ReflectionUtils.newInstance(codecClass, new Configuration()); FileOutputStream fos = new FileOutputStream(new File(path + codec.getDefaultExtension())); CompressionOutputStream cos = codec.createOutputStream(fos); IOUtils.copyBytes(fis, cos, 1024); cos.close(); fos.close(); fis.close(); }}6.2 Map 输出端采用压缩
package com.djm.mapreduce.wordcount;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.Path;import org.apache.hadoop.io.IntWritable;import org.apache.hadoop.io.Text;import org.apache.hadoop.io.compress.BZip2Codec;import org.apache.hadoop.io.compress.CompressionCodec;import org.apache.hadoop.mapreduce.Job;import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;import java.io.IOException;public class WcDriver { public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException { Configuration configuration = new Configuration(); configuration.setBoolean("mapreduce.map.output.compress", true); // 设置map端输出压缩方式 configuration.setClass("mapreduce.map.output.compress.codec", BZip2Codec.class, CompressionCodec.class); Job job = Job.getInstance(configuration); job.setJarByClass(WcDriver.class); job.setMapperClass(WcMapper.class); job.setReducerClass(WcReduce.class); job.setMapOutputKeyClass(Text.class); job.setMapOutputValueClass(IntWritable.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(IntWritable.class); FileInputFormat.setInputPaths(job, new Path(args[0])); FileOutputFormat.setOutputPath(job, new Path(args[1])); boolean result = job.waitForCompletion(true); System.exit(result ? 0 : 1); }}6.3 Reduce 输出端采用压缩
package com.djm.mapreduce.wordcount;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.Path;import org.apache.hadoop.io.IntWritable;import org.apache.hadoop.io.Text;import org.apache.hadoop.io.compress.BZip2Codec;import org.apache.hadoop.io.compress.CompressionCodec;import org.apache.hadoop.mapreduce.Job;import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;import java.io.IOException;public class WcDriver { public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException { Configuration configuration = new Configuration(); Job job = Job.getInstance(configuration); job.setJarByClass(WcDriver.class); job.setMapperClass(WcMapper.class); job.setReducerClass(WcReduce.class); job.setMapOutputKeyClass(Text.class); job.setMapOutputValueClass(IntWritable.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(IntWritable.class); FileInputFormat.setInputPaths(job, new Path(args[0])); FileOutputFormat.setOutputPath(job, new Path(args[1])); // 设置reduce端输出压缩开启 FileOutputFormat.setCompressOutput(job, true); // 设置压缩的方式 FileOutputFormat.setOutputCompressorClass(job, BZip2Codec.class); boolean result = job.waitForCompletion(true); System.exit(result ? 0 : 1); }}到此,相信大家对"Hadoop压缩技术的概念"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
输出
文本
格式
处理
技术
概念
文件
方式
算法
编码
内容
参数
大小
解码器
速度
学习
支持
输入
选择
原始
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
龙腾简合网络技术有限公司
我的世界服务器可以加多少人
昆明软件开发行业
室内手机网络安全
软件开发高中选什么科目
雅安的大数据库建在哪里
数据库管理手机版ios
揭阳软件开发
天门市伏伏加网络技术工作室
招商银行网络安全运维工资
华为hcna网络技术认证
实时数据库设计
做软件开发的公司排行榜
逃离塔科夫建服务器
网络技术介入教学适切性评估
腾讯的图片服务器有多大
软件开发价格信息
通州区信息化软件开发
合肥做手机定位软件开发
家用无线网络安全动画
会计信息化u8数据库是什么
网络安全 留言
网络技术中专
vmware实现多服务器
安卓常用软件开发
自动化网络技术定义
如何配置linux服务器
数据库 A股
软件开发工程师的苦
图像数据库下载