优点
支持Split;具有很高的压缩率,比Gzip压缩率都高;Hadoop本身自带,使用方便。
缺点
压缩/解解压速度慢。
应用场景
适合对速度要求不高,但需要较高的压缩率的时候;或者输出之后的数据比较大,处理之后的数据需要压缩存档减少磁盘空间并且以后数据用得比较少的情况;或者对单个很大的文本文件想压缩减少存储空间,同时又需要支持Split,而且兼容之前的应用程序的情况。
3.Lzo压缩
优点
压缩/解压速度也比较快,合理的压缩率;支持Split,是Hadoop中最流行的压缩格式;可以在Linux系统下安装lzop命令,使用方便。
缺点
压缩率比Gzip要低一些;Hadoop本身不支持,需要安装;在应用中对Lzo格式的文件需要做一些特殊处理(为了支持split需要建索引,还需要指定InputFormat为Lzo格式)。
应用场景
一个很大的文本文件,压缩之后还大于200M以上的可以考虑,而且单个文件越大,Lzo优点越明显。
4.Snappy压缩
优点
高速压缩速度和合理的压缩率。
缺点
不支持Split;压缩率比Gzip要低;Hadoop本身不支持,需要安装。
应用场景
当MapReducel作业的Map输出的数据比较大的时候,作为Map到Reduce的中间数据的压缩格式;或者作为一个MapReduce作业的输出和另外一个MapReduce作业的输入。
压缩位置选择
压缩可以在MapReduce作用的任意阶段启用。如下图:
压缩参数配置
数据流的压缩和解压缩
CormpressionCodec有两个方法可以用于轻松地压缩或解压缩数据。要想对正在被写入一个输出流的数据进行压缩,我们可以使用createOutputStrean(OutputStreamout)方法创建一个CompressionOutputStream,将其以压缩格式写入底层的流。
相反,要想对从输入流读取而来的数据进行解压缩,则调用createInputStrearn(InputStreamin)函数,从而获得一个CompressionInputStream,从而从底层的流读取未压缩的数据。
代码实现
package com.atguigu.mr.compress;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
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;
public class TestCompress {
public static void main(String[] args) throws ClassNotFoundException, IOException {
//压缩方式
// compress(“S:\centos学习笔记\安装说明.txt”,“org.apache.hadoop.io.compress.BZip2Codec”);
// compress(“S:\centos学习笔记\安装说明.txt”,“org.apache.hadoop.io.compress.GzipCodec”);
compress(“S:\centos学习笔记\安装说明.txt”,“org.apache.hadoop.io.compress.DefaultCodec”);
// 解压缩
decompression(“S:\\centos学习笔记\\安装说明.txt.gz”);
}
private static void decompression(String fileName) throws IOException {
//1 压缩方式合法性检查
CompressionCodecFactory factory = new CompressionCodecFactory(new Configuration());
CompressionCodec codec = factory.getCodec(new Path(fileName));
if (codec == null) {
System.out.println(“can not process”);
return;
}
//获取输入流
FileInputStream fis = new FileInputStream(new File(fileName));
CompressionInputStream cis = codec.createInputStream(fis);
//获取输出流
FileOutputStream fos = new FileOutputStream(new File(fileName+“.decode”));
先自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以扫码领取!
![img](https://img-blog.csdnimg.cn/img_convert/9b8c90ab51dde01c6c59d21251d19782.jpeg)
Kafka进阶篇知识点
Kafka高级篇知识点
44个Kafka知识点(基础+进阶+高级)解析如下
由于篇幅有限,小编已将上面介绍的**《Kafka源码解析与实战》、Kafka面试专题解析、复习学习必备44个Kafka知识点(基础+进阶+高级)都整理成册,全部都是PDF文档**
Kafka**高级篇知识点
[外链图片转存中…(img-jCVVPYKr-1711367548588)]
44个Kafka知识点(基础+进阶+高级)解析如下
[外链图片转存中…(img-6baeCKnt-1711367548589)]
由于篇幅有限,小编已将上面介绍的**《Kafka源码解析与实战》、Kafka面试专题解析、复习学习必备44个Kafka知识点(基础+进阶+高级)都整理成册,全部都是PDF文档**
需要更多Java资料的小伙伴可以帮忙点赞+关注,点击传送门,即可免费领取!