最近再看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