It took forever, but I finally got the refactoring done; I just uploaded a patch at OOZIE-1315 <https://issues.apache.org/jira/browse/OOZIE-1315>. Please take a look.
The patch has the default set to true (use the launcher jar). When I commit it I can have the version in branch-4 use true and the version in trunk use false. thanks - Robert On Mon, May 6, 2013 at 3:06 PM, Rohini Palaniswamy <rohini.adi...@gmail.com>wrote: > Tucu, > That sounds good. Can we have the changes go in trunk first and once we > validate that everything is fine, can we then port all the patches to > branch-4.0? > > Thanks, > Rohini > > > On Mon, May 6, 2013 at 2:52 PM, Alejandro Abdelnur <t...@cloudera.com > >wrote: > > > Rohini, > > > > I understand you don't want to destabilize Oozie 4. Still, as we have no > > done a 4 release yet, I think it is a good time to introduce this > feature. > > > > How about the following (similar to what we did for command > interruptions)? > > > > We do as Robert proposed in his last email, but keeping the default value > > on OFF for Oozie 4; and in Oozie 5 we invert the default value to ON. > > > > This would mean you don't have to change anything in your deployment > > protocol for Oozie 4. > > > > Thx > > > > > > > > On Mon, May 6, 2013 at 2:30 PM, Rohini Palaniswamy < > > rohini.adi...@gmail.com> wrote: > > > >> Robert, > >> > A new major release, like Oozie 4, would be a good time to introduce > >> this change as the default; > >> > >> We already have Oozie 4 deployed in some clusters and it is stable > >> now. We are waiting for users to validate Oozie-HCat integration before > we > >> deploy them in production clusters and call out a release in Apache. So > it > >> would be good to introduce this in the next release which will also be a > >> big release anyway. > >> > >> Regards, > >> Rohini > >> > >> > >> On Mon, May 6, 2013 at 2:09 PM, Robert Kanter <rkan...@cloudera.com > >wrote: > >> > >>> Sorry, I realize that I wasn't clear on that point. The Main classes > >>> would > >>> go in their respective sharelib (e.g. PigMain goes in share/lib/pig/) > but > >>> the other few classes that all actions use in the launcher jar (e.g. > >>> LauncherMapper) would go in the oozie sharelib (share/lib/oozie), which > >>> IIRC is already included when you use sharelibs (for example, when you > >>> use > >>> the sharelib with the Pig action, it includes both the share/lib/pig > and > >>> share/lib/oozie). > >>> > >>> thanks > >>> - Robert > >>> > >>> > >>> On Mon, May 6, 2013 at 1:52 PM, Virag Kothari <vi...@yahoo-inc.com> > >>> wrote: > >>> > >>> > 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> > >>> > Date: Monday, May 6, 2013 12:47 PM > >>> > To: "dev@oozie.apache.org" <dev@oozie.apache.org>, Virag Kothari < > >>> > vi...@yahoo-inc.com>, Alejandro Abdelnur <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 > >>> >wrote: > >>> > > >>> >> Thanks Robert. Created OOZIE-1341 > >>> >> > >>> >> On 4/24/13 11:36 AM, "Robert Kanter" <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 > >>> > > >>> >> >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> > 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> > >>> >> >> >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> > >>> 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>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> > >>> >> >> >>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 > >>> > > >>> >> >>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> > >>> >> >> >> >> >> 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 > >>> >> >> >> >> > > >>> >> >> >> >> > >>> >> >> >> > >>> >> >> >> > >>> >> >> > >>> >> >> > >>> >> > >>> >> > >>> > > >>> > >> > >> > > > > > > -- > > Alejandro > > >