基于Eclipse的Hadoop应用程序开发
实验准备阶段
1.搭建好单机环境下的Hadoop环境,Eclipse不仅可以在hadoop伪分布式环境下开发应用程序也可以在Hadoop完全分布式环境下开发应用程序,一般情况下先在伪分布式环境下开发运行实验,然后在完全分布式环境下运行程序,这里我们讲解在伪分布式环境下也就是单机环境下的应用程序开发,着重讲解插件的安装及与Hadoop运行环境的结合,应用程序我们暂时使用Hadoop自带的WordCount程序进行本次试验。
2.我们使用的是Eclipse是Eclipse3.3.2,这里需要注意的是由于使用的是Hadoop-0.20.2的版本,Hadoop自带的插件只支持到Eclipse3.3.2,如果读者想应用到更高版本的Eclipse,需要修改插件的源代码,在最后我会附上插件源代码的修改过程,关于插件的历史需要说明的是,Hadoop原本不带开发插件,插件原由IBM公司自己开发,后来的Hadoop自带的插件也是IBM公司整合到Hadoop,成为Hadoop的一部分,在这里说明一下,因为以前我不知道以为Hadoop有另外的插件版本,走了不少弯路。
3.基于Eclipse的Hadoop应用程序开发的插件在Hadoop代码包的/contrib/eclipse-plugin目录下面,是hadoop-0.20.2-eclipse-plugin.jar,使用之前需要找到这个插件。
安装插件
1.解压Eclipse,把插件复制粘贴到eclipse/plugins目录下面,并重启eclipse。
2.打开MapReduce视图,选择window-->Open Persrective-->Other 选择Map/Reduce,图标是蓝色的象。
3.添加一个MapReduce环境,在Eclipse下端控制台旁边会多出一个Tab,叫“Map/Reduce Locations”,在下面空白的地方点击右键选择“New Hadoop Location”,如图所示
4.在弹出的对话框里填写下面内容
Location name :给自己的Hadoop起个名字(这个可以随便填)
Map/Reduce Master:Job Tracker的ip地址和端口,根据 mapred-site.xml中配置mapred.job.tracker来填写。
DFS Master:Name Node的ip和端口,根据core-site.xml 中 的fs.default.name来填写,此配置必须和Hadoop配置文件中的一致,Use M/R master host,这个复选框如果选上,就默认和Map/Reduce Master这个框里host一样,如果不选择,就可以自己定义输入,这里jobtracer和namenode在一个机器上,所以是一样的就勾选上,然后点击finish按钮,此时,这个视图中就有多了一条记录,截图如上。
5.编辑advance parameters tab页(hadoop启动后才可编辑此项)
重启Eclipse并重新编辑刚才建立的那个连接记录,如图现在我们编辑advance parameters tab页,重启advance parameters tab页原因是在新建立连接的时候这个advance parmters tab 页面的一些属性会显示不出来,显示不出来也就没法设置,所以必须重启一下Eclipse再进行编辑才能看到,这里大部分属性都已经自动填上,其实就是把core-default.xml hafs-default.xml mapred-default.xml里面配置的属性展示出来,因为在安装Hadooop的时候,其site系列配置文件里有改动,所以这里也要设置和conf/core-site.xml hafs.site.xml mapred.site.xml中设置的一样,主要有以下的属性fs.default.name/mapred.job.tracker:这两个在步骤4中已经设置过了,dfs.replication:这里默认值是3,我们也设置为3,读者可以根据自己原来配置文件中的设置的备份个数确定,hadoop.job.ugi:刚才说的看不见的就是这个,就是这个属性,默认的好像是DrWho,Tardis.将逗号前面的部分更改为hadoop,最后:hadoop,Tardis(如果运行Eclipse的用户名是和集群的账户名一致,不用修改此项,在这里如果用我以前的文档搭建的集群就不需要修改此项了),mapred.child.tmp:设置为D:\hadoop\tmp(因为在以前的文档中我们为了避免hadoop搭建是出现的错误,设置此目录,现在还为这个)点击finish,设置完毕,注意:在\conf中修改的配置文件只是对CYGWIN中使用的命令行运行有效,在Eclipse中运行的参数是以这里的Advanced parameters为准,当然我们也可以在测试代码里进行手工修改进行覆盖操作,例如在WordCount源代码中写入如下代码Configuration config = new Configuration();config.set("mapred.child.tmp","C:/tmp");截图如下
6.使用Ecliopse对HDFS内容进行修改
经过上一步骤,左侧的"Project Exoplorer"中应该出现配置好的HDFS,点击右键可以进行新建文件,删除文件,上传文件,下载文件,删除文件夹等操作,注意每次操作后需要刷新才能显示操作后的内容,在这里我们在maprd文件夹中新建input 和output 文件夹并在input文件夹下面新增3个需要应用程序处理的文件,如图所示:
7.创建MapReduce工程
(1)配置hadoop路径
选择window-->Preferences选择"Hadoop Map/Reduce",点击"Browse..."选择Hadoop文件夹的路径,这里我们根据以前我写的而配置文档设置为C:\Work\Hadoop\hadoop-0.20.2即可,这个步骤与运行环境无关,只是在新建工程时能将hadoop根目录下的所有的jar包自动导入,如图所示
(2)创建工程
在Eclipse中选择File-->New-->Project选择“Map/Reduce Project”,然后输入项目名称,创建项目,插件会自动把hadoop根目录和lib目录下的所有jar包导入,然后在src目录下面导入WordCount源代码(Hadoop自带的应用程序源代码路径为C:\Work\Hadoop\hadoop-0.20.2\src\examples\org\apache\hadoop\examples)如图所示
(3)配置所需的运行参数(光标在文件上,或者先debug一次)
在Eclipse中选择Run As-->Open Run Dialog....选择WordCount,在Arguments中配置运行参数hdfs://localhost:9000/tmp/hadoop-Administrator/mapred/input hdfs://localhost:9000/tmp/hadoop-Administrator/mapred/output/1
也可以直接右击WordCounr.java文件进行配置,分别表示HDFS 下的输入目录和输出目录,其中输入目录中有几个文本文件,且输出目录必须不存在,如图所示:
8.运行程序
右击工程,选择Run As-->Run on Hadoop选择配置好的MapReduce运行环境,点击“Finish”运行,如图所示
9.查看运行结果
我们在经过刷新,我们在输出目录中可以看到输出结果,除此之外,还可以看到一个logs文件夹,里面会有运行的日志。如图所示
10.后续补充
(1)插件代码的修改
使用Eclipse3.3以上版本开发Hadoop应用程序时需要修改插件,具体内容如下:
方法1:使用的是Eclipse 3.7如果使用的是hadoop-0.20.2文件夹下的插件在最后一步在Hadoop上运行时会没有反应,如果下载hadoop-0.20.3-dev-eclipse-plugin.jar插件,改名字为hadoop-0.20.2-eclipse-plugin.jar,然后放在eclipse/plugin文件夹下面,重新配置mapreduce location.运行时会成功,当然也是在伪分布下的,此方适用于linux系统下的,在windows环境没测试,下载地址为https://issues.apache.org/jira/secure/attachment/12460491/hadoop-eclipse-plugin-0.20.3-SNAPSHOT.jar
在下列网址上下载的开源插件也同样适用http://code.google.com/p/hadoop-eclipse-plugin/downloads/list
方法2:直接对插件代码进行修改,编辑\Hadoop-0.20.2源代码\src\contrib\eclipse-plugin\src\java\org\apache\hadoop\eclipse\launch下的HadoopApplicationLaunchShortcut.java文件,做如下修改//import org.eclipse.jdt.internal.debug.ui.launcher.JavaApplicationLauchShortcut;
Import org.eclipse.gdt.debug.ui.launchConfigurations.JavaApplicationLauochShortcut;修改完毕后在Hadoop目录下执行ant package重新打包eclipse插件,然后使用此插件,注意在编译eclipse-plugin之前,需要安装apache-ant,cpache-ivy,ant安装很简单,解压并添加到对应的bin目录到path变量中,ivy的安装就是讲解压后的jar包添加到ant目录下面,具体的过程见我的Hadoop源代码编译文档。