hadoop hbase 压缩的使用

hadoop 压缩方式比较

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

目前在Hadoop中常用的几种压缩格式:lzo,gzip,snappy,bzip2,主要特性对比如下:
压缩格式codec类算法扩展名多文件splitablenative工具hadoop自带
deflateDeflateCodecdeflate.deflate
gzipGzipCodecdeflate.gzgzip
bzip2Bzip2Codecbzip2.bz2bzip2
lzoLzopCodeclzo.lzo是[需建索引]lzop
snappySnappyCodecsnappy.snappy
splitable:是否支持可分片

例如压缩后的文件为200MB则会在hdfs中分为2个分片存储,若支持可分片,则每个分片都可单独取出,单独解压;若不支持可分片,则每个分片不可单独解压,只有读取除2个分片后才可进行解压操作;

其性能对比如下:
压缩格式压缩比压缩速率解压速率
gzip/deflate13.4%21 MB/s118 MB/s
bzip213.2%2.4MB/s9.5MB/s
lzo20.5%135 MB/s410 MB/s
snappy22.2%172 MB/s409 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使用压缩后

压缩方式建表缩写原文件大小压缩后
GZIPGZ/gz71.32MB2.67MB
LZOLZO/lzo71.32MB3.37MB
LZ4LZ471.32MB3.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:
<properties>
   <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
   <hadoop.current.version>2.7.3</hadoop.current.version>
   <hadoop.old.version>1.0.4</hadoop.old.version>
</properties>

然后进入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加上如下配置:
   <property>
       <name>io.compression.codecs</name>
       <value>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
           </value>
   </property>
   <property>
       <name>io.compression.codec.lzo.class</name>
       <value>com.hadoop.compression.lzo.LzoCodec</value>
   </property>
  1. 启动hdfs集群
  2. 配置hbase的lzo压缩
  3. 将第3步生成的hadoop-lzo-0.4.18-SNAPSHOT.jar 拷贝到$HBASE_HOME/lib/
  4. 修改hbase的core-site.xml
<property>   
    <name>io.compression.codecs</name>   
	<value>com.hadoop.compression.lzo.LzoCodec,
           com.hadoop.compression.lzo.LzopCodec
    </value>   
</property>   
<property>   
    <name>io.compression.codec.lzo.class</name>   
    <value>com.hadoop.compression.lzo.LzoCodec</value>   
</property>     
--------------------- 
作者: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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值