[ 
https://issues.apache.org/jira/browse/MAPREDUCE-4052?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13924482#comment-13924482
 ] 

Jian He commented on MAPREDUCE-4052:
------------------------------------

The main problem here is that client is constructing the commands and 
environments for container launch depending on the client machine OS, but if 
server(NM) is running a different OS, NM is not able to parse the commands and 
environments.

The patch creates two constants in ApplicationConstants for PARAMETER_EXPANSION 
and CLASS_PATH_SEPARATOR as known that they are different between Windows and 
Linux. User application is supposed to use these constants to construct their 
commands and environments  when constructing the ContainerLaunchContext. When 
NM tries to launch the container, it will first replace the constants with the 
correct characters depending on its own OS. Changed MR and DistributedShell to 
do so.

> Windows eclipse cannot submit job from Windows client to Linux/Unix Hadoop 
> cluster.
> -----------------------------------------------------------------------------------
>
>                 Key: MAPREDUCE-4052
>                 URL: https://issues.apache.org/jira/browse/MAPREDUCE-4052
>             Project: Hadoop Map/Reduce
>          Issue Type: Bug
>          Components: job submission
>    Affects Versions: 0.23.1, 2.2.0
>         Environment: client on the Windows, the the cluster on the suse
>            Reporter: xieguiming
>            Assignee: xieguiming
>         Attachments: MAPREDUCE-4052-0.patch, MAPREDUCE-4052.1.patch, 
> MAPREDUCE-4052.patch
>
>
> when I use the eclipse on the windows to submit the job. and the 
> applicationmaster throw the exception:
> Exception in thread "main" java.lang.NoClassDefFoundError: 
> org/apache/hadoop/mapreduce/v2/app/MRAppMaster
> Caused by: java.lang.ClassNotFoundException: 
> org.apache.hadoop.mapreduce.v2.app.MRAppMaster
>         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:307)
>         at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
> Could not find the main class: 
> org.apache.hadoop.mapreduce.v2.app.MRAppMaster.  Program will exit.
> The reasion is :
> class Apps addToEnvironment function, use the
> private static final String SYSTEM_PATH_SEPARATOR =
>       System.getProperty("path.separator");
> and will result the MRApplicationMaster classpath use the ";" separator.
> I suggest that nodemanger do the replace.



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to