红联Linux门户
Linux帮助

解决Hadoop集群执行包含third-part lib的jar包的Class/File问题

发布时间:2016-12-20 22:54:53来源:linux网站作者:SunnyMarkLiu
1、异常信息
WordCount 的 maven 工程包含一些第三方的 lib,打包 package 之后的 jar 包放到 Hadoop 集群执行时报如下异常Class/File NotFoundException:
解决Hadoop集群执行包含third-part lib的jar包的Class/File问题
使用 jd-gui 反编译生成的 jar 包,也可发现没有包含 guava:
解决Hadoop集群执行包含third-part lib的jar包的Class/File问题
但 maven工程的 External Libraries 里包含 guava 的依赖:
解决Hadoop集群执行包含third-part lib的jar包的Class/File问题
所以,问题出在 maven 打包的时候由于有的第三方包相互依赖而导致没有包含进来。
 
2、解决方案
在 pom.xml 文件中添加如下插件:
<build>
<plugins>
<!--指定主函数和各个依赖-->
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2</version>
<configuration>
<archive>
<manifest>
<!-- 指定 main 函数的类 -->
<mainClass>com.markliu.hadoop.mapreduce.WordCount</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<!-- 不是 shade -->
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
maven 重新 clean、package,可发现已经添加过得包自动跳过:
解决Hadoop集群执行包含third-part lib的jar包的Class/File问题
上传到集群执行的结果:
解决Hadoop集群执行包含third-part lib的jar包的Class/File问题
 
本文永久更新地址:http://www.linuxdiyf.com/linux/27088.html