当我们在Hadoop2中使用第三方Jar包来跑MR(使用Pig)时,会抛出以下异常:
ERROR 2997: Unable to recreate exception from backed error:
Error: com.google.common.collect.Range.closed(Ljava/lang/Comparable;Ljava/lang/Comparable;)
Lcom/google/common/collect/Range;
但是我们在Pig脚本中把Jar包(guava-16.0.1.jar)已经注册了,那么为什么还会报这种错误呢?
这个错误很显然是没有使用最新的版本而找的还是老版本的Jar(以上报错的这个类是guava 1.5以后才出现的),果断看了CLASSPATH,发现果然在CLASSPATH中使用了guava,但是版本较老guava-11.0.2.jar。所以要解决该问题就需要让执行MR时优先找用户的CLASSPATH。
于是在mapred-site.xml中加入
<property>
<name>mapreduce.job.user.classpath.first</name>
<value>true</value>
</property>
重启ResourceManager
问题解决。