千家信息网

Hadoop HBase配置安装Snappy的详细教程

发表于:2024-11-20 作者:千家信息网编辑
千家信息网最后更新 2024年11月20日,这篇文章主要介绍"Hadoop HBase配置安装Snappy的详细教程",在日常操作中,相信很多人在Hadoop HBase配置安装Snappy的详细教程问题上存在疑惑,小编查阅了各式资料,整理出简
千家信息网最后更新 2024年11月20日Hadoop HBase配置安装Snappy的详细教程

这篇文章主要介绍"Hadoop HBase配置安装Snappy的详细教程",在日常操作中,相信很多人在Hadoop HBase配置安装Snappy的详细教程问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Hadoop HBase配置安装Snappy的详细教程"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

本篇文章主要包括:

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 安装过程及验证

① 前置条件

gcc c++, autoconf, automake, libtool, Java 6, JAVA_HOME set, Maven 3

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

② 下载Snappy 1.0.5

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

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

?

1

2

3

./configure

make

make install

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

?

1

2

3

4

5

6

7

8

9

10

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

错误二:

?

1

2

3

4

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

?

1

2

3

4

5

[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

2

3

4

5

6

7

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

错误三:

?

1

2

3

4

5

[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包下,会有如下文件:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

[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文件

?

1

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,添加:

?

1

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

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

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

mapred.output.compress

false

Should the job outputs be compressed?

mapred.output.compression.type

RECORD

If the job outputs are to compressed as SequenceFiles, how should

they be compressed? Should be one of NONE, RECORD or BLOCK.

mapred.output.compression.codec

org.apache.hadoop.io.compress.DefaultCodec

If the job outputs are compressed, how should they be compressed?

mapred.compress.map.output

false

Should the outputs of the maps be compressed before being

sent across the network. Uses SequenceFile compression.

mapred.map.output.compression.codec

org.apache.hadoop.io.compress.DefaultCodec

If the map outputs are compressed, how should they be

compressed?

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

?

1

2

3

4

5

6

7

8

mapred.compress.map.output

true

mapred.map.output.compression.codec

org.apache.hadoop.io.compress.SnappyCodec

⑤ 重新启动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目录下:

?

1

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

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

?

1

2

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的输出。

执行命令后结果为:

?

1

2

3

4

5

6

7

8

9

10

11

12

[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压缩格式的表

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

[root@master ~]# hbase shell

HBase Shell; enter 'help' for list of supported commands.

Type "exit" 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链接库。

到此,关于"Hadoop HBase配置安装Snappy的详细教程"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

0