hadoop 2.0发布时间不长,目前也还没有普及使用,所以关于Hadoop2.0相关的材料在网上能查到的不多,只能自己一点一点积累和学习。顺便把自己学习过程中的知识总结下,方便以后查看和使用。
下面是本次配置Hadoop 2.0源码阅读环境的步骤,配置环境是: win7+eclipse+hadoop 2.2.0+maven3.1。Hadoop2.2.0是目前为止Hadoop2.0唯一的一个稳定版本GA,所以建议要部署2.0集群的人最好还是选择2.2.0版本。
Hadoop2.0的源码阅读环境全部是基于maven仓库的,不再像1.0一样直接导入Java工程了。所以需要先安装maven以及Eclipse的maven插件。下面是步骤:
1. 安装maven
这里我选用的版本是apache-maven-3.1.1。貌似由于版本问题,eclipse indigo + hadoop 2.2.0配置是不能用maven2.
(1) 从Apache官网下载maven包,解压到某个目录下;
(2) 修改conf/setting.xml,配置localRepository参数,这是maven库在本地的目录位置:
(3) 配置系统环境变量:
#首先配置 M2_HOME=D:\Software\apache-maven-3.1.1
#然后编辑添加path变量,末尾添加%M2_HOME%\bin
(4)测试maven是否已经安装成功:
打开CMD,输入mvn -version,查看mvn是否安装成功。
2. 给eclipse配置maven插件
安装m2e插件。安装方法有两种,一种是在线安装,通过eclipse的help->install new software自己配置安装源,或者在eclipse marketplace中搜索安装,不过我没在market中找到针对indigo的插件,所以采用第二种插件安装方法,本地安装配置。
下面是本地安装的步骤:
(1) 下载eclipse-maven-plugins;(注意版本,eclipse-maven3-plugin)
(2) 在Eclipse的安装目录下建立两个目录,myplugin和link;
(3) 把eclipse-maven-plugins解压到myplugin中;
(4) 在link目录下建立一个文件,写入path={myplugin下的maven目录},例如D://eclipse/myplugin/maven,然后改名为maven.link;
(5) 重启Eclipse,查看maven插件是否配置成功。如果配置成功,那么打开window->preferences就能看到maven的选项。
(6) 进入window -> preferences -> maven -> installations,添加本机上安装的maven的目录;然后user setting下配置setting.xml的位置
3. 下载安装proto buffer 2.5。因为Hadoop2.0是基于protobuf2.5实现的RPC交互协议,所以需要安装protobuf2.5,否则在编译的时候会报错。安装方法是:
(1) 下载proto-buffer-2.5,解压;
(2) 把里面的protoc.exe拷贝到c:\windows\目录下;
(3) 在cmd下输入protoc --version测试是否安装成功。
4. 导入Hadoop2.0项目
源码目录中有一个BUILDING.TXT,里面是详细的源码导入Eclipse,和源码编译等步骤。建议详细阅读这个官方文档,比从网上找到的攻略肯定更可靠,毕竟是人家官方出的方法。
(1) 首先下载hadoop-2.2.0-src的压缩包,解压到某个目录下;
(2) 修改hadoop2.0源码目录下的pom.xml,改变tools.jar的配置:
jdk.tools
jdk.tools
1.6
system
${JAVA_HOME}/lib/tools.jar
$ cd hadoop-maven-plugins
$ mvn install
$ mvn eclipse:eclipse -DskipTests
(4) 在Eclipse中导入: [File] > [Import] > [Existing Projects into Workspace].
5. 错误解决。导入后,会在Eclipse中产生很多个projects。但是其中会有许多错,下面一一解决:
(1)ERROR: /hadoop-common/src/test/java/org/apache/hadoop/io/serializer/avro/TestAvroSerialization.java显示没有AvroRecord类。
从网上下载AvroRecord类,并放到这个目录下,刷新project就好。网上的下载地址: http://grepcode.com/snapshot/repo1.maven.org/maven2/org.apache.hadoop/hadoop-common/2.2.0/ ,在这里查找相应的类。
(2)ERROR: /hadoop-common/src/test/java/下报错 org.apache.hadoop.ipc.protobuf.TestProtos和org.apache.hadoop.ipc.protobuf.TestRpcServiceProtos类不存在。
和(1)一样的解决方法,从网上下载这个类,放到src/main/java/下面,刷新就好了。
(3)ERROR: 在/hadoop-auth/src/test/java下,org.apache.hadoop.security.authentication.client中报错,The type org.mortbay.component.AbstractLifeCycle cannot be resolved
build path->configure build path,添加外部jar包,把jetty-util.jar添加进来,版本和jetty.jar对应就好。一般在maven目录下的org/mortbey/jetty/util下应该能找到这个jar包,如果找不到的话,自己从网上下载。报这个错的原因是,org.mortbay.component是在jetty-util包中的,但不知道什么原因导致jetty-util.jar包没有正常导入,所以需要我们手动添加。
楼主安装好后就遇到了这么几个错误,如果有遇到其他的错误,就按照这样的方法一个一个排查,把缺少的类或者缺少的包添加进来就好。到此Eclipse2.0的源码阅读环境就配置好了,在阅读源码时可以轻松用F3定位方法和类,也能把源码关联到MapReduce程序中,方便调试。