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

Kihwal Lee commented on MAPREDUCE-4072:
---------------------------------------

I tested a bit.  

If we are to rely on LD_LIBRARY_PATH, there should be NO -Djava.library.path. 
Once this property is set, the JVM only searches the paths in java.library.path 
for loading JNI libraries and ignores LD_LIBRARY_PATH. I think this was the 
design in 0.23. It means that if users supply -Djava.library.path in client 
map/red options, something can break.

Using LD_LIBRARY_PATH is better since the JVM relies on the system function to 
locate the correct library, whereas specifying java.library.path causes the 
JVM's own resource loader to be in charge, which can be troublesome if the path 
contains a library with the same name but for different architecture.

1. The bug of unconditionally specifying -Djava.library.path for child jvm 
needs to be fixed.
2. Educate users that use of -Djava.library.path is no longer supported. They 
should specify LD_LIBRARY_PATH in the child map/red jvm env config.  This is an 
incompatible change in 0.23.

If we want to support java.library.path, we have to reintroduce the 
java.library.path munging code. This will make the system compatible, but has 
its own share of problems and not is against the goal of the YARN architecture.

We should avoid setting -Djava.library.path when launching container and 
instead set LD_LIBRARY_PATH correctly. 
                
> User set java.library.path seems to overwrite default creating problems 
> native lib loading
> ------------------------------------------------------------------------------------------
>
>                 Key: MAPREDUCE-4072
>                 URL: https://issues.apache.org/jira/browse/MAPREDUCE-4072
>             Project: Hadoop Map/Reduce
>          Issue Type: Bug
>          Components: mrv2
>            Reporter: Anupam Seth
>            Assignee: Anupam Seth
>
> This was found by Peeyush Bishnoi.
> While running a distributed cache example with Hadoop-0.23,
> tasks are failing as follows:
> ------------------------------------------------------------------------------------------------------------
> Exception from container-launch:
> org.apache.hadoop.util.Shell$ExitCodeException: at
> org.apache.hadoop.util.Shell.runCommand(Shell.java:261) at
> org.apache.hadoop.util.Shell.run(Shell.java:188) at
> org.apache.hadoop.util.Shell$ShellCommandExecutor.execute(Shell.java:381) at
> org.apache.hadoop.yarn.server.nodemanager.LinuxContainerExecutor.launchContainer(LinuxContainerExecutor.java:207)
> at
> org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:241)
> at
> org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:68)
> at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) at
> java.util.concurrent.FutureTask.run(FutureTask.java:138) at
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
> at java.lang.Thread.run(Thread.java:619) main : command provided 1 main : user
> is <user>
> ------------------------------------------------------------------------------------------------------------
> Same Pig script and command work successfully on 0.20
> See this in the stderr:
> Exception in thread "main" java.lang.ExceptionInInitializerError
>     at java.lang.Class.forName0(Native Method)
>     at java.lang.Class.forName(Class.java:247)
>     at
> org.apache.hadoop.conf.Configuration.getClassByNameOrNull(Configuration.java:1179)
>     at
> org.apache.hadoop.conf.Configuration.getClassByName(Configuration.java:1149)
>     at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:1238)
>     at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:1264)
>     at org.apache.hadoop.security.Groups.(Groups.java:54)
>     at
> org.apache.hadoop.security.Groups.getUserToGroupsMappingService(Groups.java:178)
>     at
> org.apache.hadoop.security.UserGroupInformation.initUGI(UserGroupInformation.java:252)
>     at
> org.apache.hadoop.security.UserGroupInformation.initialize(UserGroupInformation.java:223)
>     at
> org.apache.hadoop.security.UserGroupInformation.setConfiguration(UserGroupInformation.java:265)
>     at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:75)
> Caused by: java.lang.RuntimeException: Bailing out since native library
> couldn't be loaded
>     at
> org.apache.hadoop.security.JniBasedUnixGroupsMapping.(JniBasedUnixGroupsMapping.java:48)
>     ... 12 more
> Pig command:
> $ pig -Dmapred.job.queue.name=<queue> -Dmapred.cache.archives=<archives> 
> -Dmapred.child.java.opts="-Djava.library.path=./ygeo/lib
> -Dip2geo.preLoadLibraries=<some other libs>" -Djava.io.tmpdir=/grid/0/tmp 
> -Dmapred.create.symlink=yes -Dmapred.job.map.memory.mb=3072 piggeoscript.pig

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to