You are viewing a plain text version of this content. The canonical link for it is here.
Posted to mapreduce-issues@hadoop.apache.org by "Sangjin Lee (JIRA)" <ji...@apache.org> on 2013/04/11 22:47:17 UTC
[jira] [Commented] (MAPREDUCE-5146) application classloader may be
used too early to load classes
[ https://issues.apache.org/jira/browse/MAPREDUCE-5146?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13629341#comment-13629341 ]
Sangjin Lee commented on MAPREDUCE-5146:
----------------------------------------
Example stack trace:
{noformat}
org.apache.hadoop.yarn.util.ApplicationClassLoader.loadClass(java.lang.String, boolean) line: 145
org.apache.hadoop.yarn.util.ApplicationClassLoader.loadClass(java.lang.String) line: 126
javax.xml.parsers.FactoryFinder.getProviderClass(java.lang.String, java.lang.ClassLoader, boolean, boolean) line: 112
javax.xml.parsers.FactoryFinder.newInstance(java.lang.String, java.lang.ClassLoader, boolean, boolean) line: 170
javax.xml.parsers.FactoryFinder.newInstance(java.lang.String, java.lang.ClassLoader, boolean) line: 147
javax.xml.parsers.FactoryFinder.find(java.lang.String, java.lang.String) line: 257
javax.xml.parsers.DocumentBuilderFactory.newInstance() line: 121
org.apache.hadoop.mapred.JobConf(org.apache.hadoop.conf.Configuration).loadResource(java.util.Properties, org.apache.hadoop.conf.Configuration$Resource, boolean) line: 1884
org.apache.hadoop.mapred.JobConf(org.apache.hadoop.conf.Configuration).loadResources(java.util.Properties, java.util.ArrayList<org.apache.hadoop.conf.Configuration.Resource>, boolean) line: 1861
org.apache.hadoop.mapred.JobConf(org.apache.hadoop.conf.Configuration).getProps() line: 1778
org.apache.hadoop.mapred.JobConf(org.apache.hadoop.conf.Configuration).get(java.lang.String) line: 713
org.apache.hadoop.mapred.JobConf(org.apache.hadoop.conf.Configuration).getTrimmed(java.lang.String) line: 732
org.apache.hadoop.mapred.JobConf(org.apache.hadoop.conf.Configuration).getClass(java.lang.String, java.lang.Class<?>) line: 1574
org.apache.hadoop.fs.FileSystem.getFileSystemClass(java.lang.String, org.apache.hadoop.conf.Configuration) line: 2259
org.apache.hadoop.fs.FileSystem.createFileSystem(java.net.URI, org.apache.hadoop.conf.Configuration) line: 2272
org.apache.hadoop.fs.FileSystem.access$200(java.net.URI, org.apache.hadoop.conf.Configuration) line: 86
org.apache.hadoop.fs.FileSystem$Cache.getInternal(java.net.URI, org.apache.hadoop.conf.Configuration, org.apache.hadoop.fs.FileSystem$Cache$Key) line: 2311
org.apache.hadoop.fs.FileSystem$Cache.get(java.net.URI, org.apache.hadoop.conf.Configuration) line: 2293
org.apache.hadoop.fs.FileSystem.get(java.net.URI, org.apache.hadoop.conf.Configuration) line: 317
org.apache.hadoop.fs.FileSystem.getLocal(org.apache.hadoop.conf.Configuration) line: 288
org.apache.hadoop.fs.LocalDirAllocator$AllocatorPerContext.confChanged(org.apache.hadoop.conf.Configuration) line: 270
org.apache.hadoop.fs.LocalDirAllocator$AllocatorPerContext.getLocalPathToRead(java.lang.String, org.apache.hadoop.conf.Configuration) line: 428
org.apache.hadoop.fs.LocalDirAllocator.getLocalPathToRead(java.lang.String, org.apache.hadoop.conf.Configuration) line: 164
org.apache.hadoop.mapred.YarnChild.configureLocalDirs(org.apache.hadoop.mapred.Task, org.apache.hadoop.mapred.JobConf) line: 225
org.apache.hadoop.mapred.YarnChild.configureTask(org.apache.hadoop.mapred.Task, org.apache.hadoop.security.Credentials, org.apache.hadoop.security.token.Token<org.apache.hadoop.mapreduce.security.token.JobTokenIdentifier>) line: 277
org.apache.hadoop.mapred.YarnChild.main(java.lang.String[]) line: 142
{noformat}
> application classloader may be used too early to load classes
> -------------------------------------------------------------
>
> Key: MAPREDUCE-5146
> URL: https://issues.apache.org/jira/browse/MAPREDUCE-5146
> Project: Hadoop Map/Reduce
> Issue Type: Bug
> Components: task
> Affects Versions: 2.0.3-alpha
> Reporter: Sangjin Lee
>
> At least in the case of YarnChild, the application classloader is set fairly early (both in Configuration and as a TCCL). This has an effect of using the application classloader unexpectedly early.
> There is a fair amount of code that gets invoked between setting the classloader and executing mapper/reducer task.
> For example, I saw that the application classloader was asked to load a DOM parser class (com.sun.org.apache.xerces...) as part of initializing the filesystem. Luckily, in most cases this would be delegated to the parent classloader as the job classpath would not have those classes.
> However, in general, this behavior carries the risk of loading the same class twice, and potentially causing problems such as ClassCastException. Those would turn into nasty bugs that are hard to fix.
> It would be good to either set the application classloader as late as possible or place clearer limitations so it loads only the mapper/reducer classes and their dependencies.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira