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

【Hadoop/Hbase】centos上安装并设置Snappy/LZO压缩方式

[复制链接]

尚未签到

发表于 2015-11-11 13:39:15 | 显示全部楼层 |阅读模式
  在hadoop和hbase文件传输可以在压缩之后在进行传输,这样就可以在传输的时候减少传输数据,增大I/O和带宽效率。其中压缩阶段分为三种:包括input data压缩,middle result by map还有最后一种就是reduce之后的最终结果。在hadoop中主要提供了三种压缩方式Gzip、LZO、Snappy三种数据压缩。后面两种需要额外的配置和安装依赖。但是,在hadoop中默认都已经实现接口。但是如果你不进行相应的安装依赖,当你想使用某个压缩手段的时候还是会报出各种错误。
  比如在启动某个job的时候可能会有如下提示:
  "Cannot load  Snappy without snappy library!",或者也有可能是抛出一个异常"native snappy library not available",这都是说明当前hadoop的配置中无法使用压缩。那么想使用某种压缩手段必须先安装,这里介绍的是Snappy的安装。Snappy是谷歌推出的一种压缩方法,详情请点击
  其中安装步骤如下:
  在安装之前必须确定Requirements: gcc c++, autoconf, automake, libtool, Java 6, JAVA_HOME set, Maven 3都已经安装到机器上,如果没有请相应挨个安装。
  1:下载并安装snappy,在上述的snappy介绍地址中就有下载链接。下载并解压到/tmp/snappy目录下。
  安装
  

$tarzxvf snappy-1.0.5.tar.gz
$cdsnappy-1.0.5
$ ./configure
$make
$sudomakeinstall  
  



2:注意这时仅是安装了snappy,但是还没有使snappy和hadoop连接起来。下面就是通过mvn,创建hadoop-snappy的jar包。首先需要下载hadoop-snappy到/tmp。解压到/tmp/hadoop-snappy,进入该目录。  执行
  $ mvn package -Dsnappy.prefix=/usr/local


  3:安装完成之后就可以发现当期目录下的taget文件夹中存在打成的包。然后把相应的包拷贝到hadoop的lib文件夹下
  $ cp-r
hadoop-snappy-0.0.1-SNAPSHOT/lib/* <YOUR_HADOOP_HOME>/lib


  


  4:然后在core-site.xml中增加声明
  

<property>
    <name>io.compression.codecs</name>
    <value>
      org.apache.hadoop.io.compress.GzipCodec,
      org.apache.hadoop.io.compress.DefaultCodec,
      org.apache.hadoop.io.compress.BZip2Codec,
      org.apache.hadoop.io.compress.SnappyCodec
    </value>
  </property>
  
  另外在加入声明的时候注意,value各个之间不要留有空&#26684;,否则会报出各种class not found的异常
  java.lang.IllegalArgumentException: Compression codec  org.apache.hadoop.io.compress.SnappyCodec not found


  重启hadoop,安装完成。
  


  


  上述介绍的是Snappy的安装方法,下面结束的是LZO的压缩办法。对于LZO的压缩效率和压缩速度是不逊于Snappy的。在有些机器上可能会发生莫名Snappy无法使用,那不得不就采用LZO了,这里就简单说明一下步骤。
  LZO是压缩需要先下载hadoop-lzo,下载地址
  该包是通过ant编译的,所以想进行下面操作还需要下载安装ant。好在编译之前需要下载安装的额外的东西就是如上了,下面先开始安装lzo
  yum install lzo-devel.x86_64

yum install lzop.x86_64


  我的机器是64位的,所以安装了64为的包。你也可以自己去查找适合的rpm包,然后自己安装。如果自己通过rmp包安装,记得需要三个依赖。可以通过该rpm网站去查找适合的包,rpmfinder。
  安装好lzo就需要编译hadoop lzo。
  进入上面下载的hadoop-lzo文件夹下的含有build.xml的路径下,执行命令 ~/apache-ant-1.8.2/bin/ant compile-native tar。这里对于/apache-ant-1.8.2/bin/ant 请注意,它是你的ant所在的路径,请使用你的路径代替这个路径。当没有错误的执行完成之后,就可以发现有一个build目录。在build目录下有一个native文件夹,把native的文件夹下的内容拷贝到你hadoop的本地目录下,重启hadoop。OK,搞定。
  如果上面的Snappy安装成功的话,其实LZO只是执行了相同的步骤而已。
  对于安装LZO可能遇到的问题如下几个
  1:最常见的应该是如下错误了。
  java.io.IOException: java.lang.RuntimeException: native-lzo library not available

        at org.apache.hadoop.hive.ql.exec.FetchOperator.getNextRow(FetchOperator.java:544)

        at org.apache.hadoop.hive.ql.exec.FetchOperator.pushRow(FetchOperator.java:488)

        at org.apache.hadoop.hive.ql.exec.FetchTask.fetch(FetchTask.java:136)

        at org.apache.hadoop.hive.ql.Driver.getResults(Driver.java:1412)

        at org.apache.hadoop.hive.cli.CliDriver.processLocalCmd(CliDriver.java:271)

        at org.apache.hadoop.hive.cli.CliDriver.processCmd(CliDriver.java:216)

        at org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:413)

        at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:756)

        at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:614)

        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

        at java.lang.reflect.Method.invoke(Method.java:597)

        at org.apache.hadoop.util.RunJar.main(RunJar.java:156)

Caused by: java.lang.RuntimeException: native-lzo library not available

        at com.hadoop.compression.lzo.LzopCodec.createDecompressor(LzopCodec.java:104)

        at com.hadoop.compression.lzo.LzopCodec.createInputStream(LzopCodec.java:89)

        at com.hadoop.mapred.DeprecatedLzoLineRecordReader.<init>(DeprecatedLzoLineRecordReader.java:59)

        at com.hadoop.mapred.DeprecatedLzoTextInputFormat.getRecordReader(DeprecatedLzoTextInputFormat.java:158)

        at org.apache.hadoop.hive.ql.exec.FetchOperator.getRecordReader(FetchOperator.java:432)

        at org.apache.hadoop.hive.ql.exec.FetchOperator.getNextRow(FetchOperator.java:508)

        ... 13 more
  这个错误引发的地方很多,我从以下几个可能的地方。
  1)你的hadoop的本地目录中没有编译好的文件,hadoop的本地文件目录一般是hadoop_home/lib/native/<your_LInux>;
  2)JAVA_LIBRARY_PATH没有设定。其实这点很奇怪,有的节点上不设定依旧可以跑。不过过遇到这问题之后,修改一下没命令尝试一下也好。如果解决了问题更好,解决不了那再想办法。使用命令 export JAVA_LIBRARY_PATH=/hadoop/hadoop-1.2.0/lib/native/Linux-amd64-64
   3)没有编译hadoop-lzo,按章上面安装步骤编译一遍。
  2:可能某个节点上会报有Cannot load liblzo2.so.2 (liblzo2.so.2: cannot open shared object file: No such file or directory)!但是在其他节点上正常。
  那这个时候也没有办法就在该节点上安装LZO,使用上述安装命令。

版权声明:本文为博主原创文章,转载请注明来源。

运维网声明 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-137936-1-1.html 上篇帖子: 【框架解析】Hadoop系统分析(五)--namenode其他 下篇帖子: Hadoop2.2.0单节点安装及测试
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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