在Hadoop上跑mahout程序的问题备忘
找不到类 ClassNotFoundException: org.apache.mahout.math.Vector.
直接使用eclipse来运行带有第三方(mahout)引用的程序时,这个plugin似乎无法将第三方所需要的包上传到Hadoop中,需要动手修改这个插件,可是代码下载不下来,坑爹啊。这样由于运行的程序中没有包含mahout的包,导致这个方法出错。
这样可以使用Eclipse的export来输出jar,选择executable jar,输出时选择包含第三方类库,并让他产生ant的build.xml文件。导出后,修改这个build.xml文件,将hadoop的系统包给删了。
打包时无法解开license包,报错 Mkdirs failed to create file
这个错误也是比较奇怪。打包的时候,mahout的jar中包含有license的包,结果在服务器上就是这个无法Unjar了,在build.xml文件中把license去掉吧,类似
<zipfileset excludes="META-INFlicenselicense/**" src="D:/projects/up/recomm/mahout/xstream-1.3.1.jar"/>
这样就没有这个包了。弄到服务器上,也不出错了。
hadoop命令行是否需要写类名的问题
如果jar的manifest文件已经指定了Main-class,则一定不要再写类名,即hadoop jar XXX.jar 【参数列表】 即可,否则需要 hadoop jar XXX.jar [MainClass] [参数列表] 这样的形式。