关于Maven构建的多模块工程在Hadoop下运行时模块无法互相调用类的问题

便当少年 发布于 2015/02/19 15:36
阅读 744
收藏 0

现在有一个关于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配置问题?还是本身就不可以呢?鞠躬……

加载中
0
huan
huan

这个跟maven 没有关系,hadoop是分布式集群计算环境,你需要将你所依赖的jar包都提交到集群上去才行。有2种方式:

1 将所有依赖jar包打成fat jar 提交。

2 用hadoot的runtools 的libjars 参数,将所依赖的jar包提交。

便当少年
便当少年
回复 @huan : 恩,多谢,已经搞定了。
huan
huan
回复 @抓狂的便当少年 : 可以搜索一下 ToolRunner 和 libjars 有很多具体说明
便当少年
便当少年
1、第一种就是连依赖+源码一起打个Artifacts么,这个我倒是试过,的确解决了问题,但是整个jar包实在是太大了。 2、第二种是指hadoop/yarn/mapred 的命令参数么?我这边代理服务器坏掉了没法访问hadoop官网和google,是怎么提交方式呢?感激不尽
0
ToEast
ToEast
你可以试试把hope-basic部署到一个私服,然后在hope-hadoop中引入
返回顶部
顶部