关于几种压缩算法以及hadoop和hbase中的压缩配置说明

转载 2018年04月16日 17:50:39

Hadoop中常用的压缩算法有bzip2、gzip、lzo、snappy,其中lzo、snappy需要操作系统安装native库才可以支持

下面这张表,是比较官方一点的统计,不同的场合用不同的压缩算法。bzip2和GZIP是比较消耗CPU的,压缩比最高,GZIP不能被分块并行的处理;Snappy和LZO差不多,稍微胜出一点,cpu消耗的比GZIP少。

通常情况下,想在CPU和IO之间取得平衡的话,用Snappy和lzo比较常见一些。

Comparison between compression algorithms

Algorithm% remainingEncodingDecoding
GZIP13.4%21 MB/s118 MB/s
LZO20.5%135 MB/s410 MB/s
Snappy22.2%172 MB/s409 MB/s

 

对于数据格式为TextFile,Sequence,以及其他用户自定义的文件格式的文件,都可以采用以上的压缩算法进行压缩;

TextFile在压缩以后,不能split,压缩出来的数据当做job的输入是一个文件作为一个map。SequenceFile本身是分块的,加上lzo的压缩格式,文件可以实现lzo方式的split操作,可以按照record、block进行压缩,一般采用block效率更高一些。

一、hadoop(hive)对mapreduce压缩参数设置
1、mapreduce的中间结果对压缩的支持

方法一:

hadoop 中 mapred-site.xml

<property>

<name>mapred.compress.map.output</name>

<value>true</value>

</property>

<property>

<name>mapred.map.output.compression.codec</name>

<value>com.hadoop.compression.lzo.LzoCodec</value>

</property>


 方法二

hive中hive-site.xml

<property>
  <name>hive.exec.compress.intermediate</name>
  <value>true</value>
  <description>Should the outputs of the maps be compressed before being
               sent across the network. Uses SequenceFile compression.
  </description>
</property>
<property>
  <name>hive.intermediate.compression.codec</name>
  <value>org.apache.hadoop.io.compress.LzoCodec</value>
  <description>If the map outputs are compressed, how should they be
               compressed?
  </description>
</property>
方法三
hive中shell
set hive.exec.compress.intermediate=true;

set hive.intermediate.compression.codec="org.apache.hadoop.io.compress.LzoCodec";

 

2、mapreduce的输出结果对压缩的支持

hive-site.xml中配置:

<property>
  <name>hive.exec.compress.output</name>
  <value>true</value>
  <description>Should the job outputs be compressed?
  </description>
</property>
<property>
  <name>mapred.output.compression.codec</name>
  <value>org.apache.hadoop.io.compress.LzoCodec</value>
  <description>If the job outputs are compressed, how should they be compressed?
  </description>
</property>

 

或者在hadoop-site.xml中添加:

<property>
  <name>io.compression.codecs</name>
  <value>org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.BZip2Codec,org.apache.hadoop.io.compress.LzoCodec</value>
  <description>A list of the compression codec classes that can be used
               for compression/decompression.</description>
</property>
<property>
  <name>mapred.output.compress</name>
  <value>true</value>
  <description>Should the job outputs be compressed?
  </description>
</property>
<property>
  <name>mapred.output.compression.codec</name>
  <value>org.apache.hadoop.io.compress.LzoCodec</value>
  <description>If the job outputs are compressed, how should they be compressed?
  </description>
</property>

 

二、HBASE对这三种压缩格式的支持

HBase中可以对HFile进行gzip、lzo、snappy方式的压缩存储。

1、对于gzip压缩的支持
hbase(main):001:0> create 'testtable', { NAME => 'colfam1',
COMPRESSION => 'GZ' }

或者alter 'testtable',不过要先disable table,完成压缩后,再enable table

2、对于lzo的支持,需要系统安装lzo动态库,以及hadoop lzo相关的native库,后把native库jar文件copy到hadoop/lib/native 及 hbase/lib/native中
   同时在core-site.xml中,配置lzo压缩
      
       <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
        </value>
       </property>
      <property>
        <name>io.compression.codec.lzo.class</name>
        <value>com.hadoop.compression.lzo.LzoCodec</value>
      </property>

org.apache.hadoop.io.compress.DefaultCodec是hadoop默认的zlib压缩

hbase(main):001:0> create 'testtable', { NAME => 'colfam1',
COMPRESSION => 'lzo' }
 3、  对于synappy的支持,需要安装snappy,并且 将 hadoop-snappy-0.0.1-SNAPSHOT.tar.gz 的native中的动态静态链接库文件拷到hadoop以及hbase lib的native下面,将hadoop-snappy-0.0.1-SNAPSHOT.jar考到hadoop 以及hbase 的lib下
   在core-site.xml中,配置lzo压缩
      
       <property>
         <name>io.compression.codecs</name>
         <value>org.apache.hadoop.io.compress.SnappyCodec
        </value>
       </property>

hbase(main):001:0> create 'testtable', { NAME => 'colfam1',
COMPRESSION => 'synappy' }

Hadoop,Hbase,Nutch,Sorl 安装教程

本课程将主要面向之前未接触过Hadoop,Hbase,Nutch,Solr的学员,讲解如何安装该四个软件。能够将Nutch抓取的网页数据放到Hbase中存储,建立索引放到Solr中,并通过SolrJ获取到数据。
  • 2017年09月17日 18:46

HBase 压缩算法设置及修改

Compression就是在用CPU换IO吞吐量/磁盘空间,如果没有什么特殊原因推荐针对Column Family设置compression,下面主要有三种算法: GZIP, LZO, Snappy,...
  • jingling_zy
  • jingling_zy
  • 2012-02-14 14:20:37
  • 4498

hadoop常用的压缩算法总结和实验验证

hadoop常用压缩算法性能总结,包括snappy、gzip、bzip2、LZ4、LZO、deflate等算法
  • chaolovejia
  • chaolovejia
  • 2015-08-24 23:13:39
  • 1338

hbase压缩算法-Snappy算法安装

Compression就是在用CPU换IO吞吐量/磁盘空间,如果没有什么特殊原因推荐针对Column Family设置compression,下面主要有三种算法: GZIP, LZO, Snappy,...
  • fengzheku
  • fengzheku
  • 2016-03-30 11:01:31
  • 2163

在hadoop2.X集群中安装压缩工具snappy(主要用于hbase)

在hadoop集群中snappy是一种比较好的压缩工具,相对gzip压缩速度和解压速度有很大的优势,而且相对节省cpu资源,但压缩率不及gzip。在此不讨论孰优孰劣,各有各的用途。 在此,hadoo...
  • qq_27078095
  • qq_27078095
  • 2017-02-25 00:38:01
  • 3076

hadoop压缩算法的总结

1. 压缩成为必须 对数据的3个关键特征描述 3V:volume、variety和value。 volume,数据量与日俱增,在于智能手机、Internet和感知器等的使用。 variety...
  • victory0508
  • victory0508
  • 2015-08-23 12:37:33
  • 1459

Hadoop Snappy压缩算法简介

本篇文章做了小部分更改,仅介绍了Snappy,去掉了安装过程,不过不必叹气,更加详细的Hadoop Snappy及HBase Snappy的安装步骤已经另起了一篇文章专门来介绍:Hadoop HB...
  • mango_song
  • mango_song
  • 2014-01-23 10:38:00
  • 2378

几种压缩算法的原理介绍

本文主要内容由罗蒙·迪翁发表于2006-01-07 20:38:00  IP: 222.95.162.*静态数据和动态数据的压缩策略是完全不同的。作者的见解还是值得学习的。可惜LZW(LZ78)压缩...
  • fukaibo121
  • fukaibo121
  • 2016-01-28 22:00:19
  • 1100

几种压缩算法原理介绍

  • 2009年07月24日 12:31
  • 16KB
  • 下载

每天一点进步:hbase预分区和压缩

rowkey是hbase的key-value存储中的key,通常使用用户要查询的字段作为rowkey,查询结果作为value。可以通过设计满足几种不同的查询需求。...
  • qq_28066929
  • qq_28066929
  • 2015-12-14 00:21:28
  • 1291
收藏助手
不良信息举报
您举报文章:关于几种压缩算法以及hadoop和hbase中的压缩配置说明
举报原因:
原因补充:

(最多只允许输入30个字)