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

64次阅读
没有评论

共计 9772 个字符,预计需要花费 25 分钟才能阅读完成。

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

本篇文章主要包括:

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

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 部分:

?

1

2

3

4

5

6

7

8

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 目录下:

?

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

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

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-28发表,共计9772字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)