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

  • 相关阅读:
    创建类以及引用一个类
    修改hosts文件
    微信第三方登录接口开发
    Android定位
    Leetcode 102. Binary Tree Level Order Traversal
    Leetcode 725. Split Linked List in Parts
    Leetcode 445. Add Two Numbers II
    Leetcode 328. Odd Even Linked List
    Leetcode 237. Delete Node in a Linked List
    Leetcode 234. Palindrome Linked List
  • 原文地址:https://www.cnblogs.com/lifetraveler/p/11275518.html
Copyright © 2011-2022 走看看