您的位置:首页 > 编程语言 > Java开发

hadoop 2.7.1源码导入eclipse

2016-10-18 10:24 302 查看


准备

下面是要求的清单:(我是在opensuse上完成所有的编译,然后再将其拷贝到windows系统,有兴趣的童鞋可以直接在windows上编译)

----------------------------------------------------------------------------------

Requirements:

* UnixSystem

* JDK1.7+

* Maven3.0 or later

*ProtocolBuffer 2.5.0


Maven安装

安装Maven之前记得安装jdk 1.7,安装过程我就不赘述了,百度里很多。


下载Maven 3.3.3

http://mirrors.cnnic.cn/apache/maven/maven-3/3.2.5/binaries/apache-maven-3.2.5-bin.tar.gz

将apache-maven-3.3.3-bin.tar.gz上传到Linux服务器上并且解压,上传到哪个目录随意,我这里上传到/opt,解压后,生成文件夹apache-maven-3.2.5


环境变量配置

Linux下环境变量有好几个地方可以配置,我这里配置在了/etc/profile下,这个文件下对所有的linux都有效,同样可以配置在用户下的.bashrc(每次该用户登陆都会加载),或者用户目录下的.bash_profile(需要手动加载),这里的配置文件名是open suse系统中的,如果用的其他的系统,可以查度娘(另外,上面的描述如有不对,表喷我,^_^)

言归正传,配置环境变量应该是必备技能,我这里再啰嗦一次。

在/etc/profile最后添加下面两行,

[java] view
plain copy

exportMAVEN_HOME=/opt/apache-maven-3.2.5

exportPATH=$PATH:/opt/apache-maven-3.2.5/bin

配置完成后,记得使用命令使其生效。

[python] view
plain copy

source /etc/profile

验证是否安装成功

[html] view
plain copy

hadoop@linux-0nbl:/usr/local/protoc> mvn –version


ProtocolBuffer 2.5.0安装及配置

在hadoop的官网介绍中,编译源码需要使用到该组件,这个组件的作用请百度。

另外,这个插件是是google开发的,考虑到国内的网络环境,我这里提供一个网盘的下载路径吧,链接:http://pan.baidu.com/s/1c0nYe7A 密码:vral

对protoc进行编译安装前先要装几个依赖包:gcc,gcc-c++,make如果已经安装的可以忽略。

安装protoc

[python] view
plain copy

tar -xvf protobuf-2.5.0.tar.gz

cd protobuf-2.5.0

./configure --prefix=/usr/local/protoc/

make && make install

执行完上面的命令后,会在/usr/local/protoc/下生成三个目录,将bin目录下的protoc配置到环境变量中去。





这里多说几句,网上很多人都是说将bin目录配置到环境变量里去,我最开始也是这么做的,但是在编译有些项目的时候,会报下面这个错误,后面通过看源码,发现程序并不会去bin目录下用protoc去执行命令(源码里用Java调用了命令 protoc
–version,就会变成/usr/local/protoc/bin –version,这样肯定是不能执行成功的),所以我后面将protoc也配置到了环境变量里去了(就如上图),后面就成功了,所以不知道这个是不是新版本程序的变化还是什么。

hadoop程序会从环境变量里去取名字叫HADOOP_PROTOC_PATH的环境变量,如果没有则从PATH中取,故二者配置其一就可以了。

[html] view
plain copy

[ERROR] Failed to execute goal org.apache.hadoop:hadoop-maven-plugins:2.2.0:protoc (compile-protoc) on project hadoop-common: org.apache.maven.plugin.MojoExecutionException: 'protoc --version' did not return a version -> [Help 1]

[ERROR]

[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.

[ERROR] Re-run Maven using the -X switch to enable full debug logging.

[ERROR]

[ERROR] For more information about the errors and possible solutions, please read the following articles:

[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
[ERROR]

[ERROR] After correcting the problems, you can resume the build with the command

[ERROR] mvn <goals> -rf :hadoop-common

如果后续在编译的时候,还有缺少依赖包的情况,请根据提示,自行下载并安装,网上其他人说还需要安装cmake,openssl-devel,ncurses-devel依赖(ps:我没有碰到缺少包的情况)


Hadoop源码编译


下载源码

http://hadoop.apache.org/releases.html这个页面下,可以下载源码和已经编译好的程序。

http://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-2.7.1/hadoop-2.7.1-src.tar.gz

我下载的版本是2.7.1

链接:http://pan.baidu.com/s/1hqxtpZI 密码:nm26, 也可以在网盘上下载。


Maven添加国内静像

由于maven国外服务器可能连不上,先给maven配置一下国内镜像,在maven目录下,conf/settings.xml,在<mirrors></mirros>里添加,原本的不要动

[python] view
plain copy

cd /opt/apache-maven-3.2.5/conf

vi setting.xml

#在文件<mirrors></mirrors>之间添加下面的内容。

<mirror>

<id>nexus-osc</id>

<mirrorOf>*</mirrorOf>

<name>Nexus osc</name>

<url>http://maven.oschina.net/content/groups/public/</url>

</mirror>


编译

将下载下来的源码包解压,进入到解压后的目录

[python] view
plain copy

cd /home/hadoop/hadoop-2.7.1-src

首先编译hadoop-maven-plugins,执行下面的命令

[python] view
plain copy

cd hadoop-maven-plugins

mvn install -DskipTests

执行完命令后,maven就开始进行源码编译,在这个过程,maven会从我们之前在setting.xml中配置静像地址中下载很多的jar和配置文件,这个过程会很长,另外,在编译过程中,由于网络不稳定,会出现有一些jar包下载不下来的情况,这时候你可以重新执行mvn install命令,重试或许网络就好了。

如果多次重试都卡在同一个包的下载,在出错的日志中,都会告诉你哪个一个包的下载出错,你可以根据提示出来地址自己手动下载,我碰到一个servlet-api-2.5.jar一直下载不下来,手动下载也不行,所以只能转而去网上查找其他网友分享的jar。

手动下载下来的jar,请手动上传到对应的目录。比如:我是使用hadoop用户进行编译,那maven下载的包都会保存在/home/hadoop/.m2/repository下,你需要根据之前的出错信息,找到这个jar该放入到哪个文件夹,一般从jar包的命令也能看出来的,比如我之前提到的servlet-api-2.5.jar,他的目录就是javax\servlet\servlet-api\2.5,你将手动下载的包,拷贝到该目录下就OK了。

[html] view
plain copy

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-assembly-plugin:2.4:single (dist) on project hadoop-project-dist: Execution dist of goal org.apache.maven.plugins:maven-assembly-plugin:2.4:single failed: Plugin org.apache.maven.plugins:maven-assembly-plugin:2.4 or one of its dependencies could not be resolved: Could not transfer artifact org.codehaus.plexus:plexus-utils:jar:3.0.8 from/to nexus-osc (http://maven.oschina.net/content/groups/public/): Connect to 101.44.1.5:80 [/101.44.1.5] failed: Connection timed out -> [Help 1]

[ERROR]

[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.

[ERROR] Re-run Maven using the -X switch to enable full debug logging.

[ERROR]

[ERROR] For more information about the errors and possible solutions, please read the following articles:

[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/PluginResolutionException
[ERROR]

[ERROR] After correcting the problems, you can resume the build with the command

[ERROR] mvn <goals> -rf :hadoop-project-dist

如上面的报错,就是因为下载plexus-utils-3.0.8.jar失败,控制台会打出下载地址,如下图,手动下载这个jar包,这个jar根据错误提示,应该是放在$HOME/.m2/repository/.m2/repository/org/codehaus/plexus/plexus-utils/3.0.18/目录下,将jar包放入到该目录,再重新开始编译,其他的包用同样的方法,直到成功。

Downloading: http://maven.oschina href="http://lib.csdn.net/base/dotnet" target=_blank>.NET/content/groups/public/org/codehaus/plexus/plexus-utils/3.0.8/plexus-utils-3.0.8.jar

当上面的执行成功后,执行下面的命令。

[python] view
plain copy

mvn eclipse:eclipse -DskipTests

成功后,像我这种,是在linux上编译的,所以你需要将hadoop-maven-plugins下的所有的东西和/home/hadoop/.m2/repository下的文件夹都下载到本地,hadoop-maven-plugins可以放入eclipseworkspace下,.m2/repository下的文件夹,请放入到本机maven的下载目录,比如你在本机也安装了maven,那么将.m2/repository下所有的文件夹拷贝到C:\Users\您的登陆名\.m2\repository\下。

然后打开eclipse,[File] >[Import] > [Existing Projects into Workspace],将hadoop-maven-plugins目录导入到workspace,这样子你就可以很方便的看到源码了。下面是我将hadoop源码下项目都导入后的图片。



因为我是在linux下进行编译的,在每个项目的.classpath文件里,会引用一个jre的tools.jar,而jar的目录是linux上jdk的目录,所以这里需要手动修改一下,因为项目较多,可以将所有的出错的项目的.classpath文件全部在ue或者editplus或者notepad++中打开,采用批量替换的方式替换掉,再将出错的项目重新build。

在做完上面的步骤后,还出现了一个问题,就是有些类里报错,错误信息大概如下:

Accessrestriction: The type Timer is not accessible due to restriction on requiredlibrary C:\Program Files\Java\jdk1.7.0\jre\lib\rt.jar

按照下面的方式处理
把Windows-Preferences-Java-Complicer- Errors/Warnings里面的Deprecated and restricted API中的Forbidden references(access rules)选为Warning


最后,大家应该是可以在windows本地直接编译的,只是在安装protocolBuffer的时候,要编译成windows的版本,另外环境变量配置的时候,也要配置protoc.exe,我猜测应该是这样的,但是我看到编译windows版本还要vs2008等工具,我就退却了。

转自: http://blog.csdn.net/zp_xyz/article/details/48227123
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: