个人小站,正在持续整理中,欢迎访问:http://shitouer.cn

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

1. Snappy 压缩算法介绍及集中压缩算法比较

2. Snappy 安装过程及验证

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

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

5. HBase 配置Snappy及验证

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

废话不多说,现在开始:

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

2. Snappy 安装过程及验证

① 前置条件

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

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

② 下载Snappy 1.0.5

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

./configure

make

make install

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

[root@slave1 lib]# pwd/usr/local/lib

[root@slave1 lib]# ll

total536

-rw-r--r--. 1 root root 369308 Jan 14 11:02libsnappy.a-rwxr-xr-x. 1 root root 957 Jan 14 11:02libsnappy.la

lrwxrwxrwx.1 root root 18 Jan 14 11:02 libsnappy.so -> libsnappy.so.1.1.3lrwxrwxrwx.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源码

② 编译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)2010Free Software Foundation, Inc.

Thisis free software; see the source for copying conditions. There isNO

warranty;not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

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

1. apt-get install gcc-3.4

2. rm /usr/bin/gcc3. 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 returned1 exitstatus

[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

total928drwxr-xr-x. 2 root root 4096 Jan 13 19:42antrun

drwxr-xr-x. 2 root root 4096 Jan 13 19:44 archive-tmp

drwxr-xr-x. 3 root root 4096 Jan 13 19:42classes-rw-r--r--. 1 root root 168 Jan 13 19:44copynativelibs.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:44test.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,这个文件中,所有跟压缩有关的配置选项有:

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

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

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

hbase snappy 安装_Hadoop HBase 配置 安装 Snappy 终极教程相关推荐

  1. jdk安装失败_windows配置安装单个Tomcat

    1.前期准备 1).将tomcat安装文件复制到服务器 2) 安装jdk,将jdk对应的版本安装到服务器,安装好后cmd命令java -version可以看到对应的版本 2.配置环境变量 1)jdk安 ...

  2. pycharm、anaconda、pytorch安装以及环境配置(超详细教程)

    一.基础知识 1.python解释器 python解释器是将python源码高级语言解析为二进制机器语言的工具.安装python是指安装python解释器.注意:python2.x和python3.x ...

  3. pythonqt5安装路径配置_PyQt5 安装与环境配置方法图解详细教程

    PyQt5 是用来创建Python GUI应用程序的第三方工具包,它不仅与Python有着良好的兼容性,还可以通过可视化拖拽的方式进行窗体的创建,提高开发人员的工作效率,因此深受开发人员的喜爱.作为一 ...

  4. 【2021最全】51单片机入门+驱动下载安装+keil下载配置+烧入程序教程

    注:我不是标题党 文章目录 入门 1. 装驱动 2. 新建项目 3.项目配置 4. 新建c程序 5. 第一个程序 6. 烧入程序 6.1 设置选择芯片型号 6.2 选择烧入的程序(就是hex文件) 6 ...

  5. freenas安装php,如何配置安装FreeNAS服务器

    FreeNAS 是开源的 NAS 服务器,它能将一部普通 PC 变成网络存储服务器.该软件基于 FreeBSD,Samba 及 PHP,包含了一套支持多种软 RAID 模式的操作系统和网页用户界面.用 ...

  6. 在Linux上yum安装snmp,centos7配置安装snmp

    1.安装snmp 1.centos7+yum安装 yum -y install net-snmp net-snmp-utils 2.更改配置文件snmpd.conf vi /etc/snmp/snmp ...

  7. mysql front mac安装_Mac下配置安装数据库-MySQL

    那么从今天开始陆续会更新数据库和Hibernate框架的博文,也是Himi学习的历程记录,希望大家能共同讨论和研究: OK,本篇简单介绍安装吧,首先到MySQL官方网站: http://www.mys ...

  8. Centos7安装MPICH3在配置安装目录时出现问题

    麻烦各位大神看看这是什么原因,帮忙解决一下.谢谢啦!! [root@localhost mpich-3.2.1]# bash ./configure --prefix=/home/gq/mpich-i ...

  9. ubuntu 下载安装tomcat简单配置(傻瓜式教程)

    下载tomca 输入命令: sudo wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.54/bin/apache- tomcat-9.0.54.t ...

  10. windows 下 vmware 安装 Mac X lion 10.7 终极教程!

    好不容易,终于安装上了Mac,今天 写下来,供交流学习吧!原创呀! 1. 下载安装包.(虚拟机已安装版10.7) 下载地址http://download.csdn.net/detail/xn45459 ...

最新文章

  1. Java面试题详解三:比较器
  2. 如何在linux下检测内存泄漏
  3. NIO和Reactor
  4. 计算机应用基础教案 马成荣,江苏省职业学校计算机应用基础(马成荣主编)课程两课评比教案:单元教学设计说明...
  5. 最佳字符串对齐的Java实现
  6. 【qduoj】【超级楼梯进阶版】
  7. 同步/异步与阻塞/非阻塞的区别
  8. hive复合数据类型之map
  9. java新入手的三十个基本概念
  10. 华为Mate8刷低Android版本,华为mate8怎么刷机 华为mate8刷机方法【图文教程】
  11. mysql connector 是什么_mysql的connector/J,和JDBC是啥关系?有啥区别?
  12. Java十进制数和二进制数之间的相互转换
  13. linux - android安卓 - stagefright
  14. 2016 server win 假死_Windows10出现假死的几种表现形式及对应解决方案
  15. c语言爱心代码我爱你,C语言告白代码,一闪一闪亮晶晶~
  16. 中科院博士论文《致谢》
  17. 小程序源码:好玩的表情包机器人
  18. 2019-3-13-win10-uwp-使用-ScaleTransform-放大某个元素
  19. UML在md中的写法与示意
  20. key_t键和ftok函数

热门文章

  1. ckplayer6.8 php播放,CKplayer-超酷网页视频播放器 v6.8
  2. 木子-后端-在没有视图层的情况下,怎样将前台数据直接发给逻辑层
  3. 【江枫】用Perl的hash数组实现个性化监控
  4. 财富、通胀与印钞——读《原则2 :应对变化中的世界秩序》(上)
  5. webx 容器初始化
  6. 【数据处理】正则匹配指定字符传后面的字符
  7. 养不起真猫,就用代码吸猫-Unity粒子实现画猫咪
  8. python中怎么画一个机器猫_用python画机器猫--哆啦A梦,开干!
  9. 蘑菇街iOS客户端应用源码
  10. kafka2.2源码分析之KafkaChannel