编译hadoop2.6.0-cdh5.7.0 native支持snappy & 编译中遇到的坑及解决办法

云计算 waitig 526℃ 百度已收录 0评论

前沿

使用官网自带的hadoop-2.6.0-cdh5.7.0.tar.gz所解压之后,安装部署的hadoop环境,往往在执行checknative命令的时候,发现诸如zlib、snappy、lz4、bzip2、openssl的检查不通过。而这样会对我们使用各种压缩的时候带来不便,因此我们需要自己去手动编译native,并使其支持snappy。

编译准备

编译前我们需要做如下几步:

  • 部署JAVA环境
  • 安装maven
  • 安装Protocol Buffer 2.5.0
  • 安装Findbugs

上述步骤的安装可以参考博文:Hadoop源码编译

为了支持native,我们需要手动去安装支持这些压缩的本地库,具体操作如下:

$>yum install -y openssl openssl-devel svn ncurses-devel zlib-devel libtool
$>yum install -y snappy snappy-devel bzip2 bzip2-devel lzo lzo-devel lzop autoconf automake

开始编译

使用如下命令进行编译:

$>cd /opt/sourcecode/hadoop-2.7.4-src
$>mvn clean package -Pdist,native -DskipTests -Dtar

编译成功:

这里写图片描述

检查是否支持native

$>hadoop checknative -a

全部支持:
这里写图片描述

编译中遇到的坑及排错

这里写图片描述

这是我在编译的时候遇到的第一个坑,排错过程:

  • 网上查阅资料之后,参考这篇博文:学习Maven之Maven Enforcer Plugin,修改了编译命令为:

    $>mvn clean package -Denforcer.skip=true -DskipTests -Pdist,native -Dtar
  • 执行该命令之后仍然报错,报出新的错误,说是javadoc找不到,再次修改编译命令为:

    $>mvn clean package -Dmaven.javadoc.skip=true -Denforcer.skip=true -DskipTests -Pdist,native -Dtar
  • 然而经历了上述两步之后,依然编译失败,重新参考文章:学习Maven之Maven Enforcer Plugin,执行如下命令:

    $>mvn validate

    发现一条Warning,如下图:

    这里写图片描述

  • 查阅hadoop-2.6.0-cdh5.7.0源码包解压之后的BUILDING.txt文件,对于环境的要求写着JDK 1.7+
    尝试换了一个JDK环境,将原来的1.8换到了1.7;执行以下编译命令:

    $>mvn clean package -Pdist,native -DskipTests -Dtar

    最终可以成功

  • 编译过程中,可能还会出现如下的错误:

    这里写图片描述

    一开始我觉得是因为pom.xml里面没有指定cdh的仓库,检查发现其实已经指定了
    于是我换了个网络,居然神奇的避免了该错误的出现,最终编译成功。

    建议:出现这种情况的原因是因为包没能下载下来,建议在编译的时候选择一个网络环境,这样可以省去不必要的麻烦


本文由【waitig】发表在等英博客
本文固定链接:编译hadoop2.6.0-cdh5.7.0 native支持snappy & 编译中遇到的坑及解决办法
欢迎关注本站官方公众号,每日都有干货分享!
等英博客官方公众号
点赞 (0)分享 (0)