编写实际生产用的hadoop mapreduce程序的时候,通常都会引用第三方库,也就会碰到ClassPath的问题,主要是两种情况:
- 找不到类ClassNotFound
- 库的加载顺序不对,就是第三库引用了一个比较通用的库,比如jackson-core-asl,而hadoop包含了这个库,但是版本稍低,默认情况下hadoop会优先加载自身包含的库,这样就会造成引用库的版本不对,从而出现找不到类会类中的方法的错误
一般会在两个阶段碰到,分别有不同的解决方法:
- 作业提交阶段
- task运行阶段
作业提交阶段
找不到类这种情况有两种解决方法:
- 将第三方库和自己的程序代码打包到一个jar包中
- 设置HADOOP_CLASSPATH环境变量
打包
使用maven打包,pom文件中打包插件设置如下:
<build>
<plugins>
<plugin>
<artifactId</