您的位置:首页 > 运维架构

hadoop——压缩和本地库

2016-07-12 15:38 190 查看
为什么经常把hadoop的本地库和压缩一起说,原来hadoop是使用Java语言开发的,但是一些需求和操作并不适合使用java(性能问题)或某些java类库的缺失,所以就引入了本地库(c/c++编写)的概念,而压缩的一些格式就正好需要使用本地库。

1. 压缩

hadoop中为什么使用压缩,因为压缩既减少了占用磁盘的空间又加快了文件的传输速度。

hadoop中常用到的压缩格式有lzo,lz4,gzip,snappy,bzip2,关于这几种压缩格式的比较如下表

压缩格式文件扩展名是否可切分(split)native压缩率速度是否hadoop自带linux命令换成压缩格式后,原来的应用程序是否要修改
gzip.gz很高比较快和文本处理一样,不需要修改
lzo.lzo比较高很快否,需要安装需要建索引,还需要指定输入格式
snappy.snappy比较高很快否,需要安装没有和文本处理一样,不需要修改
bzip2.bz2最高和文本处理一样,不需要修改
详细参考来源: http://www.linuxidc.com/Linux/2014-05/101230.htm

hadoop中的codec实现了压缩-解压缩算法

压缩格式对应的压缩-解压缩处理类
DEFLATEorg.apache.hadoop.io.compress.DefaultCodec
gziporg.apache.hadoop.io.compress.GzipCodec
bzip2org.apache.hadoop.io.compress.BZip2Codec
LZOcom.hadoop.compression.lzo.LzopCodec
LZ4org.apache.hadoop.io.compress.Lz4Codec
Snappyorg.apache.hadoop.io.compress.SnappyCodec

实际使用举例:

按小时收集服务器日志,并且清洗数据后输出。

解决方案:

因为日志格式是文本文档且量大,所以收集后采用压缩率最高但是速度比较慢的bzip2格式压缩存储,并且bzip2格式压缩支持对输入文件的分片(虽然我们的数据还没到需要分片的地步),在MR执行任务时,会在读取时自动解压缩文件;同时可以对map任务的输出reduce的输出做bzip2格式的压缩处理。

2. 本地库(Native Libraries)

压缩使用native库往往比使用内置java实现压缩解压缩速度快。默认情况下,hadoop会搜索本地库,如果找到就会自动加载,但通常本地库因为版本的原因需要重新安装编译,所以如果使用gzip/LZO/Snappy格式之前需要安装相应库。

下表给出了每种压缩格式的java内置实现和原生库实现

压缩格式是否hadoop自带java实现是否有原生实现
DEFLATE
gzip
bzip2
LZO
LZ4
Snappy
可以使用hadoop checknative查看本地库的安装情况,截图显示已安装



以上待续…
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hadoop 压缩 本地库