Hi Robert,

I didn't understand completely. Are you suggesting to have all action specific 
main classes in /share/lib/oozie instead of their respective action sharelibs?

Thanks,
Virag

From: Robert Kanter <rkan...@cloudera.com<mailto:rkan...@cloudera.com>>
Date: Monday, May 6, 2013 12:47 PM
To: "dev@oozie.apache.org<mailto:dev@oozie.apache.org>" 
<dev@oozie.apache.org<mailto:dev@oozie.apache.org>>, Virag Kothari 
<vi...@yahoo-inc.com<mailto:vi...@yahoo-inc.com>>, Alejandro Abdelnur 
<t...@cloudera.com<mailto:t...@cloudera.com>>
Subject: Re: OOZIE-1311

Virag,
I talked more with Alejandro about the sharelib and the launcher jar.

It would be good if we could eventually get rid of the launcher jar completely 
because:
- less files would be copied to HDFS so it should be faster
- it would fix an issue where some linux distress cleanup the temp dir and 
delete the launcher jar

The contents of the launcher jar could be moved to the Oozie sharelib 
(/share/lib/oozie) which IIRC currently only has a json jar file.

As for backwards compatibility, we could do something like what you suggested 
for the other sharelibs where the webapp module includes them.  Then we'd add 
some property to oozie-site that would switch between the old behavior with the 
launcher jar (sharelib is not required) and the new behavior without the 
launcher jar (sharelib is required).  A new major release, like Oozie 4, would 
be a good time to introduce this change as the default; users can use the 
property to go back to the old behavior.  Also, if set to use the new behavior, 
we should make oozie.use.system.libpath in the job.properties default to true 
because the sharelib would be required, and if set to the old behavior, it 
would default to false.

Thoughts?

thanks
- Robert





On Wed, Apr 24, 2013 at 12:24 PM, Virag Kothari 
<vi...@yahoo-inc.com<mailto:vi...@yahoo-inc.com>> wrote:
Thanks Robert. Created OOZIE-1341

On 4/24/13 11:36 AM, "Robert Kanter" 
<rkan...@cloudera.com<mailto:rkan...@cloudera.com>> wrote:

>I think I follow what you're saying; assuming everything works correctly,
>I
>think that sounds good.  Can you make a JIRA with that and put up a patch;
>that might be easier to see how this would work.
>
>thanks
>- Robert
>
>
>On Wed, Apr 24, 2013 at 11:29 AM, Virag Kothari 
><vi...@yahoo-inc.com<mailto:vi...@yahoo-inc.com>>
>wrote:
>
>> We can keep the Main classes in the share lib, but have the action
>> executors package the main classes for shipping it to
>> Launcher (basically again having the method getLauncherClasses() in
>>action
>> executors). Also the oozie-sharelib.jar containing main classes
>> should be part of web-app.
>> This will improve the building/testing env as classes are in isolated
>> sharelibs but will make the share lib optional as main classes are part
>>of
>> oozie-server.
>> Can we do this change to trunk as this is blocking our QE's to pick
>>builds
>> due to share lib incompatibility?
>>
>> We can still do what oozie-1318 is trying to achieve. For, e.g with Hcat
>> integration,
>> there can be multiple overridable implementation of URIHandlers that can
>> be shipped to launcher.
>> We can do the same for other main classes if required.
>>
>>
>> Thanks,
>> Virag
>>
>>
>> On 4/24/13 10:18 AM, "Robert Kanter" 
>> <rkan...@cloudera.com<mailto:rkan...@cloudera.com>> wrote:
>>
>> >That's true, its primarily a building/testing improvement.  And from a
>> >design perspective, it could be considered "cleaner" to not have the
>> >launcher jar.
>> >
>> >Your idea sounds like a good compromise between backwards compatibility
>> >and
>> >improving the building/testing env.  How would we do that?
>> >
>> >As a side note, there's also a new feature with the Main classes being
>>in
>> >the sharelib; users can now override the Main class that Oozie will use
>> >for
>> >the action because its no longer in the launcher jar.  I think this
>>could
>> >still be a useful feature, but I'm guessing that if we do the
>>compromise,
>> >this would go away?  In any case, OOZIE-1318 is to make the Main
>> >overridable with a config, which is probably cleaner and more flexible
>> >than
>> >replacing a jar file.
>> >
>> >thanks
>> >- Robert
>> >
>> >
>> >On Wed, Apr 24, 2013 at 9:54 AM, Virag Kothari 
>> ><vi...@yahoo-inc.com<mailto:vi...@yahoo-inc.com>>
>> >wrote:
>> >
>> >> That is a good suggestion for preserving compatibility, Robert.
>> >>
>> >> Another question is what is the main purpose of OOZIE-1311? From JIRA
>> >> description, the primary
>> >> advantage of moving Main classes from core to share lib is it can
>>help
>> >>in
>> >> preventing dependencies conflicts
>> >> (different versions of antlr's for pig, hive). However, that problem
>> >>only
>> >> exists while building/testing Oozie.
>> >> If that is the case, main classes can be moved to share lib but they
>>can
>> >> be bundled in oozie-server itself.
>> >> In that case, the deployment doesn't change and share lib can still
>>be
>> >> optional
>> >> as oozie server would ship those classes (same as what was happening
>> >> before). And,
>> >> advantage of 1311 for building/testing will be retained
>> >>
>> >> The main concern is having share lib as a required installation will
>> >> complicate deployment.
>> >> Doing hot upgrade for share lib is non-trivial and Oozie doesn't
>>provide
>> >> inbuilt support for that.
>> >> Even though end-users wouldn't notice the change, it will be a big
>> >>change
>> >> for system admins installing oozie
>> >> So even though share lib is nice feature to have, keeping it optional
>> >> seems better to me as there are other ways
>> >> Of including jars and which were introduced much before share lib.
>> >>
>> >> Thanks,
>> >> Virag
>> >>
>> >>
>> >>
>> >>
>> >> On 4/24/13 9:09 AM, "Robert Kanter" 
>> >> <rkan...@cloudera.com<mailto:rkan...@cloudera.com>> wrote:
>> >>
>> >> >Alejandro had another suggestion to prevent breaking stuff for
>>existing
>> >> >apps where the sharelib isn't used.  Assuming the sharelib is
>> >>installed,
>> >> >if
>> >> >the user doesn't set oozie.use.system.libpath to true, then Oozie
>>would
>> >> >only include the oozie-*.jar from the sharelib (the one with the
>>Main)
>> >>in
>> >> >it; if its set to true, then Oozie would include all of the jars in
>>the
>> >> >sharelib.  This would allow users to still use their own lib dir
>>while
>> >> >still getting the Main into the classpath.
>> >> >
>> >> >- Robert
>> >> >
>> >> >
>> >> >
>> >> >On Tue, Apr 23, 2013 at 10:46 PM, Alejandro Abdelnur
>> >> ><tuc...@gmail.com<mailto:tuc...@gmail.com>>wrote:
>> >> >
>> >> >> virag, if your oozie servers dont have sharelibs currently
>>installed
>> >> >>then
>> >> >> unstalling sharelibs as part of an update would not break ant
>>running
>> >> >>app.
>> >> >> regarding the requirement of enabling the sharelibs to have the
>> >>mains,
>> >> >>you
>> >> >> have a point. we need to figure out how to get those in the
>> >>classpath if
>> >> >> the user is not using the sharelibs. i'd suggest we leave this
>> >> >> patch in trunk for now and we move it to a release branch once we
>> >>sorted
>> >> >> out a way of solving this incompatibility.
>> >> >>
>> >> >> thanks
>> >> >>
>> >> >> Alejandro
>> >> >> (phone typing)
>> >> >>
>> >> >> On Apr 23, 2013, at 5:09 PM, Virag Kothari 
>> >> >> <vi...@yahoo-inc.com<mailto:vi...@yahoo-inc.com>>
>> >>wrote:
>> >> >>
>> >> >> >
>> >> >> > Tucu, Thanks for the reply and explanation.
>> >> >> > For workflows running in Y!, cold upgrade is not a feasible
>>option
>> >>as
>> >> >>we
>> >> >> > cannot expect all the running actions to complete before Oozie
>> >> >>restart.
>> >> >> > Hot upgrade is a good option, but we will need time to
>>implement it
>> >> >>as we
>> >> >> > currently don't have sharelib as part of our deployment.
>> >> >> > So can we deprecate the refactoring of launcher classes in this
>> >> >>release?
>> >> >> > Also, all the launcher classes are only added to distributed
>>cache
>> >>if
>> >> >>the
>> >> >> > workflow is configured to use system lib path
>> >> >> > (oozie.use.system.libpath=true)
>> >> >> > We shouldn't mandate the workflow to have this property as they
>>are
>> >> >> > oozie's launcher classes.
>> >> >> >
>> >> >> > Thanks,
>> >> >> > Virag
>> >> >> >
>> >> >> >
>> >> >> >
>> >> >> > On 4/23/13 3:21 PM, "Alejandro Abdelnur" 
>> >> >> > <tuc...@gmail.com<mailto:tuc...@gmail.com>>
>>wrote:
>> >> >> >
>> >> >> >> Virag,
>> >> >> >>
>> >> >> >> On sharelib being required, yes you are correct. For this we
>> >>should:
>> >> >> >>
>> >> >> >> * Make 100% clear in the quick-start/install docs that the
>> >>sharelib
>> >> >>is
>> >> >> >> REQUIRED.
>> >> >> >>
>> >> >> >> * Add a check at Oozie startup to verify the sharelib dir
>>exists,
>> >> >>else
>> >> >> >> fail
>> >> >> >> to start.
>> >> >> >>
>> >> >> >> On sharelib lib issue during upgrade for in-flight jobs.
>> >>Depending on
>> >> >> the
>> >> >> >> type of upgrade this may be an issue.
>> >> >> >>
>> >> >> >> * If you are upgrading an oozie server fix that does not change
>> >>the
>> >> >> >> sharelib files, this is not an issue and you can just shutdown
>>the
>> >> >>oozie
>> >> >> >> server with in-flight jobs.
>> >> >> >>
>> >> >> >> * If you are upgrading an oozie server fix that involves
>>sharelib
>> >> >>files
>> >> >> >> changes, then you have 2 options:
>> >> >> >>
>> >> >> >> ** Cold upgrade: bring all WF jobs to suspend/completion, wait
>> >>till
>> >> >>all
>> >> >> >> running actions end, then shutdown oozie server, upgrade oozie
>> >>server
>> >> >> and
>> >> >> >> sharelib. Then restart oozie server and resume WF jobs. In this
>> >>case
>> >> >>all
>> >> >> >> new WF actions will use the new sharelib.
>> >> >> >>
>> >> >> >> ** Hot upgrade: stop oozie server. modify the oozie-site.xml
>> >>sharelib
>> >> >> >> location to point to a new directory. upgrade the oozie server.
>> >> >>install
>> >> >> >> the
>> >> >> >> sharelib (will be a create as the sharelib dir in HDFS does not
>> >> >>exist).
>> >> >> >> start the oozie server. In this case all running WF actions
>>will
>> >> >> continue
>> >> >> >> running with no issues as the JARs in the distributed cache
>>have
>> >>not
>> >> >> been
>> >> >> >> touch. All new WF actions will start using the new sharelib.
>> >> >> >>
>> >> >> >> Note that this sharelib upgrade protocol is not introduced by
>> >> >>requiring
>> >> >> >> sharelib, it is required if you have applications that use
>> >>sharelib
>> >> >> today.
>> >> >> >>
>> >> >> >> Does this address your concerns?
>> >> >> >>
>> >> >> >> Thanks.
>> >> >> >>
>> >> >> >>
>> >> >> >>
>> >> >> >> On Tue, Apr 23, 2013 at 1:35 PM, Virag Kothari
>> >><vi...@yahoo-inc.com<mailto:vi...@yahoo-inc.com>>
>> >> >> >> wrote:
>> >> >> >>
>> >> >> >>> Hi,
>> >> >> >>>
>> >> >> >>> With OOZIE-1311 and its subtasks,  the idea seems to move all
>>the
>> >> >> >>> launcher
>> >> >> >>> classes like PigMain, HiveMain etc. to  their respective
>> >>sharelibs.
>> >> >> >>> So, now shared lib is a mandatory deployment step. Before
>>shared
>> >>lib
>> >> >> was
>> >> >> >>> optional as users could bundle jars with their workflow
>> >>application.
>> >> >> >>> So always requiring shared lib seems to introduce 2 problems:
>> >> >> >>>
>> >> >> >>>  1.  The current deployments which don't use action shared lib
>> >>will
>> >> >> >>> fail.
>> >> >> >>> So, probably we should deprecate the current behavior.
>> >> >> >>>
>> >> >> >>> 2. The hadoop distributed cache mechanism will fail a job if
>>the
>> >> >>files
>> >> >> >>> in
>> >> >> >>> DC are updated on hdfs while the hadoop job is running. So,
>>when
>> >> >>Oozie
>> >> >> >>> is
>> >> >> >>> restarted and shared lib is uploaded to hdfs as part of
>> >> >> >>>             deployment, hadoop  will fail the existing jobs
>>for
>> >> >>which
>> >> >> >>> the
>> >> >> >>> timestamp of  the file on hdfs doesn't match the timestamp of
>>its
>> >> >>copy
>> >> >> >>> in
>> >> >> >>> the job's DC.
>> >> >> >>>
>> >> >> >>>
>> >> >> >>> Thanks,
>> >> >> >>> Virag
>> >> >> >
>> >> >>
>> >>
>> >>
>>
>>


Reply via email to