I agree with Matthias,I didn't know about ProgramDesciption and Program
Interfaces because they are not advertised anywhere..

On Tue, May 26, 2015 at 5:01 PM, Matthias J. Sax <
mj...@informatik.hu-berlin.de> wrote:

> I see your point.
>
> However, right now only few people are aware of "ProgramDesciption"
> interface. If we want to "advertise" for it, it should be used (at
> least) in a few examples. Otherwise, people will never use it, and the
> changes I plan to apply are kind of useless. I would even claim, that
> the interface should be removed completely is this case...
>
>
> On 05/26/2015 03:31 PM, Maximilian Michels wrote:
> > Sorry, my bad. Yes, it is helpful to have a separate program and
> parameter
> > description in ProgramDescription. I'm not sure if it adds much value to
> > implement ProgramDescription in the examples. It introduces verbosity and
> > might give the impression that you have to implement ProgramDescription
> in
> > your Flink job.
> >
> > On Tue, May 26, 2015 at 12:00 PM, Matthias J. Sax <
> > mj...@informatik.hu-berlin.de> wrote:
> >
> >> Hi Max,
> >>
> >> thanks for your feedback. I guess you confuse the interfaces "Program"
> >> and "ProgramDescription". Using "Program" the use of main method is
> >> replaced by "getPlan(...)". However, "ProgramDescription" only adds
> >> method "getDescription()" which returns a string that explains the usage
> >> of the program (ie, short description, expected parameters).
> >>
> >> Thus, adding "ProgramDescription" to the examples, does not change the
> >> examples -- main method will still be uses. It only adds the ability
> >> that a program "explains" itself (ie, give meta info). Furhtermore,
> >> "ProgramDescription" is also not related to the new "ParameterTool".
> >>
> >> -Matthias
> >>
> >> On 05/26/2015 11:46 AM, Maximilian Michels wrote:
> >>> I don't think `getDisplayName()` is necessary either. The class name
> and
> >>> the description string should be fine. Adding ProgramDescription to the
> >>> examples is not necessary; as already pointed out, using the main
> method
> >> is
> >>> more convenient for most users. As far as I know, the idea of the
> >>> ParameterTool was to use it only in the user code and not automatically
> >>> handle parameters.
> >>>
> >>> Changing the interface would be quite API breaking but since most
> >> programs
> >>> use the main method, IMHO we could do it.
> >>>
> >>> On Fri, May 22, 2015 at 10:09 PM, Matthias J. Sax <
> >>> mj...@informatik.hu-berlin.de> wrote:
> >>>
> >>>> Makes sense to me. :)
> >>>>
> >>>> One more thing: What about extending the "ProgramDescription"
> interface
> >>>> to have multiple methods as Flavio suggested (with the config(...)
> >>>> method that should be handle by the ParameterTool)
> >>>>
> >>>>> public interface FlinkJob {
> >>>>>
> >>>>> /** The name to display in the job submission UI or shell */
> >>>>> //e.g. "My Flink HelloWorld"
> >>>>> String getDisplayName();
> >>>>> //e.g. "This program does this and that etc.."
> >>>>> String getDescription();
> >>>>> //e.g. <0,Integer,"An integer representing my first param">,
> >>>> <1,String,"An string representing my second param">
> >>>>> List<Tuple3<Integer, TypeInfo, String>> paramDescription;
> >>>>> /** Set up the flink job in the passed ExecutionEnvironment */
> >>>>> ExecutionEnvironment config(ExecutionEnvironment env);
> >>>>> }
> >>>>
> >>>> Right now, the interface is used only a couple of times in Flink's
> code
> >>>> base, so it would not be a problem to update those classes. However,
> it
> >>>> could break external code that uses the interface already (even if I
> >>>> doubt that the interface is well known and used often [or at all]).
> >>>>
> >>>> I personally don't think, that "getDiplayName()" to too helpful.
> >>>> Splitting the program description and the parameter description seems
> to
> >>>> be useful. For example, if wrong parameters are provided, the
> parameter
> >>>> description can be included in the error message. If program+parameter
> >>>> description is given in a single string, this is not possible. But
> this
> >>>> is only a minor issue of course.
> >>>>
> >>>> Maybe, we should also add the interface to the current Flink examples,
> >>>> to make people more aware of it. Is there any documentation on the web
> >>>> site.
> >>>>
> >>>>
> >>>> -Matthias
> >>>>
> >>>>
> >>>>
> >>>> On 05/22/2015 09:43 PM, Robert Metzger wrote:
> >>>>> Thank you for working on this.
> >>>>> My responses are inline below:
> >>>>>
> >>>>> (Flavio)
> >>>>>
> >>>>>> My suggestion is to create a specific Flink interface to get also
> >>>>>> description of a job and standardize parameter passing.
> >>>>>
> >>>>>
> >>>>> I've recently merged the ParameterTool which is solving the
> >> "standardize
> >>>>> parameter passing" problem (at least it presents a best practice) :
> >>>>>
> >>>>
> >>
> http://ci.apache.org/projects/flink/flink-docs-master/apis/best_practices.html#parsing-command-line-arguments-and-passing-them-around-in-your-flink-application
> >>>>>
> >>>>> Regarding the description: Maybe we can use the "ProgramDescription"
> >>>>> interface for getting a string describing the program in the web
> >>>> frontend.
> >>>>>
> >>>>> (Matthias)
> >>>>>
> >>>>>> I don't want to start working on it, before it's clear that it has a
> >>>>>> chance to be
> >>>>>> included in Flink.
> >>>>>
> >>>>>
> >>>>> I think the changes discussed here won't change the current behavior,
> >> but
> >>>>> they add new functionality which
> >>>>> can make the life of our users easier, so I'll vote to include your
> >>>> changes
> >>>>> (given they meet our quality standards)
> >>>>>
> >>>>>
> >>>>> If multiple classes implement "Program" interface an exception should
> >> be
> >>>>>> through (I think that would make sense). However, I am not sure was
> >>>>>> "good" behavior is, if a single "Program"-class is found and an
> >>>>>> additional main-method class.
> >>>>>>   - should "Program"-class be executed (ie, "overwrite" main-method
> >>>> class)
> >>>>>>   - or, better to through an exception ?
> >>>>>
> >>>>>
> >>>>> I would give a class implementing "Program" priority over a random
> >> main()
> >>>>> method in a random class.
> >>>>> Maybe printing a WARN log message informing the user that the
> "Program"
> >>>>> class has been choosen.
> >>>>>
> >>>>>
> >>>>> If no "Program"-class is found, but a single main-method class, Flink
> >>>>>> could execute using main method. But I am not sure either, if this
> is
> >>>>>> "good" behavior. If multiple main-method classes are present,
> throwing
> >>>>>> and exception is the only way to got, I guess.
> >>>>>
> >>>>>
> >>>>> I think the best effort approach "one class with main() found" is
> good.
> >>>> In
> >>>>> case of multiple main methods, a helpful exception is the best
> approach
> >>>> in
> >>>>> my opinion.
> >>>>>
> >>>>>
> >>>>>  If the manifest contains "program-class" or "Main-Class" entry,
> >>>>>> should we check the jar file right away if the specified class is
> >> there?
> >>>>>> Right now, no check is performed and an error occurs if the user
> tries
> >>>>>> to execute the job.
> >>>>>
> >>>>>
> >>>>> I'd say the current approach is sufficient. There is no need to have
> a
> >>>>> special code path which is doing the check.
> >>>>> I think the error message will be pretty similar in both cases and I
> >> fear
> >>>>> that this additional code could also introduce new bugs ;)
> >>>>>
> >>>>>
> >>>>>
> >>>>>
> >>>>> On Fri, May 22, 2015 at 9:06 PM, Matthias J. Sax <
> >>>>> mj...@informatik.hu-berlin.de> wrote:
> >>>>>
> >>>>>> Hi,
> >>>>>>
> >>>>>> two more thoughts to this discussion:
> >>>>>>
> >>>>>>  1) looking at the commit history of "CliFrontend", I found the
> >>>>>> following closed issue and the closing pull request
> >>>>>>     * https://issues.apache.org/jira/browse/FLINK-1095
> >>>>>>     * https://github.com/apache/flink/pull/238
> >>>>>> It stand in opposite of Flavio's request to have a job description.
> >> Any
> >>>>>> comment on this? Should a removed feature be re-introduced? If not,
> I
> >>>>>> would suggest to remove the "ProgramDescription" interface
> completely.
> >>>>>>
> >>>>>>  2) If the manifest contains "program-class" or "Main-Class" entry,
> >>>>>> should we check the jar file right away if the specified class is
> >> there?
> >>>>>> Right now, no check is performed and an error occurs if the user
> tries
> >>>>>> to execute the job.
> >>>>>>
> >>>>>>
> >>>>>> -Matthias
> >>>>>>
> >>>>>>
> >>>>>> On 05/22/2015 12:06 PM, Matthias J. Sax wrote:
> >>>>>>> Thanks for your feedback.
> >>>>>>>
> >>>>>>> I agree on the main method "problem". For scanning and listing all
> >>>> stuff
> >>>>>>> that is found it's fine.
> >>>>>>>
> >>>>>>> The tricky question is the automatic invocation mechanism, if "-c"
> >> flag
> >>>>>>> is not used, and no manifest program-class or Main-Class entry is
> >>>> found.
> >>>>>>>
> >>>>>>> If multiple classes implement "Program" interface an exception
> should
> >>>> be
> >>>>>>> through (I think that would make sense). However, I am not sure was
> >>>>>>> "good" behavior is, if a single "Program"-class is found and an
> >>>>>>> additional main-method class.
> >>>>>>>   - should "Program"-class be executed (ie, "overwrite" main-method
> >>>>>> class)
> >>>>>>>   - or, better to through an exception ?
> >>>>>>>
> >>>>>>> If no "Program"-class is found, but a single main-method class,
> Flink
> >>>>>>> could execute using main method. But I am not sure either, if this
> is
> >>>>>>> "good" behavior. If multiple main-method classes are present,
> >> throwing
> >>>>>>> and exception is the only way to got, I guess.
> >>>>>>>
> >>>>>>> To sum up: Should Flink consider main-method classes for automatic
> >>>>>>> invocation, or should it be required for main-method classes to
> >> either
> >>>>>>> list them in "program-class" or "Main-Class" manifest parameter (to
> >>>>>>> enable them for automatic invocation)?
> >>>>>>>
> >>>>>>>
> >>>>>>> -Matthias
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>> On 05/22/2015 09:56 AM, Maximilian Michels wrote:
> >>>>>>>> Hi Matthias,
> >>>>>>>>
> >>>>>>>> Thank you for taking the time to analyze Flink's invocation
> >> behavior.
> >>>> I
> >>>>>>>> like your proposal. I'm not sure whether it is a good idea to scan
> >> the
> >>>>>>>> entire JAR for main methods. Sometimes, main methods are added
> >> solely
> >>>>>> for
> >>>>>>>> testing purposes and don't really serve any practical use.
> However,
> >> if
> >>>>>>>> you're already going through the JAR to find the
> ProgramDescription
> >>>>>>>> interface, then you might look for main methods as well. As long
> as
> >> it
> >>>>>> is
> >>>>>>>> just a listing without execution, that should be fine.
> >>>>>>>>
> >>>>>>>> Best regards,
> >>>>>>>> Max
> >>>>>>>>
> >>>>>>>> On Thu, May 21, 2015 at 3:43 PM, Matthias J. Sax <
> >>>>>>>> mj...@informatik.hu-berlin.de> wrote:
> >>>>>>>>
> >>>>>>>>> Hi,
> >>>>>>>>>
> >>>>>>>>> I had a look into the current Workflow of Flink with regard to
> the
> >>>>>>>>> progressing steps of a jar file.
> >>>>>>>>>
> >>>>>>>>> If I got it right it works as follows (not sure if this is
> >> documented
> >>>>>>>>> somewhere):
> >>>>>>>>>
> >>>>>>>>> 1) check, if "-c" flag is used to set program entry point
> >>>>>>>>>    if yes, goto 4
> >>>>>>>>> 2) try to extract "program-class" property from manifest
> >>>>>>>>>    (if found goto 4)
> >>>>>>>>> 3) try to extract "Main-Class" property from manifest
> >>>>>>>>>    -> if not found through exception (this happens also, if no
> >>>> manifest
> >>>>>>>>> file is found at all)
> >>>>>>>>>
> >>>>>>>>> 4) check if entry point class implements "Program" interface
> >>>>>>>>>    if yes, goto 6
> >>>>>>>>> 5) check if entry point class provided "public static void
> >>>>>> main(String[]
> >>>>>>>>> args)" method
> >>>>>>>>>    -> if not, through exception
> >>>>>>>>>
> >>>>>>>>> 6) execute program (ie, show plan/info or really run it)
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>> I also "discovered" the interface "ProgramDescription" with a
> >> single
> >>>>>>>>> method "String getDescription()". Even if some examples implement
> >>>> this
> >>>>>>>>> interface (and use it in the example itself), Flink basically
> >> ignores
> >>>>>>>>> it... From the CLI there is no way to get this info, and the
> WebUI
> >>>> does
> >>>>>>>>> actually get it if present, however, doesn't show it anywhere...
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>> I think it would be nice, if we would extend the following
> >> functions:
> >>>>>>>>>
> >>>>>>>>>  - extend the possibility to specify multiple entry classes in
> >>>>>>>>> "program-class" or "Main-Class" -> in this case, the user needs
> to
> >>>> use
> >>>>>>>>> "-c" flag to pick program to run every time
> >>>>>>>>>
> >>>>>>>>>  - add a CLI option that allows the user to see what entry point
> >>>>>> classes
> >>>>>>>>> are available
> >>>>>>>>>    for this, consider
> >>>>>>>>>      a) "program-class" entry
> >>>>>>>>>      b) "Main-Class" entry
> >>>>>>>>>      c) if neither is found, scan jar-file for classes
> implementing
> >>>>>>>>> "Program" interface
> >>>>>>>>>      d) if still not found, scan jar-file for classes with "main"
> >>>>>> method
> >>>>>>>>>
> >>>>>>>>>  - if user looks for entry point classes via CLI, check for
> >>>>>>>>> "ProgramDesciption" interface and show info
> >>>>>>>>>
> >>>>>>>>>  - extend WebUI to show all available entry-classes (pull request
> >>>>>>>>> already there, for multiple entries in "program-class")
> >>>>>>>>>
> >>>>>>>>>  - extend WebUI to show "ProgramDescription" info
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>> What do you think? I am not too sure about the "auto scan" of the
> >> jar
> >>>>>>>>> file if no manifest entry is provided. We might get some "fat
> jars"
> >>>> and
> >>>>>>>>> scanning might take some time.
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>> -Matthias
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>> On 05/19/2015 10:44 AM, Stephan Ewen wrote:
> >>>>>>>>>> We actually has an interface like that before ("Program"). It is
> >>>> still
> >>>>>>>>>> supported, but in all new programs we simply use the Java main
> >>>> method.
> >>>>>>>>> The
> >>>>>>>>>> advantage is that
> >>>>>>>>>> most IDEs can create executable JARs automatically, setting the
> >> JAR
> >>>>>>>>>> manifest attributes, etc.
> >>>>>>>>>>
> >>>>>>>>>> The "Program" interface still works, though. Most tool classes
> >> (like
> >>>>>>>>>> "PackagedProgram") have a way to figure out whether the code
> uses
> >>>>>>>>> "main()"
> >>>>>>>>>> or implements "Program"
> >>>>>>>>>> and calls the right method.
> >>>>>>>>>>
> >>>>>>>>>> You can try and extend the program interface. If you want to
> >>>>>> consistently
> >>>>>>>>>> support multiple programs in one JAR file, you may need to
> adjust
> >>>> the
> >>>>>>>>> util
> >>>>>>>>>> classes as
> >>>>>>>>>> well to deal with that.
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>> On Tue, May 19, 2015 at 10:10 AM, Matthias J. Sax <
> >>>>>>>>>> mj...@informatik.hu-berlin.de> wrote:
> >>>>>>>>>>
> >>>>>>>>>>> Supporting an interface like this seems to be a nice idea. Any
> >>>> other
> >>>>>>>>>>> opinions on it?
> >>>>>>>>>>>
> >>>>>>>>>>> It seems to be some more work to get it done right. I don't
> want
> >> to
> >>>>>>>>>>> start working on it, before it's clear that it has a chance to
> be
> >>>>>>>>>>> included in Flink.
> >>>>>>>>>>>
> >>>>>>>>>>> @Flavio: I moved the discussion to dev mailing list (user list
> is
> >>>> not
> >>>>>>>>>>> appropriate for this discussion). Are you subscribed to it or
> >>>> should
> >>>>>> I
> >>>>>>>>>>> cc you in each mail?
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>> -Matthias
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>> On 05/19/2015 09:39 AM, Flavio Pompermaier wrote:
> >>>>>>>>>>>> Nice feature Matthias!
> >>>>>>>>>>>> My suggestion is to create a specific Flink interface to get
> >> also
> >>>>>>>>>>>> description of a job and standardize parameter passing.
> >>>>>>>>>>>> Then, somewhere (e.g. Manifest) you could specify the list of
> >>>>>> packages
> >>>>>>>>>>> (or
> >>>>>>>>>>>> also directly the classes) to inspect with reflection to
> extract
> >>>> the
> >>>>>>>>> list
> >>>>>>>>>>>> of available Flink jobs.
> >>>>>>>>>>>> Something like:
> >>>>>>>>>>>>
> >>>>>>>>>>>> public interface FlinkJob {
> >>>>>>>>>>>>
> >>>>>>>>>>>> /** The name to display in the job submission UI or shell */
> >>>>>>>>>>>> //e.g. "My Flink HelloWorld"
> >>>>>>>>>>>> String getDisplayName();
> >>>>>>>>>>>>  //e.g. "This program does this and that etc.."
> >>>>>>>>>>>> String getDescription();
> >>>>>>>>>>>>  //e.g. <0,Integer,"An integer representing my first param">,
> >>>>>>>>>>> <1,String,"An
> >>>>>>>>>>>> string representing my second param">
> >>>>>>>>>>>> List<Tuple3<Integer, TypeInfo, String>> paramDescription;
> >>>>>>>>>>>>  /** Set up the flink job in the passed ExecutionEnvironment
> */
> >>>>>>>>>>>> ExecutionEnvironment config(ExecutionEnvironment env);
> >>>>>>>>>>>> }
> >>>>>>>>>>>>
> >>>>>>>>>>>> What do you think?
> >>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>> On Sun, May 17, 2015 at 10:38 PM, Matthias J. Sax <
> >>>>>>>>>>>> mj...@informatik.hu-berlin.de> wrote:
> >>>>>>>>>>>>
> >>>>>>>>>>>>> Hi,
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> I like the idea that Flink's WebClient can show different
> plans
> >>>> for
> >>>>>>>>>>>>> different jobs within a single jar file.
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> I prepared a prototype for this feature. You can find it
> here:
> >>>>>>>>>>>>> https://github.com/mjsax/flink/tree/multipleJobsWebUI
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> To test the feature, you need to prepare a jar file, that
> >>>> contains
> >>>>>> the
> >>>>>>>>>>>>> code of multiple programs and specify each entry class in the
> >>>>>> manifest
> >>>>>>>>>>>>> file as comma separated values in "program-class" line.
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> Feedback is welcome. :)
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> -Matthias
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> On 05/08/2015 03:08 PM, Flavio Pompermaier wrote:
> >>>>>>>>>>>>>> Thank you all for the support!
> >>>>>>>>>>>>>> It will be a really nice feature if the web client could be
> >> able
> >>>>>> to
> >>>>>>>>>>> show
> >>>>>>>>>>>>>> me the list of Flink jobs within my jar..
> >>>>>>>>>>>>>> it should be sufficient to mark them with a special
> annotation
> >>>> and
> >>>>>>>>>>>>>> inspect the classes within the jar..
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> On Fri, May 8, 2015 at 3:03 PM, Malte Schwarzer <m...@mieo.de
> >>>>>>>>>>>>>> <mailto:m...@mieo.de>> wrote:
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>>     Hi Flavio,
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>>     you also can put each job in a single class and use the
> –c
> >>>>>>>>>>> parameter
> >>>>>>>>>>>>>>     to execute jobs separately:
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>>     /bin/flink run –c com.myflinkjobs.JobA
> >>>>>>>>>>> /path/to/jar/multiplejobs.jar
> >>>>>>>>>>>>>>     /bin/flink run –c com.myflinkjobs.JobB
> >>>>>>>>>>> /path/to/jar/multiplejobs.jar
> >>>>>>>>>>>>>>     …
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>>     Cheers
> >>>>>>>>>>>>>>     Malte
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>>     Von: Robert Metzger <rmetz...@apache.org <mailto:
> >>>>>>>>>>> rmetz...@apache.org
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>     Antworten an: <u...@flink.apache.org <mailto:
> >>>>>>>>> u...@flink.apache.org
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>>     Datum: Freitag, 8. Mai 2015 14:57
> >>>>>>>>>>>>>>     An: "u...@flink.apache.org <mailto:
> u...@flink.apache.org
> >>> "
> >>>>>>>>>>>>>>     <u...@flink.apache.org <mailto:u...@flink.apache.org>>
> >>>>>>>>>>>>>>     Betreff: Re: Package multiple jobs in a single jar
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>>     Hi Flavio,
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>>     the pom from our quickstart is a good
> >>>>>>>>>>>>>>     reference:
> >>>>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>
> >>>>>>
> >>>>
> >>
> https://github.com/apache/flink/blob/master/flink-quickstart/flink-quickstart-java/src/main/resources/archetype-resources/pom.xml
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>>     On Fri, May 8, 2015 at 2:53 PM, Flavio Pompermaier
> >>>>>>>>>>>>>>     <pomperma...@okkam.it <mailto:pomperma...@okkam.it>>
> >> wrote:
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>>         Ok, get it.
> >>>>>>>>>>>>>>         And is there a reference pom.xml for shading my
> >>>>>> application
> >>>>>>>>>>> into
> >>>>>>>>>>>>>>         one fat-jar? which flink dependencies can I exclude?
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>>         On Fri, May 8, 2015 at 1:05 PM, Fabian Hueske <
> >>>>>>>>>>> fhue...@gmail.com
> >>>>>>>>>>>>>>         <mailto:fhue...@gmail.com>> wrote:
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>>             I didn't say that the main should return the
> >>>>>>>>>>>>>>             ExecutionEnvironment.
> >>>>>>>>>>>>>>             You can define and execute as many programs in a
> >>>> main
> >>>>>>>>>>>>>>             function as you like.
> >>>>>>>>>>>>>>             The program can be defined somewhere else, e.g.,
> >> in
> >>>> a
> >>>>>>>>>>>>>>             function that receives an ExecutionEnvironment
> and
> >>>>>>>>> attaches
> >>>>>>>>>>>>>>             a program such as
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>>             public void buildMyProgram(ExecutionEnvironment
> >>>> env) {
> >>>>>>>>>>>>>>               DataSet<String> lines = env.readTextFile(...);
> >>>>>>>>>>>>>>               // do something
> >>>>>>>>>>>>>>               lines.writeAsText(...);
> >>>>>>>>>>>>>>             }
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>>             That method could be invoked from main():
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>>             psv main() {
> >>>>>>>>>>>>>>               ExecutionEnv env = ...
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>>               if(...) {
> >>>>>>>>>>>>>>                 buildMyProgram(env);
> >>>>>>>>>>>>>>               }
> >>>>>>>>>>>>>>               else {
> >>>>>>>>>>>>>>                 buildSomeOtherProg(env);
> >>>>>>>>>>>>>>               }
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>>               env.execute();
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>>               // run some more programs
> >>>>>>>>>>>>>>             }
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>>             2015-05-08 12:56 GMT+02:00 Flavio Pompermaier
> >>>>>>>>>>>>>>             <pomperma...@okkam.it <mailto:
> >> pomperma...@okkam.it
> >>>>>> :
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>>                 Hi Fabian,
> >>>>>>>>>>>>>>                 thanks for the response.
> >>>>>>>>>>>>>>                 So my mains should be converted in a method
> >>>>>> returning
> >>>>>>>>>>>>>>                 the ExecutionEnvironment.
> >>>>>>>>>>>>>>                 However it think that it will be very nice
> to
> >>>>>> have a
> >>>>>>>>>>>>>>                 syntax like the one of the Hadoop
> >> ProgramDriver
> >>>> to
> >>>>>>>>>>>>>>                 define jobs to invoke from a single root
> >> class.
> >>>>>>>>>>>>>>                 Do you think it could be useful?
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>>                 On Fri, May 8, 2015 at 12:42 PM, Fabian
> Hueske
> >>>>>>>>>>>>>>                 <fhue...@gmail.com <mailto:
> fhue...@gmail.com
> >>>>
> >>>>>>>>> wrote:
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>>                     You easily have multiple Flink programs
> >> in a
> >>>>>>>>> single
> >>>>>>>>>>>>>>                     JAR file.
> >>>>>>>>>>>>>>                     A program is defined using an
> >>>>>>>>> ExecutionEnvironment
> >>>>>>>>>>>>>>                     and executed when you call
> >>>>>>>>>>>>>>                     ExecutionEnvironment.exeucte().
> >>>>>>>>>>>>>>                     Where and how you do that does not
> matter.
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>>                     You can for example implement a main
> >>>> function
> >>>>>>>>> such
> >>>>>>>>>>>>> as:
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>>                     public static void main(String... args)
> {
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>>                       if (today == Monday) {
> >>>>>>>>>>>>>>                         ExecutionEnvironment env = ...
> >>>>>>>>>>>>>>                         // define Monday prog
> >>>>>>>>>>>>>>                         env.execute()
> >>>>>>>>>>>>>>                       }
> >>>>>>>>>>>>>>                       else {
> >>>>>>>>>>>>>>                         ExecutionEnvironment env = ...
> >>>>>>>>>>>>>>                         // define other prog
> >>>>>>>>>>>>>>                         env.execute()
> >>>>>>>>>>>>>>                       }
> >>>>>>>>>>>>>>                     }
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>>                     2015-05-08 11:41 GMT+02:00 Flavio
> >>>> Pompermaier
> >>>>>>>>>>>>>>                     <pomperma...@okkam.it <mailto:
> >>>>>>>>> pomperma...@okkam.it
> >>>>>>>>>>>>>>> :
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>>                         Hi to all,
> >>>>>>>>>>>>>>                         is there any way to keep multiple
> jobs
> >>>> in
> >>>>>> a
> >>>>>>>>> jar
> >>>>>>>>>>>>>>                         and then choose at runtime the one
> to
> >>>>>> execute
> >>>>>>>>>>>>>>                         (like what ProgramDriver does in
> >>>> Hadoop)?
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>>                         Best,
> >>>>>>>>>>>>>>                         Flavio
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>
> >>>>>>>
> >>>>>>
> >>>>>>
> >>>>>
> >>>>
> >>>>
> >>>
> >>
> >>
> >
>
>

Reply via email to