新萄京娱乐赌场:JAXBException之解决方法,ClassNotFoundException的解决方法

 

珍视原因:

JAXB API被视作为属于java ee的模块,所以在java9中暗许并未有加载,不过在jdk中任然存在。

并发这些标题标原由大概很多,不过最终原因都以布署的档次文件中并未有这么些类包。

在开创自定义的Mapper时候,编写翻译正确,但上传到集群施行时出现错误:
11/12/11 22:53:16 INFO mapred.JobClient: Task Id :
attempt_201111301626_新萄京娱乐赌场:JAXBException之解决方法,ClassNotFoundException的解决方法。0015_m_000000_0, Status : FAILED
java.lang.RuntimeException:
java.lang.ClassNotFoundException: actiondemo.MyJob$MapClass
        at
org.apache.Hadoop.conf.Configuration.getClass(Configuration.java:866)
        at
org.apache.hadoop.mapreduce.JobContext.getMapperClass(JobContext.java:199)
        at
org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:719)
        at org.apache.hadoop.mapred.MapTask.run(MapTask.java:370)
        at org.apache.hadoop.mapred.Child$4.run(Child.java:255)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:396)
        at
org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1059)
        at org.apache.hadoop.mapred.Child.main(Child.java:249)
Caused by: java.lang.ClassNotFoundException: actiondemo.MyJob$MapClass
        at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
        at
sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:247)
        at
org.apache.hadoop.conf.Configuration.getClassByName(Configuration.java:819)
        at
org.apache.hadoop.conf.Configuration.getClass(Configuration.java:864)
        … 8 more

错误提示:

方法 1:

直白增添jaxb-api正视就可以:

<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.3.0</version>
</dependency>

那么出错的点在哪吧?逐一排除!

经过验证,开采难点原因及消除办法如下:

新萄京娱乐赌场 1

方法 2:

开发银行项目时增多jvm参数 --add-modules java.xml.bind
对此广大菜鸟来讲可能看到jvm相关的事物就头大,其实一点也不细略的,那儿以IDEA作为示范:

新萄京娱乐赌场 2

截图1

新萄京娱乐赌场 3

截图2

原版的书文链接https://stackoverflow.com/questions/43574426/how-to-resolve-java-lang-noclassdeffounderror-javax-xml-bind-jaxbexception-in-j

提出利用第3种,毕竟这么些模块在java9中就曾经自带,在从别的地点下载jar包,纯属小题大做。

1.率先在项目文件中从未增多相应的jar包,能够在maven
dependencis文件夹中看是否有。若是未有,在pom文件增添依赖配置就能够;假使有,仍然出现难题转第3步

因为使用的是0.20之上的Hadoop版本,在调用jar中的自定义mapper时,需求设置setJarByClass方法,设置方法如下:
job.setJarByClass(MyJob.class);
其实,在出口日志中也可以有提醒音信:
11/12/11 22:53:03 WARN mapred.JobClient: No job jar file set.  User
classes may not be found. See JobConf(Class) or
JobConf#setJar(String).
job.setJarByClass(MyJob.class);

新萄京娱乐赌场 4

二.在maven的本土饭馆中找到相应的jar包文件,双击试图展开它,借使出现报错说文件已经损坏恐怕不完全(笔者估量大概是先前maven下载的时候因为互连网的原由中途断掉未有下载达成,

新萄京娱乐赌场 5

 

 后一次pom在maven饭馆引入本地jar包的时候不会再从官方网站下载,直接拿的是上次可怜残缺文件,所以会出错),化解办法正是把这几个jar包文件删除,重新update
pom文件,让maven重新下载这几个jar到本地仓库。

 

 
 假设发掘本地饭店的那个jar包张开也不会报错,那么转第一步。

相关文章