转载: https://blog.csdn.net/zhouyan8603/article/details/82954459
压缩格式 | codec类 | 算法 | 扩展名 | 多文件 | splitable | native | 工具 | hadoop自带 |
---|---|---|---|---|---|---|---|---|
deflate | DeflateCodec | deflate | .deflate | 否 | 否 | 是 | 无 | 是 |
gzip | GzipCodec | deflate | .gz | 否 | 否 | 是 | gzip | 是 |
bzip2 | Bzip2Codec | bzip2 | .bz2 | 是 | 是 | 否 | bzip2 | 是 |
lzo | LzopCodec | lzo | .lzo | 否 | 是[需建索引] | 是 | lzop | 否 |
snappy | SnappyCodec | snappy | .snappy | 否 | 否 | 是 | 无 | 否 |
例如压缩后的文件为200MB则会在hdfs中分为2个分片存储,若支持可分片,则每个分片都可单独取出,单独解压;若不支持可分片,则每个分片不可单独解压,只有读取除2个分片后才可进行解压操作;
压缩格式 | 压缩比 | 压缩速率 | 解压速率 |
---|---|---|---|
gzip/deflate | 13.4% | 21 MB/s | 118 MB/s |
bzip2 | 13.2% | 2.4MB/s | 9.5MB/s |
lzo | 20.5% | 135 MB/s | 410 MB/s |
snappy | 22.2% | 172 MB/s | 409 MB/s |
压缩率比较高,而且压缩/解压速度也比较快;
hadoop本身支持,在应用中处理gzip格式的文件就和直接处理文本一样;
有hadoop native库;
大部分linux系统都自带gzip命令,使用方便;
不支持split;
因此 gzip ①适用于压缩后的文件大小在120M以内(haoop2的标准block大小是120M)的处理,可以有效提高读的并发,对hive,streaming,Java 等mr程序透明,无需修改原程序;
②且由于gzip拥有较高的压缩比,因此相比于其他压缩算法,更适用于冷数据(计算不频繁)的存储
支持split,支持多文件;
具有很高的压缩率,比gzip压缩率都高;
hadoop本身支持,但不支持native;
在linux系统下自带bzip2命令,使用方便;
压缩/解压速度很慢;
不支持native;
因此①适合对速度要求不高,但需要较高的压缩率的时候,可以作为mapreduce作业的输出格式
②输出之后的数据比较大,处理之后的数据需要压缩存档减少磁盘空间并且以后数据用得比较少的情况
③对单个很大的文本文件想压缩减少存储空间,同时又需要支持split,而且兼容之前的应用程序(即应用程序不需要修改)的情况
压缩/解压速度也比较快,合理的压缩率;
支持split,是hadoop中最流行的压缩格式(需要建索引,文件修改后需要重新建索引);
支持hadoop native库;
可以在linux系统下安装lzop命令,使用方便;
压缩率比gzip要低一些;
hadoop本身不支持,需要安装;
在应用中对lzo格式的文件需要做一些特殊处理(为了支持split需要建索引,还需要指定inputformat为lzo格式);
因此①适用于较大文本的处理
高速压缩速度和合理的压缩率;
支持hadoop native库;
不支持split;
压缩率比gzip要低;
hadoop本身不支持,需要安装;
linux系统下没有对应的命令
因此① 当mapreduce作业的map输出的数据比较大的时候,作为map到reduce的中间数据的压缩格式;
②或者作为一个mapreduce作业的输出和另外一个mapreduce作业的输入
“作为中间过度”
实际测试hbase使用压缩后
压缩方式 | 建表缩写 | 原文件大小 | 压缩后 |
---|---|---|---|
GZIP | GZ/gz | 71.32MB | 2.67MB |
LZO | LZO/lzo | 71.32MB | 3.37MB |
LZ4 | LZ4 | 71.32MB | 3.53MB |
所有算法的实现均在org.apache.hadoop.io.compress包下面;如果原始数据已经压缩(jpeg图像),则不建议再压缩
转载:https://blog.csdn.net/qq_26369213/article/details/79450455
[root@localhost ~]# tar -zxvf lzo-2.06.tar.gz
[root@localhost ~]# cd lzo-2.06
[root@localhost ~]# export CFLAGS=-m64
[root@localhost ~]# ./configure -enable-shared - prefix=/usr/local/hadoop/lzo/
[root@localhost ~]# make && sudo make install
编译完lzo包之后,会在/usr/local/hadoop/lzo/生成一些文件。
在编译lzo包的时候,需要一些环境,可以用下面的命令安装好lzo编译环境
[root@localhost ~]# yum -y install lzo-devel zlib-devel gcc autoconf automake libtool
hadoop-lzo中的pom.xml依赖了hadoop2.1.0-beta,由于我们这里用到的是 Hadoop 2.7.3,所以建议将hadoop版本修改为2.7.3:
UTF-8
2.7.3
1.0.4
然后进入hadoop-lzo-master目录,依次执行下面的命令
[root@localhost ~]# export CFLAGS=-m64
[root@localhost ~]# export CXXFLAGS=-m64
[root@localhost ~]# export C_INCLUDE_PATH=/usr/local/hadoop/lzo/include
[root@localhost ~]# export LIBRARY_PATH=/usr/local/hadoop/lzo/lib
[root@localhost ~]# mvn clean package -Dmaven.test.skip=true
[root@localhost ~]# cd target/native/Linux-amd64-64
[root@localhost ~]# tar -cBf - -C lib . | tar -xBvf - -C ~
[root@localhost ~]# cp ~/libgplcompression* $HADOOP_HOME/lib/native/
[root@localhost ~]# cp target/hadoop-lzo-0.4.18-SNAPSHOT.jar $HADOOP_HOME/share/hadoop/common/
其实在tar -cBf – -C lib . | tar -xBvf – -C ~命令之后,会在~目录下生成一下几个文件:
[root@localhost ~]# ls -l
1-rw-r--r-- 1 libgplcompression.a
2-rw-r--r-- 1 libgplcompression.la
3lrwxrwxrwx 1 libgplcompression.so -> libgplcompression.so.0.0.0
4lrwxrwxrwx 1 libgplcompression.so.0 -> libgplcompression.so.0.0.0
5-rwxr-xr-x 1 libgplcompression.so.0.0.0
其中libgplcompression.so和libgplcompression.so.0是链接文件,指向libgplcompression.so.0.0.0,将刚刚生成的libgplcompression*和target/hadoop-lzo-0.4.18-SNAPSHOT.jar同步到集群中的所有机器对应的目录。
1、在Hadoop中的$HADOOP_HOME/etc/hadoop/hadoop-env.sh加上下面配置:
export LD_LIBRARY_PATH=/usr/local/hadoop/lzo/lib
如果别的地方也有用到该lzo的lib,可将其放在全局的环境变量中
export LD_LIBRARY_PATH=/usr/local/hadoop/lzo/lib:$LD_LIBRARY_PATH
2、在$HADOOP_HOME/etc/hadoop/core-site.xml加上如下配置:
io.compression.codecs
org.apache.hadoop.io.compress.GzipCodec,
org.apache.hadoop.io.compress.DefaultCodec,
com.hadoop.compression.lzo.LzoCodec,
com.hadoop.compression.lzo.LzopCodec,
org.apache.hadoop.io.compress.BZip2Codec
io.compression.codec.lzo.class
com.hadoop.compression.lzo.LzoCodec
io.compression.codecs
com.hadoop.compression.lzo.LzoCodec,
com.hadoop.compression.lzo.LzopCodec
io.compression.codec.lzo.class
com.hadoop.compression.lzo.LzoCodec
---------------------
作者:Hansion徐汉彬
来源:CSDN
原文:https://blog.csdn.net/qq_22520587/article/details/62455651
版权声明:本文为博主原创文章,转载请附上博文链接!
1. 若hadoop和hbase安装在同一台机器,配置下环境变量即可
LD_LIBRARY_PATH=$HADOOP_HOME/lib/native:$LD_LIBRARY_PATH
2. 若hadoop和hbase没有安装在同一台机器,则把hadoop/lib下的native拷贝到hbase所在的机器某一目录下。并将配置环境变量LD_LIBRARY_PATH执行该目录即可
hbase支持的压缩方式GZ LZO LZ4 NONE BZIP2 SNAPPY
其中GZ LZ4不用单独安装配置,默认支持
修改hbase已有表的压缩格式
disable 'testtable'
alter 'testtable',NAME => 'F1', COMPRESSION => 'LZO'
enable 'testtable'
major_compact 'testtable' #只有运行这个才开始执行压缩格式的修改,并释放空间
此时去hdfs中查看会看到修改前和修改后2个压缩数据块,过段时间修改前的压缩数据块则被删除掉
CDH安装hadoop方式自带Snappy库,如果不是cdh安装则需要自行打包
参考:https://www.cnblogs.com/liuling/p/2013-6-19-01.html