好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Hadoop HBase 配置 安装 Snappy 终极教程

Hadoop HBase 配置 安装 Snappy 终极教程

因为产品需要,这两天研究了一下Hadoop Snappy。先不说什么各个压缩算法之间的性能对比,单是这个安装过程,就很痛苦。网上有很多博友写Hadoop Snappy安装过程,大部分是照着Google的文档翻译了一遍,并没有列举出遇到的问题。有的博文,明明其验证提示是错误的,还说如果输出XXX,说明安装成功了。费了老大的劲,终于安装成功了,现将详细步骤及遇到的问题,一一列出,只希望接下来需要研究及安装的朋友,看到这篇博文,能够一气呵成!本篇文章主要包括:
  1. Snappy 压缩算法介绍及集中压缩算法比较

  2. Snappy 安装过程及验证

  3. Hadoop Snappy 源码编译过程及问题解决方案

  4. Hadoop上Hadoop Snappy 安装配置过程及验证

  5. HBase 配置Snappy及验证

  6.如何在集群中所有节点部署

废话不多说,现在开始:

1. Snappy 压缩算法介绍及几种压缩算法比较

这一部分可以参考我的上一篇博文: Hadoop压缩-SNAPPY算法 ,或者直接参看Google文档: http://code.google.com/p/snappy/  及  http://code.google.com/p/hadoop-snappy/ 。不再详细介绍。

2. Snappy 安装过程及验证

① 前置条件

前五个如果不能确定的话,可以直接使用yum install XXX来确认一下,如果已安装会提示,没有安装的话,会自动安装上。

下载地址: http://code.google.com/p/snappy/downloads/list 。

③ 编译并安装动态链接库到本地

./ configure
make
make install 

默认是安装到了/usr/local/lib。这时在此目录下查看会生成:

 [root@slave1 lib]# pwd
 /usr/local/ lib
[root@slave1 lib]# ll
total   536 
-rw-r--r--.  1  root root  369308  Jan  14   11 : 02   libsnappy.a
 -rwxr-xr-x.  1  root root     957  Jan  14   11 : 02   libsnappy.la
lrwxrwxrwx.   1  root root      18  Jan  14   11 : 02  libsnappy.so -> libsnappy.so. 1.1 . 3  
lrwxrwxrwx.   1  root root      18  Jan  14   11 : 02  libsnappy.so. 1  -> libsnappy.so. 1.1 . 3 
-rwxr-xr-x.  1  root root  171796  Jan  14   11 : 02  libsnappy.so. 1.1 . 3  
[root@slave1 lib]#  

如果没有错误且文件及链接一致,snappy的安装已经成功。

3. Hadoop Snappy 源码编译过程及问题解决方案

① 下载Hadoop-Snappy源码

下载地址: http://code.google.com/p/hadoop-snappy/  

② 编译hadoop snappy源码

mvn package [-Dsnappy.prefix=SNAPPY_INSTALLATION_DIR]

注:如果第二步snappy安装路径是默认的话,即/usr/local/lib,则此处 [-Dsnappy.prefix=SNAPPY_INSTALLATION_DIR] 可以不写,或者 -Dsnappy.prefix=/usr/local/lib

这个过程如果你的CentOS各个软件的版本正好和Hadoop Snappy要求的一致的话,真的恭喜你,可以一部成功,但是有些还是会有问题。我遇到的三个比计较棘手的问题:

错误一 :/root/modules/hadoop-snappy/maven/build-compilenative.xml:62: Execute failed: java.io.IOException:  Cannot run program "autoreconf"  (in directory "/root/modules/hadoop-snappy/target/native-src"): java.io.IOException: error=2, No such file or directory

解决方案: 说明缺少文件,但是这个文件是在target下的,是编译过程中自动生成的,原本就不该存在,这是问什么呢?其实根本问题不是缺文件,而是Hadoop Snappy是需要一定的前置条件的:Requirements: gcc c++, autoconf, automake, libtool, Java 6, JAVA_HOME set, Maven 3。

我这里边缺少了autoconf,automake,libtool的缘故。在ubuntu中,你可以直接依次apt-get install autoconf,automake,libtool即可,如果是在CentOS中,只需将apt-get 换成 yum。

错误二:

[exec] make: *** [src/org/apache/hadoop/io/compress/snappy/SnappyCompressor.lo] Error  1  

[ERROR] Failed to execute goal org.apache.maven.plugins:maven -antrun-plugin: 1.6 :run (compile) on project hadoop- snappy: An Ant BuildException has occured: The following error occurred while executing this line:
[ERROR]  /home/ngc/ Char /snap/hadoop-snappy/hadoop-snappy-read-only/maven/build-compilenative.xml: 75 : exec returned:  2 

解决方案: 这个是最恶心的。Hadoop Snappy的前置条件需要安装gcc,但是它的官方文档仅仅列出了需要gcc,而没有列出需要什么版本的gcc。在Google中英文搜索了半天,刨来刨去,终于发现,有句话说Hadoop Snappy是需要gcc4.4的。而我的是gcc4.6.3。

[root@master modules]# gcc -- version
gcc (GCC)   4.4 . 6   20120305  (Red Hat  4.4 . 6 - 4  )
Copyright (C)   2010   Free Software Foundation, Inc.
This   is  free software; see the source for copying conditions.  There  is   NO
warranty;   not  even for MERCHANTABILITY  or  FITNESS  FOR  A PARTICULAR PURPOSE.

那么我们就要回退,如何回退:

 1 . apt-get install gcc- 3.4 

 2 . rm /usr/bin/ gcc

  3 . ln -s /usr/bin/gcc- 4.4  /usr/bin/ gcc

之后,再gcc  --version,你就会发现,gcc已经变成4. 4 .7了。

错误三:

[exec] /bin/bash ./libtool --tag=CC   --mode=link gcc -g -Wall -fPIC -O2 -m64 -g -O2 -version-info  0 : 1 : 0  -L/usr/local//lib -o libhadoopsnappy.la -rpath /usr/local/lib src/org/apache/hadoop/io/compress/snappy/SnappyCompressor.lo src/org/apache/hadoop/io/compress/snappy/SnappyDecompressor.lo  -ljvm - ldl 
     [exec]  /usr/bin/ld: cannot find - ljvm
     [exec] collect2: ld returned   1   exit   status
     [exec] make:  *** [libhadoopsnappy.la] 错误  1  
     [exec] libtool: link: gcc  -shared  -fPIC -DPIC  src/org/apache/hadoop/io/compress/snappy/.libs/SnappyCompressor.o src/org/apache/hadoop/io/compress/snappy/.libs/SnappyDecompressor.o   -L/usr/local//lib -ljvm -ldl  -O2 -m64 -O2   -Wl,-soname -Wl,libhadoopsnappy.so. 0  -o .libs/libhadoopsnappy.so. 0.0 . 1 

解决方案: 如果你去搜,你会发现网上有很多 解决/usr/bin/ld: cannot find -lxxx 这样的博客,但是这里,我告诉你,他们的都不适用。因为这儿既不是缺什么,也不是版本不对,是因为没有把安装jvm的libjvm.so symbolic link到usr/local/lib。如果你的系统时amd64,可到/root/bin/jdk1.6.0_37/jre/lib/amd64/server/察看libjvm.so link到的地方,这里修改如下:

ln -s /root/bin/jdk1.6.0_37/jre/lib/amd64/server/libjvm.so /usr/local/lib/ 问题即可解决。

③ hadoop snappy源码编译成功以后,在target包下,会有如下文件:

[root@master snappy-hadoop]# cd target/ 
[root@master target]# ll
total   928  
drwxr -xr-x.  2  root root    4096  Jan  13   19 : 42   antrun
drwxr -xr-x.  2  root root    4096  Jan  13   19 : 44  archive- tmp
drwxr -xr-x.  3  root root    4096  Jan  13   19 : 42   classes
 -rw-r--r--.  1  root root     168  Jan  13   19 : 44   copynativelibs.sh
drwxr -xr-x.  4  root root    4096  Jan  13   19 : 42  generated- sources
 -rw-r--r--.  1  root root   11526  Jan  13   19 : 44  hadoop-snappy- 0.0 . 1 - SNAPSHOT.jar
 -rw-r--r--.  1  root root  337920  Jan  13   19 : 44  hadoop-snappy- 0.0 . 1 -SNAPSHOT-Linux-amd64- 64  .tar
drwxr -xr-x.  3  root root    4096  Jan  13   19 : 44  hadoop-snappy- 0.0 . 1 -SNAPSHOT- tar
 -rw-r--r--.  1  root root  180661  Jan  13   19 : 44  hadoop-snappy- 0.0 . 1 - SNAPSHOT.tar.gz
drwxr -xr-x.  2  root root    4096  Jan  13   19 : 44  maven- archiver
drwxr -xr-x.  3  root root    4096  Jan  13   19 : 42  native- build
drwxr -xr-x.  7  root root    4096  Jan  13   19 : 42  native- src
drwxr -xr-x.  2  root root    4096  Jan  13   19 : 44  surefire- reports
drwxr -xr-x.  3  root root    4096  Jan  13   19 : 42  test- classes
 -rw-r--r--.  1  root root  365937  Jan  13   19 : 44   test.txt.snappy
[root@master target]#  

4. Hadoop上Hadoop Snappy 安装配置过程及验证

这个过程也比较繁杂,配置点比较多要仔细:

① 解压第三步target下hadoop-snappy-0.0.1-SNAPSHOT.tar.gz,解压后,复制lib文件

cp -r /root/modules/snappy-hadoop/target/hadoop-snappy- 0.0 . 1 -SNAPSHOT/lib/native/Linux-amd64- 64 /* $HADOOP_HOME/lib/native/Linux-amd64- 64 /

② 将第三步target下的hadoop-snappy-0.0.1-SNAPSHOT.jar复制到$HADOOP_HOME/lib 下。

③ 配置hadoop-env.sh,添加:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HADOOP_HOME/lib/native/Linux-amd64- 64 /:/usr/local/lib/

④ 配置mapred-site.xml,这个文件中,所有跟压缩有关的配置选项有:

 <  property  > 
   <  name  > mapred.output.compress </  name  > 
   <  value  > false </  value  > 
   <  description  >  Should the job outputs be compressed?
    </  description  > 
 </  property  > 

 <  property  > 
   <  name  > mapred.output.compression.type </  name  > 
   <  value  > RECORD </  value  > 
   <  description  >  If the job outputs are to compressed as SequenceFiles, how should
               they be compressed? Should be one of NONE, RECORD or BLOCK.
    </  description  > 
 </  property  > 

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

 <  property  > 
   <  name  > mapred.compress.map.output </  name  > 
   <  value  > false </  value  > 
   <  description  >  Should the outputs of the maps be compressed before being
               sent across the network. Uses SequenceFile compression.
    </  description  > 
 </  property  > 

 <  property  > 
   <  name  > mapred.map.output.compression.codec </  name  > 
   <  value  > org.apache.hadoop.io.compress.DefaultCodec </  value  > 
   <  description  >  If the map outputs are compressed, how should they be 
               compressed?
    </  description  > 
 </  property  > 

根据自己的需要,配置进去即可。我们为了验证方便,仅配置map部分:

 <  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  > 

⑤ 重新启动hadoop。为了验证是否成功,往hdfs上传一个文本文件,敲入一些词组,运行wordcount程序。如果map部分100%完成,即说明我们hadoop snappy安装成功。

因为hadoop没有像HBase一样提供util.CompressionTest类(或者是我没有找到),所以只能按照这种方法来测试。接下来,将详细列出HBase使用Snappy的配置过程。

5. HBase 配置Snappy及验证

在Hadoop上配置Snappy成功以后,相对来说,在HBase上配置要简单一些了。

① 配置HBase lib/native/Linux-amd64-64/ 中的lib文件。HBase中的lib文件,即需要第三步中/root/modules/snappy-hadoop/target/hadoop-snappy-0.0.1-SNAPSHOT/lib/native/Linux-amd64-64/ 下的所有lib文件,也需要Hadoop中,$HADOOP_HOME/lib/native/Linux-amd64-64/下的hadoop的lib文件(我看到的大部分介绍snappy的文章,均为提到这一点)。简单起见,我们只需要将$HADOOP_HOME/lib/native/Linux-amd64-64/下lib文件,全部复制到相应HBase目录下:

cp -r $HADOOP_HOME/lib/native/Linux-amd64-64/* $HBASE_HOME/lib/native/Linux-amd64-64/

② 配置HBase环境变量hbase-env.sh

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HADOOP_HOME/lib/native/Linux-amd64-64/:/usr/local/lib/
export HBASE_LIBRARY_PATH=$HBASE_LIBRARY_PATH:$HBASE_HOME/lib/native/Linux-amd64-64/:/usr/local/lib/

③ 重启HBase。

④ 验证安装是否成功

首先,使用 CompressionTest 来查看snappy是否 enabled 并且能成功 loaded:

hbase org.apache.hadoop.hbase.util.CompressionTest hdfs://192.168.205.5:9000/output/part-r-00000 snappy

其中,/output/part-r-00000 为我们在验证hadoop snappy的时候,wordcount的输出。

执行命令后结果为:

 [root@master ~]# hbase org.apache.hadoop.hbase.util.CompressionTest hdfs://192.168.205.5:9000/output/part-r-00000 snappy
13/01/13 21:59:24 INFO util.ChecksumType: org.apache.hadoop.util.PureJavaCrc32 not available.
13/01/13 21:59:24 INFO util.ChecksumType: Checksum can use java.util.zip.CRC32
13/01/13 21:59:24 INFO util.ChecksumType: org.apache.hadoop.util.PureJavaCrc32C not available. 
13/01/13 21:59:24 DEBUG util.FSUtils: Creating file:hdfs://192.168.205.5:9000/output/part-r-00000with permission:rwxrwxrwx
13/01/13 21:59:24 WARN snappy.LoadSnappy: Snappy native library is available
13/01/13 21:59:24 INFO util.NativeCodeLoader: Loaded the native-hadoop library
13/01/13 21:59:24 INFO snappy.LoadSnappy: Snappy native library loaded
13/01/13 21:59:24 INFO compress.CodecPool: Got brand-new compressor
13/01/13 21:59:24 DEBUG hfile.HFileWriterV2: Initialized with CacheConfig:disabled
13/01/13 21:59:24 INFO compress.CodecPool: Got brand-new decompressor
SUCCESS 

说明Snappy 安装已经enable并且能够成功loaded。

⑤ 接下来创建并操作Snappy压缩格式的表

 [root@master ~]# hbase shell
HBase Shell; enter 'help  <  RETURN  >  ' for list of supported commands.
Type "exit  <  RETURN  >  " to leave the HBase Shell
Version 0.94.2, r1395367, Sun Oct  7 19:11:01 UTC 2012
 //创建表 
hbase(main):001:0> create 'tsnappy', { NAME => 'f', COMPRESSION => 'snappy'}
0 row(s) in 10.6590 seconds
 //describe表 
hbase(main):002:0> describe 'tsnappy'
DESCRIPTION                                                                                                        ENABLED                                                       
 {NAME => 'tsnappy', FAMILIES => [{NAME => 'f', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTER => 'NONE', REPLICATION_ true                                                          
 SCOPE => '0', VERSIONS => '3', COMPRESSION => 'SNAPPY', MIN_VERSIONS => '0', TTL => '2147483647', KEEP_DELETED_CE                                                               
 LLS => 'false', BLOCKSIZE => '65536', IN_MEMORY => 'false', ENCODE_ON_DISK => 'true', BLOCKCACHE => 'true'}]}                                                                   
1 row(s) in 0.2140 seconds
 //put数据 
hbase(main):003:0> put 'tsnappy', 'row1', 'f:col1', 'value'
0 row(s) in 0.5190 seconds
 //scan数据 
hbase(main):004:0> scan 'tsnappy'
ROW                                           COLUMN+CELL                                                                                                                        
 row1                                         column=f:col1, timestamp=1358143780950, value=value                                                                                
1 row(s) in 0.0860 seconds

hbase(main):005:0>  

以上所有过程均成功执行,说明Snappy 在Hadoop及HBase上配置成功~

6.如何在集群中所有节点部署

这一步就非常简单了,尤其是如果你配置过Hadoop集群。仅需要将我们上边所有配置过的文件,分发到所有其他节点的相应目录即可,包括生成的/usr/lib/local下的snappy链接库。

 

 

 

标签:  数据压缩

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于Hadoop HBase 配置 安装 Snappy 终极教程的详细内容...

  阅读:48次

上一篇: vtordisp

下一篇:sprint2 summary