一、问题描述
在一个MR中使用到了guava中的Range类用于合并不同数据中的vtime字段(时间区间)。在运行该MR时,将其打包成可执行jar包,使用hadoop jar XXX.jar
方式运行。
可是,运行中段报错了,错误内容是:
1 | Error:com.google.common.collect.Range.closed(Ljava/lang/Comparable;Ljava/lang/Comparable;) |
二、解决方法
网上查找资料后,定位到问题的原因:MR运行时会从hadoop集群的CLASSPATH下寻找依赖的jar包,可是hadoop集群的CLASSPATH下没有guava包,而guava包在我打的可执行jar包中。
解决上面问题的方法是在mapred-site.xml文件中加入下列配置项:
1 | <property> |
该配置项设置后,hadoop集群在运行MR时会优先找用户的CLASSPATH。
在修改完mapred-site.xm文件后需要重启ResourceManager才能生效。