导入hadoop 1.2.1源码到eclipse

eclipse使用的是最新的稳定版Luna sr2;JDK安装了jdk8和jdk7;系统是windows 7。

1. 下载hadoop1.2.1源码包(不是标记为bin的那个包,另外没有标记为bin的包才带有源码);将下载的压缩包解压到某个目录下,比如f:\apache目录下,解压完毕后f:\apache目录下就有一个hadoop-1.2.1目录,本文中将f:\apache\hadoop-1.2.1\称为HADOOP_LOCATION,之后就用它作为这个目录的代称;

2. 建立eclipse的workspace目录,比如f:\eclipseWorkspaces\luna\hadoop-1.2.1

3. 启动eclipse。如果是首次启动会提示选择一个workspace;如果不是首次启动,那么等启动完了之后,执行File-->"Switch Workspace“。总之最后将workspace选择为在上面步骤中建立的workspace目录(当然你也可以选择使用已有的workspace目录)。如果是切换workspace,那么eclipse会重启。

4. 建立java project。执行菜单命令File-->New-->"Java Project",显示如下对话框:

上图中,Project Name,你可以自己定;不要使用"Use Default Location",将这个位置选中为我们在上面步骤中解压源码得到的HADOOP_LOCATION目录。注意,下面的jre要仔细配置一下。据我的经验,hadoop使用jdk 1.7可能比较好,最好直接使用系统安装的jdk7中jre。但是现在这里面没有体现出来。单击JRE板块右下方的"Configure JRE",可以添加安装的jre7到"Installed JRE7"列表中,并选中它表示它是项目缺省的JRE。添加时如下图所示:

添加完之后,如下图所示,

此外要特别注意上图左侧边栏中的"Compiler"项,


因为使用JRE7所以上图的Compiler Compliance level也要选中1.7,否则eclipse导入代码后会显示一些无法解决的错误(因为从代码来看这些地方都不应该有错误),比如

The method newInstance(Class<T>, Configuration) in the type ReflectionUtils is not applicable for the arguments (Class<? extends InputFormat>, JobConf);

和如下错误
The method getSplits(JobConf, int) is undefined for the type Object (PipesNonJavaInputFormat.java,    /Hadoop1.2.1cvs/src/mapred/org/apache/hadoop/mapred/pipes    line 56)。

这些都是泛型相关的错误,因此我猜测是eclipse在解析代码时对于泛型都要临时生成一些类,而这些类的生成方法在不同版本的jdk中是不同的,又因为实际使用的jre与java compiler的compliance level不同,所以导致解析代码时信息的生成的解读发生错误,从而出现上面的错误。

可能不安装两个jdk就不会碰到此类问题(我周边其他人就没碰到过类似错误,呵呵)。

设置完成之后返回"New Java Project"对话框,选择使用"Use default JRE"即可(设置之后应该显示currently 'jre7')。然后再将Location选择为我们在上面定义的HADOOP_LOCATION(好像要最后定location,因为location定好后,jre配置就不能修改了),然后点击"Finish"按钮,等待eclipse执行building workspace操作。building完了之后,显示eclipse界面,此时将”Welcome"页面关掉(如果出现的话)。然后就显示出来"package explorer",至此我们完成新建一个java项目的操作了。

5. 消除错误。第一次尝试最好使用一份从官方源码包重新解压缩的源码,而不要用别人使用的过的,因为eclipse可能会在代码目录下生成一些东西,使用别人处理过的代码等于重用了这些配置,那么很多错误你可能碰不到。

 导入hadoop源码(在eclipse building workspace完了)之后,会显示很多错误。

处理错误的优先手段是,将不需要关注的项目从build path中删除。比如对于分析hadoop核心代码的人来说,大概关注src/hdfs,src/core,src/mapred,src/tools,src/examples就可以了,其他的可以不管。那么将这些项目选中(按ctrl多选,shift范围选择,跟windows的资源管理器一样),然后右键单击,选择"Build Path-->Remove from Build Path"。删除后,package explorer会将这些包的实际位置定位出来。

还是有很多错误,这主要是由org.apache.hadoop.hdfs.server.namenode引起的,它应该在src/hdfs下面的但是不知道为什么独立出来了。将这项同样从build path中删除,然后选择src/hdfs,右键单击,选择"Build Path-->Configure build path",弹出对话框后可以看出src/hdfs下面把namenode排除了。选中src/hdfs下面的exclude,然后点击右侧按钮”remove",结果如下图所示,


然后"OK"。然后又少了很多错误。

然后一看src/core还有错误,具体是它下面的org.apache.hadoop.record.compiler.ant有错误。这个错误是因为没有导入ant.jar引起的。或者将该项也从build path中删除,或者下载apache ant的二进制包,解压后将lib/ant.jar加入到项目的jar中。方法是进入上图的Java Build Path界面,然后在Libraries标签页,选择"Add External Jars"项,将ant.jar添加进来。或者直接在项目上右键单击,选择Build Path-->Add external archives...也行,直接进入添加jar文件的对话框。添加后等building workspace完了,就发现错误没有了(只剩warnings了)。如下图所示


至此,导入hadoop 1.2.1告一段落。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值