① 下载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-src
中BUILDING.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)
根据要求可知,要进行源码编译,必须有的编译环境(本人亲自安装了的)如下:
(1)JDK1.7+的安装,可以查看Ubuntu 16.04配置JDK1.8.0_77教程
(2)maven安装,可以查看ubuntu16.04安装maven ,其中对于镜像源的配置文本如下:
alimaven
aliyun maven
http://maven.aliyun.com/nexus/content/groups/public/
central
(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
④ 将编译好的源码导入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) in the type SinkQueue is not applicable for the arguments (new Consumer(){})
**尚未解决,暂时的解决方法:**只有TestSinkQueue.java这一个文件报错,于是注释掉其中的所有代码!
重新编译后,没有任何错误!
**附百度云盘下载链接:**链接: https://pan.baidu.com/s/1MDLh1uW8KvB9_JeBqMRt_A 密码: tnqw