设为首页 收藏本站
查看: 1240|回复: 0

[经验分享] Hadoop HBase 配置 安装 Snappy 终极教程

[复制链接]

尚未签到

发表于 2018-11-1 06:43:19 | 显示全部楼层 |阅读模式
  因为产品需要,这两天研究了一下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 安装过程及验证
  ① 前置条件
  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。
  ③ 编译并安装动态链接库到本地
?123./configuremakemake install  默认是安装到了/usr/local/lib。这时在此目录下查看会生成:
?12345678910[root@slave1 lib]# pwd/usr/local/lib[root@slave1 lib]# lltotal 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.lalrwxrwxrwx. 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源码
  下载地址: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。
  错误二:
?1234[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。
?12345[root@master modules]# gcc --versiongcc (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 NOwarranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  那么我们就要回退,如何回退:
?12345671. 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了。  错误三:
?12345[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包下,会有如下文件:
?12345678910111213141516171819[root@master snappy-hadoop]# cd target/[root@master target]# lltotal 928drwxr-xr-x. 2 root root   4096 Jan 13 19:42 antrundrwxr-xr-x. 2 root root   4096 Jan 13 19:44 archive-tmpdrwxr-xr-x. 3 root root   4096 Jan 13 19:42>-rw-r--r--. 1 root root    168 Jan 13 19:44 copynativelibs.shdrwxr-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.tardrwxr-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.gzdrwxr-xr-x. 2 root root   4096 Jan 13 19:44 maven-archiverdrwxr-xr-x. 3 root root   4096 Jan 13 19:42 native-builddrwxr-xr-x. 7 root root   4096 Jan 13 19:42 native-srcdrwxr-xr-x. 2 root root   4096 Jan 13 19:44 surefire-reportsdrwxr-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文件
?1cp -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,添加:
?1export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HADOOP_HOME/lib/native/Linux-amd64-64/:/usr/local/lib/  ④ 配置mapred-site.xml,这个文件中,所有跟压缩有关的配置选项有:
?12345678910111213141516171819202122232425262728293031323334353637  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部分:
?12345678        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目录下:
?1cp -r $HADOOP_HOME/lib/native/Linux-amd64-64/* $HBASE_HOME/lib/native/Linux-amd64-64/  ② 配置HBase环境变量hbase-env.sh
?12export 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的输出。
  执行命令后结果为:
?123456789101112[root@master ~]# hbase org.apache.hadoop.hbase.util.CompressionTest hdfs://192.168.205.5:9000/output/part-r-00000 snappy13/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.CRC3213/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:rwxrwxrwx13/01/13 21:59:24 WARN snappy.LoadSnappy: Snappy native library is available13/01/13 21:59:24 INFO util.NativeCodeLoader: Loaded the native-hadoop library13/01/13 21:59:24 INFO snappy.LoadSnappy: Snappy native library loaded13/01/13 21:59:24 INFO compress.CodecPool: Got brand-new compressor13/01/13 21:59:24 DEBUG hfile.HFileWriterV2: Initialized with CacheConfig:disabled13/01/13 21:59:24 INFO compress.CodecPool: Got brand-new decompressorSUCCESS  说明Snappy 安装已经enable并且能够成功loaded。
  ⑤ 接下来创建并操作Snappy压缩格式的表
?123456789101112131415161718192021222324[root@master ~]# hbase shellHBase Shell; enter 'help' for list of supported commands.Type "exit" to leave the HBase ShellVersion 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链接库。
  转载注明出处,更多精彩文章,欢迎访问本人个人站点:石头儿 http://shitouer.cn


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-629087-1-1.html 上篇帖子: hadoop 的参数配置 下篇帖子: hadoop报错一例
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表