关于Maven构建的多模块工程在Hadoop下运行时模块无法互相调用类的问题
现在有一个关于Maven的小问题想向大家请教一下
我现在在IntelliJ IDEA创建了一个Maven Project , 下面有两个子模块,一个是hope-basic,一个是hope-hadoop
我在hope-basic模块中写了一个HopeUtil类,在hope-hadoop的pom.xml中引用hope-basic这个模块,并在一个任务的mapper中调用到了这个HopeUtil类。
现在问题是在IDEA中我编译正常,同时mvn install也没有错误,在hadoop中执行hadoop jar hope-hadoop.jar org.someclass [参数] 时,job能正常启动,但是在执行map过程中,会抛出runtimeError异常,提示ClassNotFound。但是如果把这个类复制到hope-hadoop模块后就能够正常执行。
那么比较科学的方法是怎样的呢?我难道不能从hadoop模块中引用basic模块的自己编写的类么?
是pom.xml配置问题?还是本身就不可以呢?鞠躬……
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
你可以试试把hope-basic部署到一个私服,然后在hope-hadoop中引入
1、第一种就是连依赖+源码一起打个Artifacts么,这个我倒是试过,的确解决了问题,但是整个jar包实在是太大了。 2、第二种是指hadoop/yarn/mapred 的命令参数么?我这边代理服务器坏掉了没法访问hadoop官网和google,是怎么提交方式呢?感激不尽
回复
可以搜索一下 ToolRunner 和 libjars 有很多具体说明
回复
恩,多谢,已经搞定了。
这个跟maven 没有关系,hadoop是分布式集群计算环境,你需要将你所依赖的jar包都提交到集群上去才行。有2种方式:
1 将所有依赖jar包打成fat jar 提交。
2 用hadoot的runtools 的libjars 参数,将所依赖的jar包提交。