2

I am seeing this inside a hadoop job:

2014-08-21 09:26:57,216 ERROR org.apache.hadoop.mapred.Child: Error running child : java.lang.ExceptionInInitializerError
    at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:107)
    at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:78)
    at com.sun.xml.internal.ws.client.sei.SEIStub.invoke(SEIStub.java:129)
    at com.sun.proxy.$Proxy61.describeVehicle(Unknown Source)
    at com.company.inventory.externalapi.externalsoapclient.ExternalClientImpl.getFromSoap(ExternalClientImpl.java:46)
    at com.company.dataservices.external.hadoop.ExternalIngestionProcess.populateExternalCache(ExternalIngestionProcess.java:112)
    at com.company.dataservices.external.hadoop.ExternalIngestionProcess.map(ExternalIngestionProcess.java:93)
    at com.company.dataservices.external.hadoop.ExternalIngestionProcess.map(ExternalIngestionProcess.java:38)
    at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:140)
    at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:672)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:330)
    at org.apache.hadoop.mapred.Child$4.run(Child.java:268)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:415)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1438)
    at org.apache.hadoop.mapred.Child.main(Child.java:262)
Caused by: java.lang.ClassCastException: com.sun.xml.bind.v2.runtime.JAXBContextImpl cannot be cast to com.sun.xml.internal.bind.api.JAXBRIContext
    at com.sun.xml.internal.ws.fault.SOAPFaultBuilder.<clinit>(SOAPFaultBuilder.java:550)
    ... 16 more

This issue looks similar to this issue, except I am not supplying any jax-b dependencies on my classpath. However, it does look like hadoop does.

Is there a way to force hadoop to use the jdk jaxb jars or only use it's own supplied jaxb jars, but not mix both?

Community
  • 1
  • 1
javamonkey79
  • 17,443
  • 36
  • 114
  • 172

1 Answers1

3

Frankly speaking, it doesn't sound like a Hadoop bug. Proper solution, as you've already mentioned, is to have classpath fixed, but try this:

-Djavax.xml.bind.JAXBContext=com.sun.xml.internal.bind.v2.ContextFactory

Additional details

Renat Gilmanov
  • 17,735
  • 5
  • 39
  • 56
  • You're right that it is not a Hadoop bug strictly speaking, more of a classpath annoyance. I think I did try that property and it did not work. – javamonkey79 Sep 02 '14 at 07:18
  • Sorry, this is the only solution I have. There is no other way to specify a factory to be used, as far as I know. – Renat Gilmanov Sep 05 '14 at 00:58