64位 ubuntu14 编译 hadoop2.90 中遇到的一些问题回顾

Posted lifetraveler

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了64位 ubuntu14 编译 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>

最后,问题终于解决了。

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

 

以上是关于64位 ubuntu14 编译 hadoop2.90 中遇到的一些问题回顾的主要内容,如果未能解决你的问题,请参考以下文章

64位 ubuntu14 编译 hadoop2.90 中遇到的一些问题回顾

MapReduce程序——WordCount(Windows_Eclipse + Ubuntu14.04_Hadoop2.9.0)

Ubuntu14下Hadoop开发&lt;2&gt; 编译64位Hadoop2.4

Ubuntu(64位)编译Android源码常见错误解决办法

ffmpeg 64位编译脚本

使用ROS 32位和64位并行