Ubuntu 16.04 编译Hadoop2.7.2源码,并导入eclipse

Ubuntu 16.04 编译Hadoop2.7.2源码,并导入eclipse

① 下载Hadoop2.7.2源码。
下载地址: https://archive.apache.org/dist/hadoop/core/hadoop-2.7.2/ ,选择hadoop-2.7.2-src.tar.gz, 点击下载。
对下载好的压缩包,使用如下命令进行解压缩:

$ sudo tar -zxvf hadoop-2.7.2-src.tar.gz

将解压缩的源码包,复制到/usr/local目录下:

$ sudo cp -rf hadoop-2.7.2-src /usr/lcoal

② 根据hadoop-2.7.2-srcBUILDING.txt中的要求,配置好编译环境。
要求如下:

Requirements:
 * Unix System
 * JDK 1.7+
 * 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 )
 * Jansson C XML parsing library ( if compiling libwebhdfs )
 * 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)

根据要求可知,要进行源码编译,必须有的编译环境(本人亲自安装了的)如下:

  • JDK1.7+
  • Maven 3.0 or later
  • ProtocolBuffer 2.5.0
  • CMake 2.6 or newer

(1)JDK1.7+的安装,可以查看Ubuntu 16.04配置JDK1.8.0_77教程

(2)maven安装,可以查看ubuntu16.04安装maven ,其中对于镜像源的配置文本如下:

 <mirrors>
    <mirror>
      <id>alimaven</id>
      <name>aliyun maven</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
      <mirrorOf>central</mirrorOf>        
    </mirror>
  </mirrors>

(3)ProtocolBuffer安装,可以查看ubuntu下protobuf安装
下载链接:Protocol Buffers v2.5.0,选择protobuf-2.5.0.tar.gz 点击下载。

(4)检查cmake是否安装,直接先查看cmake版本:

$ cmake --version

发现本机已安装cmake:
这里写图片描述
至此,基本的编译环境已经准备好,可以开始着手Hadoop2.7.2源码的编译。

③ 编译Hadoop2.7.2源码
进入/usr/local/hadoop-2.7.2-src进行源码编译,编译命令如下:

$ cd hadoop-maven-plugins
$ mvn install
$ cd ..
$ mvn eclipse:eclipse -DskipTests

第一次编译花费的时间较长,本人执行mvn eclipse:eclipse -DskipTests,花费了02:10 h,建议安装VPN

  • mvn install 编译成功的截图:
    这里写图片描述
  • mvn eclipse:eclipse -DskipTests 编译成功的截图:
    这里写图片描述

④ 将编译好的源码导入ecliipse
(1)打开eclipse首先设置maven:window->preferences->maven->user settings, 添加/usr/local/apache-maven-3.5.4/conf/settings.xml。如图下图所示:
这里写图片描述

(2)导入Hadoop2.7.2源代码:File-->import-->Genral-->Existing Projects into WorkSpace-->hadoop-2.7.2-src,即可导入。
错误一:

hadoop-streaming中build path错误,右键点击Properties --> Java Build Path-->Source: 

解决方法:直接把这个报错的buildpath删掉,在eclipse中,右键单击hadoop-streaming项目,选择“Properties”,左侧栏选择Java Build Path,然后右边选择Source标签页,点击出错的标签页后,点击右侧的Remove 按钮去掉即可。

这里写图片描述

错误二:
点击Project-->BuildAll以后,出现很多错误。发现都是跟rt.jar有关的错误:
这里写图片描述
选中出错的工程文件,右键点击Properties --> Java Build Path,选中右侧的Libraries
这里写图片描述

选择上图中最底部的 JRE System Library,点击最右侧的Remove,去除这个Library;然后点击Add Library... ,选择JRE System Library
这里写图片描述
点击Next,进入下一界面,再点击Finish 即可:
这里写图片描述
点击Project-->Clean...,重新编译会发现错误减少了,照葫芦画瓢,依次解决剩下的类似错误。

错误三:

AvroRecord cannot be resolved to a type

下载avro-tools-1.7.7.jar,放在/home/lucy/下载,用这个指定的目录来的工具来生成对应的java文件:

$ cd /home/lucy/workspace/hadoop-common/src/test/avro //进入avro目录
$ java -jar /home/lucy/下载/avro-tools-1.7.7.jar compile schema avroRecord.avsc ../java

执行结果:
这里写图片描述
点击Project-->Clean...,重新编译。

错误四:

EchoRequestProto cannot be resolved

执行以下命令:

$ cd /home/lucy/workspace/hadoop-common/src/test/proto
$ protoc --java_out=../java *.proto

点击Project-->Clean...,重新编译。

错误五

The method consume(SinkQueue.Consumer<Integer>) in the type SinkQueue<Integer> is not applicable for the arguments (new Consumer<Integer>(){})

尚未解决,暂时的解决方法:只有TestSinkQueue.java这一个文件报错,于是注释掉其中的所有代码!

重新编译后,没有任何错误!

附百度云盘下载链接:链接: https://pan.baidu.com/s/1MDLh1uW8KvB9_JeBqMRt_A 密码: tnqw

猜你喜欢

转载自blog.csdn.net/u014454538/article/details/81012354