hadoop hbase 压缩的使用

hadoop 压缩方式比较

转载: https://blog.csdn.net/zhouyan8603/article/details/82954459

目前在Hadoop中常用的几种压缩格式:lzo,gzip,snappy,bzip2,主要特性对比如下:

压缩格式 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
splitable:是否支持可分片

例如压缩后的文件为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
gzip
压缩率比较高,而且压缩/解压速度也比较快;
hadoop本身支持,在应用中处理gzip格式的文件就和直接处理文本一样;
有hadoop native库;
大部分linux系统都自带gzip命令,使用方便;
不支持split;

因此 gzip ①适用于压缩后的文件大小在120M以内(haoop2的标准block大小是120M)的处理,可以有效提高读的并发,对hive,streaming,Java 等mr程序透明,无需修改原程序;
②且由于gzip拥有较高的压缩比,因此相比于其他压缩算法,更适用于冷数据(计算不频繁)的存储
bzip2
支持split,支持多文件;
具有很高的压缩率,比gzip压缩率都高;
hadoop本身支持,但不支持native;
在linux系统下自带bzip2命令,使用方便;
压缩/解压速度很慢;
不支持native;

因此①适合对速度要求不高,但需要较高的压缩率的时候,可以作为mapreduce作业的输出格式
②输出之后的数据比较大,处理之后的数据需要压缩存档减少磁盘空间并且以后数据用得比较少的情况
③对单个很大的文本文件想压缩减少存储空间,同时又需要支持split,而且兼容之前的应用程序(即应用程序不需要修改)的情况
lzo
压缩/解压速度也比较快,合理的压缩率;
支持split,是hadoop中最流行的压缩格式(需要建索引,文件修改后需要重新建索引);
支持hadoop native库;
可以在linux系统下安装lzop命令,使用方便;
压缩率比gzip要低一些;
hadoop本身不支持,需要安装;
在应用中对lzo格式的文件需要做一些特殊处理(为了支持split需要建索引,还需要指定inputformat为lzo格式);

因此①适用于较大文本的处理
snappy
高速压缩速度和合理的压缩率;
支持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图像),则不建议再压缩

hdfs hbase 配置LZO压缩的过程

转载:https://blog.csdn.net/qq_26369213/article/details/79450455

  1. 下载lzo-2.06.tar.gz,hadoop-lzo-master.zip
  2. 编译生成lzo native library
[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
  1. 编译 hadoop-lzo
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环境变量
   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
   
  1. 启动hdfs集群
  2. 配置hbase的lzo压缩
  3. 将第3步生成的hadoop-lzo-0.4.18-SNAPSHOT.jar 拷贝到$HBASE_HOME/lib/
  4. 修改hbase的core-site.xml
   
    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. 启动hbase集群
  2. 运行hbase shell
  3. 创建lzo压缩格式的表格:create ‘testtable’,{NAME => ‘F1’,COMPRESSION => ‘LZO’}

hbase的压缩 本地库 注意事项

  1. 在运行hbase shell的时候如果有warn 说加载不了hadoop native lib
    解决方法:
	1. 若hadoop和hbase安装在同一台机器,配置下环境变量即可
	LD_LIBRARY_PATH=$HADOOP_HOME/lib/native:$LD_LIBRARY_PATH
	2. 若hadoop和hbase没有安装在同一台机器,则把hadoop/lib下的native拷贝到hbase所在的机器某一目录下。并将配置环境变量LD_LIBRARY_PATH执行该目录即可
  1. hbase支持的压缩方式GZ LZO LZ4 NONE BZIP2 SNAPPY
    其中GZ LZ4不用单独安装配置,默认支持

  2. 修改hbase已有表的压缩格式

	disable 'testtable'
	alter 'testtable',NAME => 'F1', COMPRESSION => 'LZO'
	enable 'testtable'
	major_compact 'testtable' #只有运行这个才开始执行压缩格式的修改,并释放空间
此时去hdfs中查看会看到修改前和修改后2个压缩数据块,过段时间修改前的压缩数据块则被删除掉

hdfs hbase 配置Snappy压缩的过程待补充…

CDH安装hadoop方式自带Snappy库,如果不是cdh安装则需要自行打包

hdfs 客户端存储和读取文件的压缩操作,待补充…

参考:https://www.cnblogs.com/liuling/p/2013-6-19-01.html

你可能感兴趣的:(hadoop)