IDEA SpringBoot集成hadoop运行环境,本地启动项目,GET请求接口触发远程提交MapReduce任务至生产集群报错:
Error: java.lang.ClassNotFoundException: org.wltea.analyzer.core.IKSegmenter
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at com.jackroy.www.ServiceImpl.WordCountMap.map(WordCountMap.java:27)
at com.jackroy.www.ServiceImpl.WordCountMap.map(WordCountMap.java:15)
at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:146)
at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:799)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:347)
at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:174)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:422)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1729)
at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:168)
以下方法可解决类似错误:“Error: java.lang.ClassNotFoundException: xxxxx包.xxxxx类”。
问题分析报错信息说的很清楚,找不到IKSegmenter类,也就是我们的MapReduceApplication提交至集群后,找不到相关的依赖包,解决的思路很简单,只需要将依赖提前放入Hdfs某路径下,然后通过代码行指定依赖包路径:
// ikanalyzer-2012_u6.jar包存放于Hdfs的/0000/lib/目录下,其他缺包类似的处理办法
job.addFileToClassPath(new Path("hdfs://XXX.XXX.XX.XXX:XXXX/0000/lib/ikanalyzer-2012_u6.jar"));
接着启动项目,重新请求提交:
问题解决。
大家有什么问题可下方留言交流。