文章来源:http://blog.sina.com.cn/s/blog_537770820100byho.html
基于Eclipse的Hadoop应用开发环境的配置
配置好了Hadoop运行环境,下一步就要配置,开发环境了。实际上开发环境很好配置,网上很多的帖子,都指向了IBM提供的Hadoop开发工具,这个工具很好用。大家打开这个网址,很容易就能Step by step搞定,http://www.alphaworks.ibm.com/tech/mapreducetools。但是细心的读者不难发现,这个工具似乎是个绝版,到现在似乎还是停留在2007年3月23日呢,而且其支持的Eclipse也是3.3的,Hadoop更是0.17的。很多人在forum上还抱怨,安装上这个工具后,报出错误:Refresh DFS Children has encountered a problem:Refreshing DFS node failed: 1。呵呵,这个问题我也遇到了,我也很郁闷。我心里也在骂IBM这帮官僚如此不思进取。
这两天我在装载Hadoop Core的Examples测试,由于想要多了解些Hadoop,于是就打开了Hadoop的每个子目录,在打开/hadoop-0.19.0/contrib/意外发现了eclipse-plugin,心里不禁窃喜,不知道是不是IBM的这个工具的升级版移到这里还是其他什么原因,工具不是在这里吗?只不过与以前不同,是个jar包!我把hadoop-0.19.0-eclipse-plugin.jar,拷贝到eclipse-SDK-3.4-win32\eclipse\plugins下面,启动eclipse,居然真的安装成功了,真的是该工具的升级版,也没有了那个错误!真的是很意外!界面是这样滴,选择Window->Open Perspective,可见到一个窗口,里面有一个小象图标:Map/Reduce,点击它,会打开一个新的Perspective。然后点击Window->Show View,可以打开一个View,如图1所示,
配置完成以后,显示如图1左边的树形结构一样,这很像在Eclipse配置了,Tomcat的Server项目一样。配置完成以后,显示如图1左边的树形结构一样,这很像在Eclipse配置了,Tomcat的Server项目一样。
你点击view中的小象图标,很可能会报一个错误:
Cannot connect to the Map/Reduce location: hadoop@ubuntu1
java.io.IOException: Unknown protocol to name node: org.apache.hadoop.mapred.JobSubmissionProtocol
at org.apache.hadoop.dfs.NameNode.getProtocolVersion(NameNode.java:84)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:452)
at org.apache.hadoop.ipc.Server$Handler.run(Server.java:888)
我也遇到这个问题,很让我郁闷,我愿想是不是我的服务器哪里出了问题?后来才知道,是我的端口配置错误了,我在hadoop-site.xml中不是配置了:
<property>
<name>fs.default.name</name>
<value>hdfs://ubuntu1:9000</value>
</property>
<property>
<name>mapred.job.tracker</name>
<value>hdfs://ubuntu1:9001</value>
</property>
这两个端口很重要,9000是namenode的监听端口,而9001是jobtracker的监听端口,在图3的界面上新建DFS location时候,可以看到Map/Reduce Master,当时我还没弄明白,这是什么意思,现在才知道,这是jobtracker所在机器及监听端口,于是我设置成:host=ubuntu1,port=9001,而DFS Master中勾选Use M/R Master Host(意思是:是否使用与JobTracker相同的主机?)我的当然是勾上。端口当然也就是9000了,即host=ubuntu1,port=9000。
于是,连接the Map/Reduce location就不会再出现错误了。下面的用户是cdh,因为我的所有的ubuntu都是cdh的用户的。