Snappy Installer

        线上集群磁盘不够,集群多次报警,采用snappy压缩格式压缩磁盘文件,缓解集群压力

1.压缩比较

在这只列出两种比较争议的压缩格式比较

lzo压缩

压缩/解压速度也比较快,合理的压缩率;

支持split,是hadoop中最流行的压缩格式(需要建索引,文件修改后需要重新建索引);

支持hadoop native库;

可以在linux系统下安装lzop命令,使用方便;

压缩率比gzip要低一些;

hadoop本身不支持,需要安装;

在应用中对lzo格式的文件需要做一些特殊处理(为了支持split需要建索引,还需要指定inputformat为lzo格式);

因此适用于较大文本的处理

snappy压缩

高速压缩速度和合理的压缩率;

支持hadoop native库;

不支持split;

压缩率比gzip要低;

hadoop本身不支持,需要安装;

linux系统下没有对应的命令

因此1) 当mapreduce作业的map输出的数据比较大的时候,作为map到reduce的中间数据的压缩格式;2)或者作为一个mapreduce作业的输出和另外一个mapreduce作业的输入; 3)snappy 虽然对于文本格式不具有split特性,但是对于SequenceFile 及Avro格式,Parquet存储来说依然具有split特性

为什么选择 sanppy

Cloudera 推荐使用snappy

  • Snappy often performs better than LZO. It is worth running tests to see if you detect a significant difference.
  • For MapReduce, if you need your compressed data to be splittable, BZip2 and LZO formats can be split. Snappy and GZip blocks are not splittable, but files with Snappy blocks inside a container file format such as SequenceFile or Avro can be split. Snappy is intended to be used with a container format, like SequenceFiles or Avro data files, rather than being used directly on plain text, for example, since the latter is not splittable and cannot be processed in parallel using MapReduce. Splittability is not relevant to HBase data.
  • Snappy通常比LZO表现更好。值得运行测试以确定您是否发现了显着差异。
  • 对于MapReduce,如果需要拆分压缩数据,可以拆分BZip2和LZO格式。Snappy和GZip块不可拆分,但可以拆分容器文件格式(如SequenceFile或Avro)中带有Snappy块的文件。Snappy旨在与容器格式(如SequenceFiles或Avro数据文件)一起使用,而不是直接在纯文本上使用,例如,因为后者不可拆分且无法使用MapReduce并行处理。可拆分性与HBase数据无关。

Google官网

On a single core of a Core i7 processor in 64-bit mode, Snappy compresses at about 250 MB/sec or more and decompresses at about 500 MB/sec or more.

在64位模式的Core i7处理器的单核上,Snappy以大约250 MB /秒或更高速度压缩,并以大约500 MB /秒或更高速率进行解压缩。

2. 使用后的测试

3.安装snappy

查看snappy安装包 yum search snappy

安装snappy

yum install snappy-devel.i686

然后在 whereis libsnappy

4.将snappy 本地库编译入hadoop

下载hadoop-snappy源码

A Hadoop library of Snappy compression

Hadoop-Snappy is a project for Hadoop that provide access to the snappy compression. http://code.google.com/p/snappy/

This project is integrated into Hadoop Common (JUN 2011).

Hadoop-Snappy can be used as an add-on for recent (released) versions of Hadoop that do not provide Snappy Codec support yet.

Hadoop-Snappy is being kept in synch with Hadoop Common.

Snappy压缩的Hadoop库

Hadoop-Snappy是一个Hadoop项目,提供对snappy压缩的访问。http://code.google.com/p/snappy/

该项目已集成到Hadoop Common(JUN 2011)中。

Hadoop-Snappy可以用作最近(已发布)Hadoop版本的附加组件,但尚未提供Snappy Codec支持。

Hadoop-Snappy与Hadoop Common保持同步。

下载hadoop-snappy发现源码官方已取消

往下发现 2011年后 Hadoop-Snappy与Hadoop Common保持同步,

也就是说我们下载Hadoop-Common 就可以了

下载hadoop 源码

https://github.com/apache/hadoop/tree/branch-2.7.3

打包路径

hadoop/hadoop-common-project/hadoop-common

打包 hadoop-common

mvn clean package -Pdist,native -DskipTests -Dtar -Drequire.snappy

编译问题

需要安装protobuf ,下面是jar包

https://github.com/protocolbuffers/protobuf/releases/tag/v2.5.0

$ ./configure --prefix=/data/soft/protoc

$ make

$ make check

$ make install

别忘配置环境变量

$ vim ~/.bashrc  

export PROTOC_HOME=/data/soft/protoc

export PATH=$PATH:$PROTOC_HOME/lib

然后,

$protoc --version

libprotoc.2.5.0

成功

查看重新编译后的native

hadoop/hadoop-common-project/hadoop-common/target/hadoop-common-2.7.3/lib/native

将重新编译的native 整个复制到 服务器hadoop的 lib/native下

配置文件修改:

配置mapred-site.xml,仅配置map部分:

开启map 输出压缩,会导致spark 启动新任务 发生warn  hadoop snappy 以来缺失 (安全起见也可以不开map 输出压缩,如果 有需要单独开启spark snappy 需要另配,在下一篇博客中会有)

<property>         

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

            <value>true</value>

 </property>  

<property>         

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

               <value>org.apache.hadoop.io.compress.SnappyCodec</value>

</property>

  开启 MapReduce 输出压缩    

     如果你们公司用的hadoop 生态圈组件为数据基础,那么对应 spark,druid,hbase,es等 容器可能会出现一些 文件读取解压等问题,需要进一步配置或者处理(优化方案 不开启MapReduce 输出压缩

<property>

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

<value>true</value>

</property>

<property>

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

<value>org.apache.hadoop.io.compress.SnappyCodec</value>

</property>

将集群每个节点做同步,重启集群

5.snappy 验证

hadoop checknative

验证map snappy 输出压缩是否生效,下图选中部分为map输出文件大小

/wordcount/in 自己上传文件到hdfs,我选的是log文件

/wordcount/out2 文件在hdfs 上不能存在

bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount /wordcount/in /wordcount/out2

验证 hbase snappy 是否生效

/wordcount/out2 是在hadoop snappy压缩的文件

bin/hbase org.apache.hadoop.hbase.util.CompressionTest hdfs://hadoopcluster/wordcount/out2/part-r-00000 snappy

猜你喜欢

转载自blog.csdn.net/qq_34394465/article/details/85064406
今日推荐