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

Jason Lowe commented on MAPREDUCE-4421:
---------------------------------------

Thanks for the review, Hitesh!

bq. Why does classpath need to include all of common, hdfs and yarn jar 
locations? Assuming that MR is running on a YARN-based cluster, shouldn't the 
location of the core dependencies come from the cluster deployment i.e. via the 
env that the NM sets for a container. I believe the only jars that MR should 
have in its uploaded tarball should be the client jars. I understand that there 
is no clear boundary for client-side only jars for common and hdfs today ( for 
For YARN, I believe it should be simple to split out the client-side 
requirements ) but it is something we should aim for or assume that the jars 
deployed on the cluster are compatible.

This is primarily for avoiding jar conflicts and removing dependencies on the 
nodes.  If the cluster upgrades and picks up a new version of 
jackson/jersey/guava/name-your-favorite-jar-that-breaks-apps-when-updated then 
that means existing apps can suddenly break due to jar conflicts.  Another case 
we've seen is when a dependency jar is dropped between versions, and apps were 
depending upon those to be provided by Hadoop.  Having the apps provide all of 
their dependencies means we can focus on just the RPC layer compatibilities 
(something we have to solve anyway) rather than have to worry as well about the 
myriad of combinations between jars within the app and those being picked up 
from the nodes.

However if desired the user could configure it to work with just a partial 
tarball by setting the classpath to pickup the jars on the nodes via 
HADOOP_COMMON_HOME/HADOOP_HDFS_HOME/HADOOP_YARN_HOME references in the 
classpath like MRApps is doing today.

bq. I would vote to make the tar-ball in HDFS be the only way to run MR on 
YARN. Obviously, this cannot be done for 2.x but we should move to this model 
on trunk and not support the current approach at all there. Comments?

I'm all for it, and I see this as being a stepping stone to getting there.  
We'd like to have the ability to run out of HDFS in 2.x as a potential way to 
do a rolling upgrade of bugfixes in the MR framework.  It probably won't be a 
complete solution to all forms of upgrades (i.e.: what if the client code or 
ShuffleHandler needs the fix), but it could still be very useful in practice.

bq. The other point is related to configs.

Yes, final parameter configs on the nodes conflicting with the job.xml settings 
are another concern.  In practice I don't expect that to be a common issue, but 
it is something we should try to address in a followup JIRA.

bq. How do you see framework name extracted from the path to be used? Is it 
just a safety check to ensure that it is found in the classpath? Will it have 
any relation to a version?

I see the framework fragment "alias" primarily used for sanity-checks in case 
the classpath wasn't updated when using a specified framework and to allow the 
classpath settings to be a bit more general.  For example, ops could configure 
the classpath once based on an expected framework tarball layout (e.g.: 
mrframework/share/mapreduce/* : mrframework/share/mapreduce/lib/* etc) and 
different versions of the tarball can be used without modifying the classpath 
as long as they match that layout.  e.g.: mrtarball-2.3.1.tgz#mrframework, 
mrtarball-2.3.4.tgz#mrframework, etc.  It's sort of like the assumed-layout 
approach from your last comment.  Ops could set the classpath and users could 
select the framework version without having to set the classpath as long as the 
layout is compatible.  Users could still override the classpath if using a 
framework that isn't compatible with the assumed layout.

One problem with the common classpath approach is that the archives need to 
have the same directory structure, so top-level directories with the version 
number in them break it.  The tarballs deployed to HDFS would have to be 
reorganized to have a common dir name rather than the versioned name.  Not 
difficult to do, but it is annoying.

bq. A minor nit - framework name seems confusing in relation to the framework 
name in use from earlier i.e yarn vs local framework.

Yeah, that's true.  I'm open to suggestions for what to call this instead of 
framework.

bq. Regarding versions, it seems like users will need to do 2 things. Change 
the location of the tarball on HDFS and modify the classpath. Users will need 
to know the exact structure of the classpath.  In such a scenario, do defaults 
even make sense?

I wanted this to be flexible so ops/users could decide how to organize the 
framework (i.e.: partial/complete tarball, monolithic jar, whatever) and be 
able to set the classpath accordingly.  I thought about hardcoding the 
assumption of the layout, but then that imposes a burden on future frameworks 
to match that (potentially obsolete) layout and is less flexible.  The cost of 
additional flexibility is additional configuration burden, so it's a tradeoff.  
That's why I was trying to use the framework fragment alias so the classpath 
could be set once and hopefully reused for quite some time.

I suppose one compromise between the two approaches would be a standard file 
located alongside the archive that the client can read to determine the 
corresponding classpath settings.  There's probably lots of approaches to 
automatically determining the classpath for an archive, and I'm interested to 
hear thoughts on it.
                
> Remove dependency on deployed MR jars
> -------------------------------------
>
>                 Key: MAPREDUCE-4421
>                 URL: https://issues.apache.org/jira/browse/MAPREDUCE-4421
>             Project: Hadoop Map/Reduce
>          Issue Type: Improvement
>    Affects Versions: 2.0.0-alpha
>            Reporter: Arun C Murthy
>            Assignee: Jason Lowe
>         Attachments: MAPREDUCE-4421.patch, MAPREDUCE-4421.patch
>
>
> Currently MR AM depends on MR jars being deployed on all nodes via implicit 
> dependency on YARN_APPLICATION_CLASSPATH. 
> We should stop adding mapreduce jars to YARN_APPLICATION_CLASSPATH and, 
> probably, just rely on adding a shaded MR jar along with job.jar to the 
> dist-cache.

--
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

Reply via email to