撇开eclipse的插件不说,如果直接在eclipse运行main方法,运行的时刻会提示map,reduce找不到的错误。其实就是没有把需要的类提供给集群环境。
看过使用hadoop-eclipse-plugin插件(http://winseclone.iteye.com/blog/1837035)最后解析的Run-on-Hadoop的实现,不难得出下面的方法。
首先打包jar,然后啊jar的路径给Main的-Dmapred.jar参数。这样,就可以把环境需要的class上传到hadoop了。
主要的ant代码如下:
<property name="exported.jar" value="${build.dir}/tmp-runonhadoop-${now}.jar"></property> <target name="jar" depends="build" description="Make tmp-run.jar"> <jar jarfile="${exported.jar}" basedir="${build.classes}"> <fileset dir="${build.classes}" includes="**/example/*" /> <exclude name="**/core-site.xml"/> </jar> </target> <target name="WordCount" depends="build, jar" > <java classname="com.winse.hadoop.examples.WordCount" failοnerrοr="true" fork="yes"> <arg line="-fs=${fs.default.name} -jt=${mapred.job.tracker} -Dmapred.jar=${exported.jar} /test/input /test/output"/> <classpath refid="runon.classpath"/> </java> </target>
源码:
最后附有源码。
就build.xml重要,其他就是exmaples里面的wordcount的源码而已。