java.lang.NoClassDefFoundError: org/apache/hadoop/mapreduce/JobContext
开始报错
JobContext在Hive-exec里面有,所以觉得很奇怪说class not found 。java.lang.NoClassDefFoundError两种原因。
1.这个jar包确实没有。导入。
2.依赖包有冲突。导致无法加载。这个冲突的包,有可能是这个找不到类所属的jar包。也有可能是函数调用时,其他类的所属jar包冲突了。
本例子中JobContext类有,只有一个,没有冲突。但是查看异常信息栈,at org.apache.hadoop.hive.shims.ShimLoader.getHadoopShims(ShimLoader.java:95)
ShimLoader类有两个,冲突了。导致爆出上面异常。因此pom.xml中去掉hive-shims-common依赖,如下
删除hive-shims-common
<dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-exec</artifactId> <version>1.1.0</version> <exclusions> <exclusion> <groupId>org.apache.hive.shims</groupId> <artifactId>hive-shims-common</artifactId> </exclusion> </exclusions> </dependency>
后呈现真正有问题的地方,TaskAttemptContext类找不到。
这个属于hadoop-mapreduce-client-core jar包中的类。 <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-mapreduce-client-core</artifactId> <version>${hadoop.version}</version> </dependency>
加上依赖后,类找到了,问题解决。