zoukankan      html  css  js  c++  java
  • 64位 ubuntu14 jdk1.7 编译 hadoop2.90 中遇到的一些问题回顾

    最近再看zookeeper,有人提到xsync同步配置文件很好用,于是就想装一下,然后就去看hadoop了,看的是一个大家都知道的学习网站的hadoop视频。

    视频里的教程是centos6 编译 hadoop2.6还是2.7。我不想重新装虚拟机了,就用之前玩python装好的ubuntu14.接着就是一系列的踩坑过程。

    先说一下视频的配置跟我的配置区别

    //视频
    vm=vmstation
    os=centos 6
    jre=1.7/1.8
    ssh=securityCRT
    //我的
    vm=vm virtualbox
    os=ubuntu14
    jre=1.7.0_201 //这个简直太坑了,后面再说
    ssh=Xshell

    我先复制了4个虚拟机,因为后面要做集群嘛。

    第一个坑:改静态ip,dns,hosts

    这里ubuntu14 跟 centos 配置文件不太一样。我ubuntu是关掉了window的,直接ssh上去操作的。

    这块不细讲了,大家可以自己百度或者参考这里,关键就是先查看你的网卡名称是啥,然后在interfaces里修改对应的配置,这里如果是多网卡环境的话,很重要的。

    第二个坑:java环境

    我的四个虚拟机,有一台装的是1.7,其他三个是1.8克隆出去的。然后我编译源码的时候,用的恰好是那个1.7的版本,大家后面自己编译的时候一定要检查好编译基础环境,否则浪费很多时间的。那有的同学问了,1.7,1.8有啥区别呢?这个自己百度吧,我就说说跟我这里相关的一点,1.8里对javadoc的处理不太一样了。在JDK 8中,Javadoc中添加了doclint,而我们后面编译hadoop里,用到一个maven的插件工具,这个工具的主要目的是旨在获得符合W3C HTML 4.01标准规范的HTML文档,在JDK 8中,已经无法获取如下的Javadoc,除非它满足doclint。而1.7没有这个。我们接下来继续将,会回溯到这一点的。

     第三个坑:编译hadoop

    先说一下应该干什么,一定要看源码包里的BUILDING.txt,编译指南里一般都说的很清楚,编译环境,依赖,操作步骤,我就是没看这个,而是在网上随便找一个教程,是编译2.6版本的。跟着操作了一遍,然后就报错了。

    先贴一下指南吧,第一个是编译环境要求:

    Requirements:
    
    * Unix System
    * JDK 1.8+
    * Maven 3.0 or later
    * Findbugs 1.3.9 (if running findbugs)
    * ProtocolBuffer 2.5.0
    * CMake 2.6 or newer (if compiling native code), must be 3.0 or newer on Mac
    * Zlib devel (if compiling native code)
    * openssl devel (if compiling native hadoop-pipes and to get the best HDFS encryption performance)
    * Linux FUSE (Filesystem in Userspace) version 2.6 or above (if compiling fuse_dfs)
    * Internet connection for first build (to fetch all Maven and Hadoop dependencies)
    * python (for releasedocs)
    * bats (for shell code testing)
    * Node.js / bower / Ember-cli (for YARN UI v2 building)

    看看,人家要求的是jdk1.8 maven3以上。结果我自己jdk1.7,maven2,后面我把maven升级到了3.而jdk我当时一直以为自己是1.8,所以一直没改,被坑了好惨。

    • 题外话,最简单的方式就是DOCKER了。执行一个命令就ok了。
    The easiest way to get an environment with all the appropriate tools is by means
    of the provided Docker config.
    This requires a recent version of docker (1.4.1 and higher are known to work).
    
    On Linux:
        Install Docker and run this command:
    
        $ ./start-build-env.sh

    我们这里是linux下,步骤如下,其实官方文档里 已经提示了,如果编译的话,最好安装一份干净的,全新的Ubuntu 14.04 LTS Desktop。然后从头开始安装jdk,maven等等

    Installing required packages for clean install of Ubuntu 14.04 LTS Desktop:
    
    * Oracle JDK 1.8 (preferred)
      $ sudo apt-get purge openjdk*
      $ sudo apt-get install software-properties-common
      $ sudo add-apt-repository ppa:webupd8team/java
      $ sudo apt-get update
      $ sudo apt-get install oracle-java8-installer
    * Maven
      $ sudo apt-get -y install maven
    * Native libraries
      $ sudo apt-get -y install build-essential autoconf automake libtool cmake zlib1g-dev pkg-config libssl-dev
    * ProtocolBuffer 2.5.0 (required)
      $ sudo apt-get -y install protobuf-compiler
    
    Optional packages:
    
    * Snappy compression
      $ sudo apt-get install snappy libsnappy-dev
    * Intel ISA-L library for erasure coding
      Please refer to https://01.org/intel%C2%AE-storage-acceleration-library-open-source-version
      (OR https://github.com/01org/isa-l)
    * Bzip2
      $ sudo apt-get install bzip2 libbz2-dev
    * Jansson (C Library for JSON)
      $ sudo apt-get install libjansson-dev
    * Linux FUSE
      $ sudo apt-get install fuse libfuse-dev

    maven操作相关,这里要求大家对maven有所了解,不要求精通,但是起码知道 mvn -P,-D 这些参数是干啥用的,怎么用的,这块百度一下就清楚了。

    Maven build goals:
    
     * Clean                     : mvn clean [-Preleasedocs]
     * Compile                   : mvn compile [-Pnative]
     * Run tests                 : mvn test [-Pnative] [-Pshelltest]
     * Create JAR                : mvn package
     * Run findbugs              : mvn compile findbugs:findbugs
     * Run checkstyle            : mvn compile checkstyle:checkstyle
     * Install JAR in M2 cache   : mvn install
     * Deploy JAR to Maven repo  : mvn deploy
     * Run clover                : mvn test -Pclover [-DcloverLicenseLocation=${user.name}/.clover.license]
     * Run Rat                   : mvn apache-rat:check
     * Build javadocs            : mvn javadoc:javadoc
     * Build distribution        : mvn package [-Pdist][-Pdocs][-Psrc][-Pnative][-Dtar][-Preleasedocs][-Pyarn-ui]
     * Change Hadoop version     : mvn versions:set -DnewVersion=NEWVERSION
    
     Build options:
    
      * Use -Pnative to compile/bundle native code
      * Use -Pdocs to generate & bundle the documentation in the distribution (using -Pdist)
      * Use -Psrc to create a project source TAR.GZ
      * Use -Dtar to create a TAR with the distribution (using -Pdist)
      * Use -Preleasedocs to include the changelog and release docs (requires Internet connectivity)
      * Use -Pyarn-ui to build YARN UI v2. (Requires Internet connectivity)

    这些东西如果我一开始是按照指南一步步做的话,编译最多也就是10分钟的事情,自作孽,不可活,浪费了一个下午,一个晚上,加一个早上。

    我说说在我最后编译成功的环境下,是怎么来操作的:

    环境 jdk 1.7 maven3.6

    root@shevcheco61:/etc/network# java -version
    java version "1.7.0_201"
    OpenJDK Runtime Environment (IcedTea 2.6.17) (7u211-2.6.17-0ubuntu0.1)
    OpenJDK 64-Bit Server VM (build 24.201-b00, mixed mode)
    root@shevcheco61:/etc/network# mvn -v
    Apache Maven 3.6.1 (d66c9c0b3152b2e69ee9bac180bb8fcc8e6af555; 2019-04-05T03:00:29+08:00)
    Maven home: /opt/module/maven-3.6.1
    Java version: 1.8.0_131, vendor: Oracle Corporation, runtime: /opt/module/java/jre
    Default locale: zh_CN, platform encoding: UTF-8
    OS name: "linux", version: "4.4.0-142-generic", arch: "amd64", family: "unix"

    在hadoop源码包下执行命令: mvn  package -Pdist,docs,src -DskipTests -Dtar 

    Building distributions:
    
    Create binary distribution without native code and without documentation:
    
      $ mvn package -Pdist -DskipTests -Dtar -Dmaven.javadoc.skip=true
    
    Create binary distribution with native code and with documentation:
    
      $ mvn package -Pdist,native,docs -DskipTests -Dtar
    
    Create source distribution:
    
      $ mvn package -Psrc -DskipTests
    
    Create source and binary distributions with native code and documentation:
    
      $ mvn package -Pdist,native,docs,src -DskipTests -Dtar
    
    Create a local staging version of the website (in /tmp/hadoop-site)
    
      $ mvn clean site -Preleasedocs; mvn site:stage -DstagingDirectory=/tmp/hadoop-site

    错误一:DynamoDBLocal-1.11.86.jar 这个包下载不下来,我maven仓库配置的是阿里的仓库,结果这个包一直下不下来。办法就是,手动下载,最后放到仓库里面,另外一种方法是改一下pom文件里这快,指定一下源,用官方的源就行。这个在后面的其他错误集锦的link里有说明的。

    错误二:[INFO] Apache Hadoop Auth ................................. FAILURE:MojoExecutionException:maven-project-info-reports-plugin中异常,一开始没有看具体异常,就直接百度去了,结果啥也没有找到,百度了一晚上,试了所有的方法。第二天早上也米有解决,只能加上-e看具体信息了。进入到Hadoop Auth目录下,单独开始编译  mvn  package -Pdocs -DskipTests -Dtar  -e。这里将-P参数下只保留了docs,因为这个项目pom里配置的profile只有docs。然后还是报了同样的错误。我有执行了mvn clean compile,编译是成功的。说明跟代码没有啥关系了。说明,问题就是出在这个maven-project-info-reports-plugin上了。百度了一下这个东西是干嘛的,然后就知道了原来就为了生成javadoc文档的一个插件。顺着思路,看看这个东西,大家有没有遇到其他错误,结果,就搜到了这个东西跟java版本的关系,点击这里或者这里。我按照别人的解决方案,加上了

    <execution>
    <id>attach-javadocs</id>
    <phase>package</phase>
    <goals>
    <goal>jar</goal>
    </goals>
    <configuration>
    <additionalparam>-Xdoclint:none</additionalparam>
    </configuration>
    </execution>

    最后,问题终于解决了。

    其他错误集锦点击这里点击这里

    后来,我换了电脑,重新按照building里的说明,啥问题也没有遇到

     欢迎大家来讨论:lifetraveler@outlook.com

  • 相关阅读:
    MFC
    AC自动机
    KMP
    Power Transmission (Hard Edition)
    Floyd
    地杰斯特算法
    二叉树
    51nod 1002 数塔取数问题【dp】
    51nod1049 最大子段和【动态规划】
    poj2385
  • 原文地址:https://www.cnblogs.com/lifetraveler/p/11275518.html
Copyright © 2011-2022 走看看