+1 for using slack for instant communication Aljoscha Krettek <aljos...@apache.org> 于2019年9月11日周三 下午4:44写道:
> Hi, > > We could try and use the ASF slack for this purpose, that would probably > be easiest. See https://s.apache.org/slack-invite. We could create a > dedicated channel for our work and would still use the open ASF > infrastructure and people can have a look if they are interested because > discussion would be public. What do you think? > > P.S. Committers/PMCs should should be able to login with their apache ID. > > Best, > Aljoscha > > > On 6. Sep 2019, at 14:24, Zili Chen <wander4...@gmail.com> wrote: > > > > Hi Aljoscha, > > > > I'd like to gather all the ideas here and among documents, and draft a > > formal FLIP > > that keep us on the same page. Hopefully I start a FLIP thread in next > week. > > > > For the implementation or said POC part, I'd like to work with you guys > who > > proposed > > the concept Executor to make sure that we go in the same direction. I'm > > wondering > > whether a dedicate thread or a Slack group is the proper one. In my > opinion > > we can > > involve the team in a Slack group, concurrent with the FLIP process start > > our branch > > and once we reach a consensus on the FLIP, open an umbrella issue about > the > > framework > > and start subtasks. What do you think? > > > > Best, > > tison. > > > > > > Aljoscha Krettek <aljos...@apache.org> 于2019年9月5日周四 下午9:39写道: > > > >> Hi Tison, > >> > >> To keep this moving forward, maybe you want to start working on a proof > of > >> concept implementation for the new JobClient interface, maybe with a new > >> method executeAsync() in the environment that returns the JobClient and > >> implement the methods to see how that works and to see where we get. > Would > >> you be interested in that? > >> > >> Also, at some point we should collect all the ideas and start forming an > >> actual FLIP. > >> > >> Best, > >> Aljoscha > >> > >>> On 4. Sep 2019, at 12:04, Zili Chen <wander4...@gmail.com> wrote: > >>> > >>> Thanks for your update Kostas! > >>> > >>> It looks good to me that clean up existing code paths as first > >>> pass. I'd like to help on review and file subtasks if I find ones. > >>> > >>> Best, > >>> tison. > >>> > >>> > >>> Kostas Kloudas <kklou...@gmail.com> 于2019年9月4日周三 下午5:52写道: > >>> Here is the issue, and I will keep on updating it as I find more > issues. > >>> > >>> https://issues.apache.org/jira/browse/FLINK-13954 > >>> > >>> This will also cover the refactoring of the Executors that we discussed > >>> in this thread, without any additional functionality (such as the job > >> client). > >>> > >>> Kostas > >>> > >>> On Wed, Sep 4, 2019 at 11:46 AM Kostas Kloudas <kklou...@gmail.com> > >> wrote: > >>>> > >>>> Great idea Tison! > >>>> > >>>> I will create the umbrella issue and post it here so that we are all > >>>> on the same page! > >>>> > >>>> Cheers, > >>>> Kostas > >>>> > >>>> On Wed, Sep 4, 2019 at 11:36 AM Zili Chen <wander4...@gmail.com> > >> wrote: > >>>>> > >>>>> Hi Kostas & Aljoscha, > >>>>> > >>>>> I notice that there is a JIRA(FLINK-13946) which could be included > >>>>> in this refactor thread. Since we agree on most of directions in > >>>>> big picture, is it reasonable that we create an umbrella issue for > >>>>> refactor client APIs and also linked subtasks? It would be a better > >>>>> way that we join forces of our community. > >>>>> > >>>>> Best, > >>>>> tison. > >>>>> > >>>>> > >>>>> Zili Chen <wander4...@gmail.com> 于2019年8月31日周六 下午12:52写道: > >>>>>> > >>>>>> Great Kostas! Looking forward to your POC! > >>>>>> > >>>>>> Best, > >>>>>> tison. > >>>>>> > >>>>>> > >>>>>> Jeff Zhang <zjf...@gmail.com> 于2019年8月30日周五 下午11:07写道: > >>>>>>> > >>>>>>> Awesome, @Kostas Looking forward your POC. > >>>>>>> > >>>>>>> Kostas Kloudas <kklou...@gmail.com> 于2019年8月30日周五 下午8:33写道: > >>>>>>> > >>>>>>>> Hi all, > >>>>>>>> > >>>>>>>> I am just writing here to let you know that I am working on a > >> POC that > >>>>>>>> tries to refactor the current state of job submission in Flink. > >>>>>>>> I want to stress out that it introduces NO CHANGES to the current > >>>>>>>> behaviour of Flink. It just re-arranges things and introduces the > >>>>>>>> notion of an Executor, which is the entity responsible for > >> taking the > >>>>>>>> user-code and submitting it for execution. > >>>>>>>> > >>>>>>>> Given this, the discussion about the functionality that the > >> JobClient > >>>>>>>> will expose to the user can go on independently and the same > >>>>>>>> holds for all the open questions so far. > >>>>>>>> > >>>>>>>> I hope I will have some more new to share soon. > >>>>>>>> > >>>>>>>> Thanks, > >>>>>>>> Kostas > >>>>>>>> > >>>>>>>> On Mon, Aug 26, 2019 at 4:20 AM Yang Wang <danrtsey...@gmail.com> > >> wrote: > >>>>>>>>> > >>>>>>>>> Hi Zili, > >>>>>>>>> > >>>>>>>>> It make sense to me that a dedicated cluster is started for a > >> per-job > >>>>>>>>> cluster and will not accept more jobs. > >>>>>>>>> Just have a question about the command line. > >>>>>>>>> > >>>>>>>>> Currently we could use the following commands to start > >> different > >>>>>>>> clusters. > >>>>>>>>> *per-job cluster* > >>>>>>>>> ./bin/flink run -d -p 5 -ynm perjob-cluster1 -m yarn-cluster > >>>>>>>>> examples/streaming/WindowJoin.jar > >>>>>>>>> *session cluster* > >>>>>>>>> ./bin/flink run -p 5 -ynm session-cluster1 -m yarn-cluster > >>>>>>>>> examples/streaming/WindowJoin.jar > >>>>>>>>> > >>>>>>>>> What will it look like after client enhancement? > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> Best, > >>>>>>>>> Yang > >>>>>>>>> > >>>>>>>>> Zili Chen <wander4...@gmail.com> 于2019年8月23日周五 下午10:46写道: > >>>>>>>>> > >>>>>>>>>> Hi Till, > >>>>>>>>>> > >>>>>>>>>> Thanks for your update. Nice to hear :-) > >>>>>>>>>> > >>>>>>>>>> Best, > >>>>>>>>>> tison. > >>>>>>>>>> > >>>>>>>>>> > >>>>>>>>>> Till Rohrmann <trohrm...@apache.org> 于2019年8月23日周五 > >> 下午10:39写道: > >>>>>>>>>> > >>>>>>>>>>> Hi Tison, > >>>>>>>>>>> > >>>>>>>>>>> just a quick comment concerning the class loading issues > >> when using > >>>>>>>> the > >>>>>>>>>> per > >>>>>>>>>>> job mode. The community wants to change it so that the > >>>>>>>>>>> StandaloneJobClusterEntryPoint actually uses the user code > >> class > >>>>>>>> loader > >>>>>>>>>>> with child first class loading [1]. Hence, I hope that > >> this problem > >>>>>>>> will > >>>>>>>>>> be > >>>>>>>>>>> resolved soon. > >>>>>>>>>>> > >>>>>>>>>>> [1] https://issues.apache.org/jira/browse/FLINK-13840 > >>>>>>>>>>> > >>>>>>>>>>> Cheers, > >>>>>>>>>>> Till > >>>>>>>>>>> > >>>>>>>>>>> On Fri, Aug 23, 2019 at 2:47 PM Kostas Kloudas < > >> kklou...@gmail.com> > >>>>>>>>>> wrote: > >>>>>>>>>>> > >>>>>>>>>>>> Hi all, > >>>>>>>>>>>> > >>>>>>>>>>>> On the topic of web submission, I agree with Till that > >> it only > >>>>>>>> seems > >>>>>>>>>>>> to complicate things. > >>>>>>>>>>>> It is bad for security, job isolation (anybody can > >> submit/cancel > >>>>>>>> jobs), > >>>>>>>>>>>> and its > >>>>>>>>>>>> implementation complicates some parts of the code. So, > >> if it were > >>>>>>>> to > >>>>>>>>>>>> redesign the > >>>>>>>>>>>> WebUI, maybe this part could be left out. In addition, I > >> would say > >>>>>>>>>>>> that the ability to cancel > >>>>>>>>>>>> jobs could also be left out. > >>>>>>>>>>>> > >>>>>>>>>>>> Also I would also be in favour of removing the > >> "detached" mode, for > >>>>>>>>>>>> the reasons mentioned > >>>>>>>>>>>> above (i.e. because now we will have a future > >> representing the > >>>>>>>> result > >>>>>>>>>>>> on which the user > >>>>>>>>>>>> can choose to wait or not). > >>>>>>>>>>>> > >>>>>>>>>>>> Now for the separating job submission and cluster > >> creation, I am in > >>>>>>>>>>>> favour of keeping both. > >>>>>>>>>>>> Once again, the reasons are mentioned above by Stephan, > >> Till, > >>>>>>>> Aljoscha > >>>>>>>>>>>> and also Zili seems > >>>>>>>>>>>> to agree. They mainly have to do with security, > >> isolation and ease > >>>>>>>> of > >>>>>>>>>>>> resource management > >>>>>>>>>>>> for the user as he knows that "when my job is done, > >> everything > >>>>>>>> will be > >>>>>>>>>>>> cleared up". This is > >>>>>>>>>>>> also the experience you get when launching a process on > >> your local > >>>>>>>> OS. > >>>>>>>>>>>> > >>>>>>>>>>>> On excluding the per-job mode from returning a JobClient > >> or not, I > >>>>>>>>>>>> believe that eventually > >>>>>>>>>>>> it would be nice to allow users to get back a jobClient. > >> The > >>>>>>>> reason is > >>>>>>>>>>>> that 1) I cannot > >>>>>>>>>>>> find any objective reason why the user-experience should > >> diverge, > >>>>>>>> and > >>>>>>>>>>>> 2) this will be the > >>>>>>>>>>>> way that the user will be able to interact with his > >> running job. > >>>>>>>>>>>> Assuming that the necessary > >>>>>>>>>>>> ports are open for the REST API to work, then I think > >> that the > >>>>>>>>>>>> JobClient can run against the > >>>>>>>>>>>> REST API without problems. If the needed ports are not > >> open, then > >>>>>>>> we > >>>>>>>>>>>> are safe to not return > >>>>>>>>>>>> a JobClient, as the user explicitly chose to close all > >> points of > >>>>>>>>>>>> communication to his running job. > >>>>>>>>>>>> > >>>>>>>>>>>> On the topic of not hijacking the "env.execute()" in > >> order to get > >>>>>>>> the > >>>>>>>>>>>> Plan, I definitely agree but > >>>>>>>>>>>> for the proposal of having a "compile()" method in the > >> env, I would > >>>>>>>>>>>> like to have a better look at > >>>>>>>>>>>> the existing code. > >>>>>>>>>>>> > >>>>>>>>>>>> Cheers, > >>>>>>>>>>>> Kostas > >>>>>>>>>>>> > >>>>>>>>>>>> On Fri, Aug 23, 2019 at 5:52 AM Zili Chen < > >> wander4...@gmail.com> > >>>>>>>>>> wrote: > >>>>>>>>>>>>> > >>>>>>>>>>>>> Hi Yang, > >>>>>>>>>>>>> > >>>>>>>>>>>>> It would be helpful if you check Stephan's last > >> comment, > >>>>>>>>>>>>> which states that isolation is important. > >>>>>>>>>>>>> > >>>>>>>>>>>>> For per-job mode, we run a dedicated cluster(maybe it > >>>>>>>>>>>>> should have been a couple of JM and TMs during FLIP-6 > >>>>>>>>>>>>> design) for a specific job. Thus the process is > >> prevented > >>>>>>>>>>>>> from other jobs. > >>>>>>>>>>>>> > >>>>>>>>>>>>> In our cases there was a time we suffered from multi > >>>>>>>>>>>>> jobs submitted by different users and they affected > >>>>>>>>>>>>> each other so that all ran into an error state. Also, > >>>>>>>>>>>>> run the client inside the cluster could save client > >>>>>>>>>>>>> resource at some points. > >>>>>>>>>>>>> > >>>>>>>>>>>>> However, we also face several issues as you mentioned, > >>>>>>>>>>>>> that in per-job mode it always uses parent classloader > >>>>>>>>>>>>> thus classloading issues occur. > >>>>>>>>>>>>> > >>>>>>>>>>>>> BTW, one can makes an analogy between session/per-job > >> mode > >>>>>>>>>>>>> in Flink, and client/cluster mode in Spark. > >>>>>>>>>>>>> > >>>>>>>>>>>>> Best, > >>>>>>>>>>>>> tison. > >>>>>>>>>>>>> > >>>>>>>>>>>>> > >>>>>>>>>>>>> Yang Wang <danrtsey...@gmail.com> 于2019年8月22日周四 > >> 上午11:25写道: > >>>>>>>>>>>>> > >>>>>>>>>>>>>> From the user's perspective, it is really confused > >> about the > >>>>>>>> scope > >>>>>>>>>> of > >>>>>>>>>>>>>> per-job cluster. > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> If it means a flink cluster with single job, so that > >> we could > >>>>>>>> get > >>>>>>>>>>>> better > >>>>>>>>>>>>>> isolation. > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> Now it does not matter how we deploy the cluster, > >> directly > >>>>>>>>>>>> deploy(mode1) > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> or start a flink cluster and then submit job through > >> cluster > >>>>>>>>>>>> client(mode2). > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> Otherwise, if it just means directly deploy, how > >> should we > >>>>>>>> name the > >>>>>>>>>>>> mode2, > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> session with job or something else? > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> We could also benefit from the mode2. Users could > >> get the same > >>>>>>>>>>>> isolation > >>>>>>>>>>>>>> with mode1. > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> The user code and dependencies will be loaded by > >> user class > >>>>>>>> loader > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> to avoid class conflict with framework. > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> Anyway, both of the two submission modes are useful. > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> We just need to clarify the concepts. > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> Best, > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> Yang > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> Zili Chen <wander4...@gmail.com> 于2019年8月20日周二 > >> 下午5:58写道: > >>>>>>>>>>>>>> > >>>>>>>>>>>>>>> Thanks for the clarification. > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> The idea JobDeployer ever came into my mind when I > >> was > >>>>>>>> muddled > >>>>>>>>>> with > >>>>>>>>>>>>>>> how to execute per-job mode and session mode with > >> the same > >>>>>>>> user > >>>>>>>>>>> code > >>>>>>>>>>>>>>> and framework codepath. > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> With the concept JobDeployer we back to the > >> statement that > >>>>>>>>>>>> environment > >>>>>>>>>>>>>>> knows every configs of cluster deployment and job > >>>>>>>> submission. We > >>>>>>>>>>>>>>> configure or generate from configuration a specific > >>>>>>>> JobDeployer > >>>>>>>>>> in > >>>>>>>>>>>>>>> environment and then code align on > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> *JobClient client = env.execute().get();* > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> which in session mode returned by > >> clusterClient.submitJob > >>>>>>>> and in > >>>>>>>>>>>> per-job > >>>>>>>>>>>>>>> mode returned by > >> clusterDescriptor.deployJobCluster. > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> Here comes a problem that currently we directly run > >>>>>>>>>>> ClusterEntrypoint > >>>>>>>>>>>>>>> with extracted job graph. Follow the JobDeployer > >> way we'd > >>>>>>>> better > >>>>>>>>>>>>>>> align entry point of per-job deployment at > >> JobDeployer. > >>>>>>>> Users run > >>>>>>>>>>>>>>> their main method or by a Cli(finally call main > >> method) to > >>>>>>>> deploy > >>>>>>>>>>> the > >>>>>>>>>>>>>>> job cluster. > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> Best, > >>>>>>>>>>>>>>> tison. > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> Stephan Ewen <se...@apache.org> 于2019年8月20日周二 > >> 下午4:40写道: > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>> Till has made some good comments here. > >>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>> Two things to add: > >>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>> - The job mode is very nice in the way that it > >> runs the > >>>>>>>>>> client > >>>>>>>>>>>> inside > >>>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>> cluster (in the same image/process that is the > >> JM) and thus > >>>>>>>>>>> unifies > >>>>>>>>>>>>>> both > >>>>>>>>>>>>>>>> applications and what the Spark world calls the > >> "driver > >>>>>>>> mode". > >>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>> - Another thing I would add is that during the > >> FLIP-6 > >>>>>>>> design, > >>>>>>>>>>> we > >>>>>>>>>>>> were > >>>>>>>>>>>>>>>> thinking about setups where Dispatcher and > >> JobManager are > >>>>>>>>>>> separate > >>>>>>>>>>>>>>>> processes. > >>>>>>>>>>>>>>>> A Yarn or Mesos Dispatcher of a session > >> could run > >>>>>>>>>>> independently > >>>>>>>>>>>>>> (even > >>>>>>>>>>>>>>>> as privileged processes executing no code). > >>>>>>>>>>>>>>>> Then you the "per-job" mode could still be > >> helpful: > >>>>>>>> when a > >>>>>>>>>>> job > >>>>>>>>>>>> is > >>>>>>>>>>>>>>>> submitted to the dispatcher, it launches the JM > >> again in a > >>>>>>>>>>> per-job > >>>>>>>>>>>>>> mode, > >>>>>>>>>>>>>>> so > >>>>>>>>>>>>>>>> that JM and TM processes are bound to teh job > >> only. For > >>>>>>>> higher > >>>>>>>>>>>> security > >>>>>>>>>>>>>>>> setups, it is important that processes are not > >> reused > >>>>>>>> across > >>>>>>>>>>> jobs. > >>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>> On Tue, Aug 20, 2019 at 10:27 AM Till Rohrmann < > >>>>>>>>>>>> trohrm...@apache.org> > >>>>>>>>>>>>>>>> wrote: > >>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> I would not be in favour of getting rid of the > >> per-job > >>>>>>>> mode > >>>>>>>>>>>> since it > >>>>>>>>>>>>>>>>> simplifies the process of running Flink jobs > >>>>>>>> considerably. > >>>>>>>>>>>> Moreover, > >>>>>>>>>>>>>> it > >>>>>>>>>>>>>>>> is > >>>>>>>>>>>>>>>>> not only well suited for container deployments > >> but also > >>>>>>>> for > >>>>>>>>>>>>>> deployments > >>>>>>>>>>>>>>>>> where you want to guarantee job isolation. For > >> example, a > >>>>>>>>>> user > >>>>>>>>>>>> could > >>>>>>>>>>>>>>> use > >>>>>>>>>>>>>>>>> the per-job mode on Yarn to execute his job on > >> a separate > >>>>>>>>>>>> cluster. > >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> I think that having two notions of cluster > >> deployments > >>>>>>>>>> (session > >>>>>>>>>>>> vs. > >>>>>>>>>>>>>>>> per-job > >>>>>>>>>>>>>>>>> mode) does not necessarily contradict your > >> ideas for the > >>>>>>>>>> client > >>>>>>>>>>>> api > >>>>>>>>>>>>>>>>> refactoring. For example one could have the > >> following > >>>>>>>>>>> interfaces: > >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> - ClusterDeploymentDescriptor: encapsulates > >> the logic > >>>>>>>> how to > >>>>>>>>>>>> deploy a > >>>>>>>>>>>>>>>>> cluster. > >>>>>>>>>>>>>>>>> - ClusterClient: allows to interact with a > >> cluster > >>>>>>>>>>>>>>>>> - JobClient: allows to interact with a running > >> job > >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> Now the ClusterDeploymentDescriptor could have > >> two > >>>>>>>> methods: > >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> - ClusterClient deploySessionCluster() > >>>>>>>>>>>>>>>>> - JobClusterClient/JobClient > >>>>>>>> deployPerJobCluster(JobGraph) > >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> where JobClusterClient is either a supertype of > >>>>>>>> ClusterClient > >>>>>>>>>>>> which > >>>>>>>>>>>>>>> does > >>>>>>>>>>>>>>>>> not give you the functionality to submit jobs > >> or > >>>>>>>>>>>> deployPerJobCluster > >>>>>>>>>>>>>>>>> returns directly a JobClient. > >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> When setting up the ExecutionEnvironment, one > >> would then > >>>>>>>> not > >>>>>>>>>>>> provide > >>>>>>>>>>>>>> a > >>>>>>>>>>>>>>>>> ClusterClient to submit jobs but a JobDeployer > >> which, > >>>>>>>>>> depending > >>>>>>>>>>>> on > >>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>> selected mode, either uses a ClusterClient > >> (session > >>>>>>>> mode) to > >>>>>>>>>>>> submit > >>>>>>>>>>>>>>> jobs > >>>>>>>>>>>>>>>> or > >>>>>>>>>>>>>>>>> a ClusterDeploymentDescriptor to deploy per a > >> job mode > >>>>>>>>>> cluster > >>>>>>>>>>>> with > >>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>> job > >>>>>>>>>>>>>>>>> to execute. > >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> These are just some thoughts how one could > >> make it > >>>>>>>> working > >>>>>>>>>>>> because I > >>>>>>>>>>>>>>>>> believe there is some value in using the per > >> job mode > >>>>>>>> from > >>>>>>>>>> the > >>>>>>>>>>>>>>>>> ExecutionEnvironment. > >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> Concerning the web submission, this is indeed > >> a bit > >>>>>>>> tricky. > >>>>>>>>>>> From > >>>>>>>>>>>> a > >>>>>>>>>>>>>>>> cluster > >>>>>>>>>>>>>>>>> management stand point, I would in favour of > >> not > >>>>>>>> executing > >>>>>>>>>> user > >>>>>>>>>>>> code > >>>>>>>>>>>>>> on > >>>>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>> REST endpoint. Especially when considering > >> security, it > >>>>>>>> would > >>>>>>>>>>> be > >>>>>>>>>>>> good > >>>>>>>>>>>>>>> to > >>>>>>>>>>>>>>>>> have a well defined cluster behaviour where it > >> is > >>>>>>>> explicitly > >>>>>>>>>>>> stated > >>>>>>>>>>>>>>> where > >>>>>>>>>>>>>>>>> user code and, thus, potentially risky code is > >> executed. > >>>>>>>>>>> Ideally > >>>>>>>>>>>> we > >>>>>>>>>>>>>>> limit > >>>>>>>>>>>>>>>>> it to the TaskExecutor and JobMaster. > >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> Cheers, > >>>>>>>>>>>>>>>>> Till > >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> On Tue, Aug 20, 2019 at 9:40 AM Flavio > >> Pompermaier < > >>>>>>>>>>>>>>> pomperma...@okkam.it > >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> wrote: > >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>> In my opinion the client should not use any > >>>>>>>> environment to > >>>>>>>>>>> get > >>>>>>>>>>>> the > >>>>>>>>>>>>>>> Job > >>>>>>>>>>>>>>>>>> graph because the jar should reside ONLY on > >> the cluster > >>>>>>>>>> (and > >>>>>>>>>>>> not in > >>>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>> client classpath otherwise there are always > >>>>>>>> inconsistencies > >>>>>>>>>>>> between > >>>>>>>>>>>>>>>>> client > >>>>>>>>>>>>>>>>>> and Flink Job manager's classpath). > >>>>>>>>>>>>>>>>>> In the YARN, Mesos and Kubernetes scenarios > >> you have > >>>>>>>> the > >>>>>>>>>> jar > >>>>>>>>>>>> but > >>>>>>>>>>>>>> you > >>>>>>>>>>>>>>>>> could > >>>>>>>>>>>>>>>>>> start a cluster that has the jar on the Job > >> Manager as > >>>>>>>> well > >>>>>>>>>>>> (but > >>>>>>>>>>>>>> this > >>>>>>>>>>>>>>>> is > >>>>>>>>>>>>>>>>>> the only case where I think you can assume > >> that the > >>>>>>>> client > >>>>>>>>>>> has > >>>>>>>>>>>> the > >>>>>>>>>>>>>>> jar > >>>>>>>>>>>>>>>> on > >>>>>>>>>>>>>>>>>> the classpath..in the REST job submission > >> you don't > >>>>>>>> have > >>>>>>>>>> any > >>>>>>>>>>>>>>>> classpath). > >>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>> Thus, always in my opinion, the JobGraph > >> should be > >>>>>>>>>> generated > >>>>>>>>>>>> by the > >>>>>>>>>>>>>>> Job > >>>>>>>>>>>>>>>>>> Manager REST API. > >>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>> On Tue, Aug 20, 2019 at 9:00 AM Zili Chen < > >>>>>>>>>>>> wander4...@gmail.com> > >>>>>>>>>>>>>>>> wrote: > >>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>> I would like to involve Till & Stephan here > >> to clarify > >>>>>>>>>> some > >>>>>>>>>>>>>> concept > >>>>>>>>>>>>>>> of > >>>>>>>>>>>>>>>>>>> per-job mode. > >>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>> The term per-job is one of modes a cluster > >> could run > >>>>>>>> on. > >>>>>>>>>> It > >>>>>>>>>>> is > >>>>>>>>>>>>>>> mainly > >>>>>>>>>>>>>>>>>>> aimed > >>>>>>>>>>>>>>>>>>> at spawn > >>>>>>>>>>>>>>>>>>> a dedicated cluster for a specific job > >> while the job > >>>>>>>> could > >>>>>>>>>>> be > >>>>>>>>>>>>>>> packaged > >>>>>>>>>>>>>>>>>>> with > >>>>>>>>>>>>>>>>>>> Flink > >>>>>>>>>>>>>>>>>>> itself and thus the cluster initialized > >> with job so > >>>>>>>> that > >>>>>>>>>> get > >>>>>>>>>>>> rid > >>>>>>>>>>>>>> of > >>>>>>>>>>>>>>> a > >>>>>>>>>>>>>>>>>>> separated > >>>>>>>>>>>>>>>>>>> submission step. > >>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>> This is useful for container deployments > >> where one > >>>>>>>> create > >>>>>>>>>>> his > >>>>>>>>>>>>>> image > >>>>>>>>>>>>>>>> with > >>>>>>>>>>>>>>>>>>> the job > >>>>>>>>>>>>>>>>>>> and then simply deploy the container. > >>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>> However, it is out of client scope since a > >>>>>>>>>>>> client(ClusterClient > >>>>>>>>>>>>>> for > >>>>>>>>>>>>>>>>>>> example) is for > >>>>>>>>>>>>>>>>>>> communicate with an existing cluster and > >> performance > >>>>>>>>>>> actions. > >>>>>>>>>>>>>>>> Currently, > >>>>>>>>>>>>>>>>>>> in > >>>>>>>>>>>>>>>>>>> per-job > >>>>>>>>>>>>>>>>>>> mode, we extract the job graph and bundle > >> it into > >>>>>>>> cluster > >>>>>>>>>>>>>> deployment > >>>>>>>>>>>>>>>> and > >>>>>>>>>>>>>>>>>>> thus no > >>>>>>>>>>>>>>>>>>> concept of client get involved. It looks > >> like > >>>>>>>> reasonable > >>>>>>>>>> to > >>>>>>>>>>>>>> exclude > >>>>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>> deployment > >>>>>>>>>>>>>>>>>>> of per-job cluster from client api and use > >> dedicated > >>>>>>>>>> utility > >>>>>>>>>>>>>>>>>>> classes(deployers) for > >>>>>>>>>>>>>>>>>>> deployment. > >>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>> Zili Chen <wander4...@gmail.com> > >> 于2019年8月20日周二 > >>>>>>>> 下午12:37写道: > >>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>> Hi Aljoscha, > >>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>> Thanks for your reply and participance. > >> The Google > >>>>>>>> Doc > >>>>>>>>>> you > >>>>>>>>>>>>>> linked > >>>>>>>>>>>>>>> to > >>>>>>>>>>>>>>>>>>>> requires > >>>>>>>>>>>>>>>>>>>> permission and I think you could use a > >> share link > >>>>>>>>>> instead. > >>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>> I agree with that we almost reach a > >> consensus that > >>>>>>>>>>>> JobClient is > >>>>>>>>>>>>>>>>>>> necessary > >>>>>>>>>>>>>>>>>>>> to > >>>>>>>>>>>>>>>>>>>> interacte with a running Job. > >>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>> Let me check your open questions one by > >> one. > >>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>> 1. Separate cluster creation and job > >> submission for > >>>>>>>>>>> per-job > >>>>>>>>>>>>>> mode. > >>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>> As you mentioned here is where the > >> opinions > >>>>>>>> diverge. In > >>>>>>>>>> my > >>>>>>>>>>>>>>> document > >>>>>>>>>>>>>>>>>>> there > >>>>>>>>>>>>>>>>>>>> is > >>>>>>>>>>>>>>>>>>>> an alternative[2] that proposes excluding > >> per-job > >>>>>>>>>>> deployment > >>>>>>>>>>>>>> from > >>>>>>>>>>>>>>>>> client > >>>>>>>>>>>>>>>>>>>> api > >>>>>>>>>>>>>>>>>>>> scope and now I find it is more > >> reasonable we do the > >>>>>>>>>>>> exclusion. > >>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>> When in per-job mode, a dedicated > >> JobCluster is > >>>>>>>> launched > >>>>>>>>>>> to > >>>>>>>>>>>>>>> execute > >>>>>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>>> specific job. It is like a Flink > >> Application more > >>>>>>>> than a > >>>>>>>>>>>>>>> submission > >>>>>>>>>>>>>>>>>>>> of Flink Job. Client only takes care of > >> job > >>>>>>>> submission > >>>>>>>>>> and > >>>>>>>>>>>>>> assume > >>>>>>>>>>>>>>>>> there > >>>>>>>>>>>>>>>>>>> is > >>>>>>>>>>>>>>>>>>>> an existing cluster. In this way we are > >> able to > >>>>>>>> consider > >>>>>>>>>>>> per-job > >>>>>>>>>>>>>>>>> issues > >>>>>>>>>>>>>>>>>>>> individually and JobClusterEntrypoint > >> would be the > >>>>>>>>>> utility > >>>>>>>>>>>> class > >>>>>>>>>>>>>>> for > >>>>>>>>>>>>>>>>>>>> per-job > >>>>>>>>>>>>>>>>>>>> deployment. > >>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>> Nevertheless, user program works in both > >> session > >>>>>>>> mode > >>>>>>>>>> and > >>>>>>>>>>>>>> per-job > >>>>>>>>>>>>>>>> mode > >>>>>>>>>>>>>>>>>>>> without > >>>>>>>>>>>>>>>>>>>> necessary to change code. JobClient in > >> per-job mode > >>>>>>>> is > >>>>>>>>>>>> returned > >>>>>>>>>>>>>>> from > >>>>>>>>>>>>>>>>>>>> env.execute as normal. However, it would > >> be no > >>>>>>>> longer a > >>>>>>>>>>>> wrapper > >>>>>>>>>>>>>> of > >>>>>>>>>>>>>>>>>>>> RestClusterClient but a wrapper of > >>>>>>>> PerJobClusterClient > >>>>>>>>>>> which > >>>>>>>>>>>>>>>>>>> communicates > >>>>>>>>>>>>>>>>>>>> to Dispatcher locally. > >>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>> 2. How to deal with plan preview. > >>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>> With env.compile functions users can get > >> JobGraph or > >>>>>>>>>>>> FlinkPlan > >>>>>>>>>>>>>> and > >>>>>>>>>>>>>>>>> thus > >>>>>>>>>>>>>>>>>>>> they can preview the plan with > >> programming. > >>>>>>>> Typically it > >>>>>>>>>>>> looks > >>>>>>>>>>>>>>> like > >>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>> if (preview configured) { > >>>>>>>>>>>>>>>>>>>> FlinkPlan plan = env.compile(); > >>>>>>>>>>>>>>>>>>>> new JSONDumpGenerator(...).dump(plan); > >>>>>>>>>>>>>>>>>>>> } else { > >>>>>>>>>>>>>>>>>>>> env.execute(); > >>>>>>>>>>>>>>>>>>>> } > >>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>> And `flink info` would be invalid any > >> more. > >>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>> 3. How to deal with Jar Submission at the > >> Web > >>>>>>>> Frontend. > >>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>> There is one more thread talked on this > >> topic[1]. > >>>>>>>> Apart > >>>>>>>>>>> from > >>>>>>>>>>>>>>>> removing > >>>>>>>>>>>>>>>>>>>> the functions there are two alternatives. > >>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>> One is to introduce an interface has a > >> method > >>>>>>>> returns > >>>>>>>>>>>>>>>>> JobGraph/FilnkPlan > >>>>>>>>>>>>>>>>>>>> and Jar Submission only support main-class > >>>>>>>> implements > >>>>>>>>>> this > >>>>>>>>>>>>>>>> interface. > >>>>>>>>>>>>>>>>>>>> And then extract the JobGraph/FlinkPlan > >> just by > >>>>>>>> calling > >>>>>>>>>>> the > >>>>>>>>>>>>>>> method. > >>>>>>>>>>>>>>>>>>>> In this way, it is even possible to > >> consider a > >>>>>>>>>> separation > >>>>>>>>>>>> of job > >>>>>>>>>>>>>>>>>>> creation > >>>>>>>>>>>>>>>>>>>> and job submission. > >>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>> The other is, as you mentioned, let > >> execute() do the > >>>>>>>>>>> actual > >>>>>>>>>>>>>>>> execution. > >>>>>>>>>>>>>>>>>>>> We won't execute the main method in the > >> WebFrontend > >>>>>>>> but > >>>>>>>>>>>> spawn a > >>>>>>>>>>>>>>>>> process > >>>>>>>>>>>>>>>>>>>> at WebMonitor side to execute. For return > >> part we > >>>>>>>> could > >>>>>>>>>>>> generate > >>>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>>> JobID from WebMonitor and pass it to the > >> execution > >>>>>>>>>>>> environemnt. > >>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>> 4. How to deal with detached mode. > >>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>> I think detached mode is a temporary > >> solution for > >>>>>>>>>>>> non-blocking > >>>>>>>>>>>>>>>>>>> submission. > >>>>>>>>>>>>>>>>>>>> In my document both submission and > >> execution return > >>>>>>>> a > >>>>>>>>>>>>>>>>> CompletableFuture > >>>>>>>>>>>>>>>>>>> and > >>>>>>>>>>>>>>>>>>>> users control whether or not wait for the > >> result. In > >>>>>>>>>> this > >>>>>>>>>>>> point > >>>>>>>>>>>>>> we > >>>>>>>>>>>>>>>>> don't > >>>>>>>>>>>>>>>>>>>> need a detached option but the > >> functionality is > >>>>>>>> covered. > >>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>> 5. How does per-job mode interact with > >> interactive > >>>>>>>>>>>> programming. > >>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>> All of YARN, Mesos and Kubernetes > >> scenarios follow > >>>>>>>> the > >>>>>>>>>>>> pattern > >>>>>>>>>>>>>>>> launch > >>>>>>>>>>>>>>>>> a > >>>>>>>>>>>>>>>>>>>> JobCluster now. And I don't think there > >> would be > >>>>>>>>>>>> inconsistency > >>>>>>>>>>>>>>>> between > >>>>>>>>>>>>>>>>>>>> different resource management. > >>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>> Best, > >>>>>>>>>>>>>>>>>>>> tison. > >>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>> [1] > >>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>> > >>>>>>>>>>>> > >>>>>>>>>>> > >>>>>>>>>> > >>>>>>>> > >> > https://lists.apache.org/x/thread.html/6db869c53816f4e2917949a7c6992c2b90856d7d639d7f2e1cd13768@%3Cdev.flink.apache.org%3E > >>>>>>>>>>>>>>>>>>>> [2] > >>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>> > >>>>>>>>>>>> > >>>>>>>>>>> > >>>>>>>>>> > >>>>>>>> > >> > https://docs.google.com/document/d/1UWJE7eYWiMuZewBKS0YmdVO2LUTqXPd6-pbOCof9ddY/edit?disco=AAAADZaGGfs > >>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>> Aljoscha Krettek <aljos...@apache.org> > >>>>>>>> 于2019年8月16日周五 > >>>>>>>>>>>> 下午9:20写道: > >>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>> Hi, > >>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>> I read both Jeffs initial design > >> document and the > >>>>>>>> newer > >>>>>>>>>>>>>> document > >>>>>>>>>>>>>>> by > >>>>>>>>>>>>>>>>>>>>> Tison. I also finally found the time to > >> collect our > >>>>>>>>>>>> thoughts on > >>>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>> issue, > >>>>>>>>>>>>>>>>>>>>> I had quite some discussions with Kostas > >> and this > >>>>>>>> is > >>>>>>>>>> the > >>>>>>>>>>>>>> result: > >>>>>>>>>>>>>>>> [1]. > >>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>> I think overall we agree that this part > >> of the > >>>>>>>> code is > >>>>>>>>>> in > >>>>>>>>>>>> dire > >>>>>>>>>>>>>>> need > >>>>>>>>>>>>>>>>> of > >>>>>>>>>>>>>>>>>>>>> some refactoring/improvements but I > >> think there are > >>>>>>>>>> still > >>>>>>>>>>>> some > >>>>>>>>>>>>>>> open > >>>>>>>>>>>>>>>>>>>>> questions and some differences in > >> opinion what > >>>>>>>> those > >>>>>>>>>>>>>> refactorings > >>>>>>>>>>>>>>>>>>> should > >>>>>>>>>>>>>>>>>>>>> look like. > >>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>> I think the API-side is quite clear, > >> i.e. we need > >>>>>>>> some > >>>>>>>>>>>>>> JobClient > >>>>>>>>>>>>>>>> API > >>>>>>>>>>>>>>>>>>> that > >>>>>>>>>>>>>>>>>>>>> allows interacting with a running Job. > >> It could be > >>>>>>>>>>>> worthwhile > >>>>>>>>>>>>>> to > >>>>>>>>>>>>>>>> spin > >>>>>>>>>>>>>>>>>>> that > >>>>>>>>>>>>>>>>>>>>> off into a separate FLIP because we can > >> probably > >>>>>>>> find > >>>>>>>>>>>> consensus > >>>>>>>>>>>>>>> on > >>>>>>>>>>>>>>>>> that > >>>>>>>>>>>>>>>>>>>>> part more easily. > >>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>> For the rest, the main open questions > >> from our doc > >>>>>>>> are > >>>>>>>>>>>> these: > >>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>> - Do we want to separate cluster > >> creation and job > >>>>>>>>>>>> submission > >>>>>>>>>>>>>>> for > >>>>>>>>>>>>>>>>>>>>> per-job mode? In the past, there were > >> conscious > >>>>>>>> efforts > >>>>>>>>>>> to > >>>>>>>>>>>>>> *not* > >>>>>>>>>>>>>>>>>>> separate > >>>>>>>>>>>>>>>>>>>>> job submission from cluster creation for > >> per-job > >>>>>>>>>> clusters > >>>>>>>>>>>> for > >>>>>>>>>>>>>>>> Mesos, > >>>>>>>>>>>>>>>>>>> YARN, > >>>>>>>>>>>>>>>>>>>>> Kubernets (see > >> StandaloneJobClusterEntryPoint). > >>>>>>>> Tison > >>>>>>>>>>>> suggests > >>>>>>>>>>>>>> in > >>>>>>>>>>>>>>>> his > >>>>>>>>>>>>>>>>>>>>> design document to decouple this in > >> order to unify > >>>>>>>> job > >>>>>>>>>>>>>>> submission. > >>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>> - How to deal with plan preview, which > >> needs to > >>>>>>>>>> hijack > >>>>>>>>>>>>>>> execute() > >>>>>>>>>>>>>>>>> and > >>>>>>>>>>>>>>>>>>>>> let the outside code catch an exception? > >>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>> - How to deal with Jar Submission at > >> the Web > >>>>>>>>>> Frontend, > >>>>>>>>>>>> which > >>>>>>>>>>>>>>>> needs > >>>>>>>>>>>>>>>>> to > >>>>>>>>>>>>>>>>>>>>> hijack execute() and let the outside > >> code catch an > >>>>>>>>>>>> exception? > >>>>>>>>>>>>>>>>>>>>> CliFrontend.run() “hijacks” > >>>>>>>>>>> ExecutionEnvironment.execute() > >>>>>>>>>>>> to > >>>>>>>>>>>>>>> get a > >>>>>>>>>>>>>>>>>>>>> JobGraph and then execute that JobGraph > >> manually. > >>>>>>>> We > >>>>>>>>>>> could > >>>>>>>>>>>> get > >>>>>>>>>>>>>>>> around > >>>>>>>>>>>>>>>>>>> that > >>>>>>>>>>>>>>>>>>>>> by letting execute() do the actual > >> execution. One > >>>>>>>>>> caveat > >>>>>>>>>>>> for > >>>>>>>>>>>>>> this > >>>>>>>>>>>>>>>> is > >>>>>>>>>>>>>>>>>>> that > >>>>>>>>>>>>>>>>>>>>> now the main() method doesn’t return (or > >> is forced > >>>>>>>> to > >>>>>>>>>>>> return by > >>>>>>>>>>>>>>>>>>> throwing an > >>>>>>>>>>>>>>>>>>>>> exception from execute()) which means > >> that for Jar > >>>>>>>>>>>> Submission > >>>>>>>>>>>>>>> from > >>>>>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>>>> WebFrontend we have a long-running > >> main() method > >>>>>>>>>> running > >>>>>>>>>>>> in the > >>>>>>>>>>>>>>>>>>>>> WebFrontend. This doesn’t sound very > >> good. We > >>>>>>>> could get > >>>>>>>>>>>> around > >>>>>>>>>>>>>>> this > >>>>>>>>>>>>>>>>> by > >>>>>>>>>>>>>>>>>>>>> removing the plan preview feature and by > >> removing > >>>>>>>> Jar > >>>>>>>>>>>>>>>>>>> Submission/Running. > >>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>> - How to deal with detached mode? > >> Right now, > >>>>>>>>>>>>>>> DetachedEnvironment > >>>>>>>>>>>>>>>>> will > >>>>>>>>>>>>>>>>>>>>> execute the job and return immediately. > >> If users > >>>>>>>>>> control > >>>>>>>>>>>> when > >>>>>>>>>>>>>>> they > >>>>>>>>>>>>>>>>>>> want to > >>>>>>>>>>>>>>>>>>>>> return, by waiting on the job completion > >> future, > >>>>>>>> how do > >>>>>>>>>>> we > >>>>>>>>>>>> deal > >>>>>>>>>>>>>>>> with > >>>>>>>>>>>>>>>>>>> this? > >>>>>>>>>>>>>>>>>>>>> Do we simply remove the distinction > >> between > >>>>>>>>>>>>>>> detached/non-detached? > >>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>> - How does per-job mode interact with > >>>>>>>> “interactive > >>>>>>>>>>>>>> programming” > >>>>>>>>>>>>>>>>>>>>> (FLIP-36). For YARN, each execute() call > >> could > >>>>>>>> spawn a > >>>>>>>>>>> new > >>>>>>>>>>>>>> Flink > >>>>>>>>>>>>>>>> YARN > >>>>>>>>>>>>>>>>>>>>> cluster. What about Mesos and Kubernetes? > >>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>> The first open question is where the > >> opinions > >>>>>>>> diverge, > >>>>>>>>>> I > >>>>>>>>>>>> think. > >>>>>>>>>>>>>>> The > >>>>>>>>>>>>>>>>>>> rest > >>>>>>>>>>>>>>>>>>>>> are just open questions and interesting > >> things > >>>>>>>> that we > >>>>>>>>>>>> need to > >>>>>>>>>>>>>>>>>>> consider. > >>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>> Best, > >>>>>>>>>>>>>>>>>>>>> Aljoscha > >>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>> [1] > >>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>> > >>>>>>>>>>>> > >>>>>>>>>>> > >>>>>>>>>> > >>>>>>>> > >> > https://docs.google.com/document/d/1E-8UjOLz4QPUTxetGWbU23OlsIH9VIdodpTsxwoQTs0/edit#heading=h.na7k0ad88tix > >>>>>>>>>>>>>>>>>>>>> < > >>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>> > >>>>>>>>>>>> > >>>>>>>>>>> > >>>>>>>>>> > >>>>>>>> > >> > https://docs.google.com/document/d/1E-8UjOLz4QPUTxetGWbU23OlsIH9VIdodpTsxwoQTs0/edit#heading=h.na7k0ad88tix > >>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>> On 31. Jul 2019, at 15:23, Jeff Zhang < > >>>>>>>>>>> zjf...@gmail.com> > >>>>>>>>>>>>>>> wrote: > >>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>> Thanks tison for the effort. I left a > >> few > >>>>>>>> comments. > >>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>> Zili Chen <wander4...@gmail.com> > >> 于2019年7月31日周三 > >>>>>>>>>>> 下午8:24写道: > >>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>> Hi Flavio, > >>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>> Thanks for your reply. > >>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>> Either current impl and in the design, > >>>>>>>> ClusterClient > >>>>>>>>>>>>>>>>>>>>>>> never takes responsibility for > >> generating > >>>>>>>> JobGraph. > >>>>>>>>>>>>>>>>>>>>>>> (what you see in current codebase is > >> several > >>>>>>>> class > >>>>>>>>>>>> methods) > >>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>> Instead, user describes his program > >> in the main > >>>>>>>>>> method > >>>>>>>>>>>>>>>>>>>>>>> with ExecutionEnvironment apis and > >> calls > >>>>>>>>>> env.compile() > >>>>>>>>>>>>>>>>>>>>>>> or env.optimize() to get FlinkPlan > >> and JobGraph > >>>>>>>>>>>>>> respectively. > >>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>> For listing main classes in a jar and > >> choose > >>>>>>>> one for > >>>>>>>>>>>>>>>>>>>>>>> submission, you're now able to > >> customize a CLI > >>>>>>>> to do > >>>>>>>>>>> it. > >>>>>>>>>>>>>>>>>>>>>>> Specifically, the path of jar is > >> passed as > >>>>>>>> arguments > >>>>>>>>>>> and > >>>>>>>>>>>>>>>>>>>>>>> in the customized CLI you list main > >> classes, > >>>>>>>> choose > >>>>>>>>>>> one > >>>>>>>>>>>>>>>>>>>>>>> to submit to the cluster. > >>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>> Best, > >>>>>>>>>>>>>>>>>>>>>>> tison. > >>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>> Flavio Pompermaier < > >> pomperma...@okkam.it> > >>>>>>>>>>> 于2019年7月31日周三 > >>>>>>>>>>>>>>>> 下午8:12写道: > >>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>> Just one note on my side: it is not > >> clear to me > >>>>>>>>>>>> whether the > >>>>>>>>>>>>>>>>> client > >>>>>>>>>>>>>>>>>>>>> needs > >>>>>>>>>>>>>>>>>>>>>>> to > >>>>>>>>>>>>>>>>>>>>>>>> be able to generate a job graph or > >> not. > >>>>>>>>>>>>>>>>>>>>>>>> In my opinion, the job jar must > >> resides only > >>>>>>>> on the > >>>>>>>>>>>>>>>>>>> server/jobManager > >>>>>>>>>>>>>>>>>>>>>>> side > >>>>>>>>>>>>>>>>>>>>>>>> and the client requires a way to get > >> the job > >>>>>>>> graph. > >>>>>>>>>>>>>>>>>>>>>>>> If you really want to access to the > >> job graph, > >>>>>>>> I'd > >>>>>>>>>>> add > >>>>>>>>>>>> a > >>>>>>>>>>>>>>>>> dedicated > >>>>>>>>>>>>>>>>>>>>> method > >>>>>>>>>>>>>>>>>>>>>>>> on the ClusterClient. like: > >>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>> - getJobGraph(jarId, mainClass): > >> JobGraph > >>>>>>>>>>>>>>>>>>>>>>>> - listMainClasses(jarId): > >> List<String> > >>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>> These would require some addition > >> also on the > >>>>>>>> job > >>>>>>>>>>>> manager > >>>>>>>>>>>>>>>>> endpoint > >>>>>>>>>>>>>>>>>>> as > >>>>>>>>>>>>>>>>>>>>>>>> well..what do you think? > >>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>> On Wed, Jul 31, 2019 at 12:42 PM > >> Zili Chen < > >>>>>>>>>>>>>>>> wander4...@gmail.com > >>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>> wrote: > >>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>> Hi all, > >>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>> Here is a document[1] on client api > >>>>>>>> enhancement > >>>>>>>>>> from > >>>>>>>>>>>> our > >>>>>>>>>>>>>>>>>>> perspective. > >>>>>>>>>>>>>>>>>>>>>>>>> We have investigated current > >> implementations. > >>>>>>>> And > >>>>>>>>>> we > >>>>>>>>>>>>>> propose > >>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>> 1. Unify the implementation of > >> cluster > >>>>>>>> deployment > >>>>>>>>>>> and > >>>>>>>>>>>> job > >>>>>>>>>>>>>>>>>>> submission > >>>>>>>>>>>>>>>>>>>>> in > >>>>>>>>>>>>>>>>>>>>>>>>> Flink. > >>>>>>>>>>>>>>>>>>>>>>>>> 2. Provide programmatic interfaces > >> to allow > >>>>>>>>>> flexible > >>>>>>>>>>>> job > >>>>>>>>>>>>>> and > >>>>>>>>>>>>>>>>>>> cluster > >>>>>>>>>>>>>>>>>>>>>>>>> management. > >>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>> The first proposal is aimed at > >> reducing code > >>>>>>>> paths > >>>>>>>>>>> of > >>>>>>>>>>>>>>> cluster > >>>>>>>>>>>>>>>>>>>>>>> deployment > >>>>>>>>>>>>>>>>>>>>>>>>> and > >>>>>>>>>>>>>>>>>>>>>>>>> job submission so that one can > >> adopt Flink in > >>>>>>>> his > >>>>>>>>>>>> usage > >>>>>>>>>>>>>>>> easily. > >>>>>>>>>>>>>>>>>>> The > >>>>>>>>>>>>>>>>>>>>>>>> second > >>>>>>>>>>>>>>>>>>>>>>>>> proposal is aimed at providing rich > >>>>>>>> interfaces for > >>>>>>>>>>>>>> advanced > >>>>>>>>>>>>>>>>> users > >>>>>>>>>>>>>>>>>>>>>>>>> who want to make accurate control > >> of these > >>>>>>>> stages. > >>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>> Quick reference on open questions: > >>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>> 1. Exclude job cluster deployment > >> from client > >>>>>>>> side > >>>>>>>>>>> or > >>>>>>>>>>>>>>> redefine > >>>>>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>>>>>>> semantic > >>>>>>>>>>>>>>>>>>>>>>>>> of job cluster? Since it fits in a > >> process > >>>>>>>> quite > >>>>>>>>>>>> different > >>>>>>>>>>>>>>>> from > >>>>>>>>>>>>>>>>>>>>> session > >>>>>>>>>>>>>>>>>>>>>>>>> cluster deployment and job > >> submission. > >>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>> 2. Maintain the codepaths handling > >> class > >>>>>>>>>>>>>>>>> o.a.f.api.common.Program > >>>>>>>>>>>>>>>>>>> or > >>>>>>>>>>>>>>>>>>>>>>>>> implement customized program > >> handling logic by > >>>>>>>>>>>> customized > >>>>>>>>>>>>>>>>>>>>> CliFrontend? > >>>>>>>>>>>>>>>>>>>>>>>>> See also this thread[2] and the > >> document[1]. > >>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>> 3. Expose ClusterClient as public > >> api or just > >>>>>>>>>> expose > >>>>>>>>>>>> api > >>>>>>>>>>>>>> in > >>>>>>>>>>>>>>>>>>>>>>>>> ExecutionEnvironment > >>>>>>>>>>>>>>>>>>>>>>>>> and delegate them to ClusterClient? > >> Further, > >>>>>>>> in > >>>>>>>>>>>> either way > >>>>>>>>>>>>>>> is > >>>>>>>>>>>>>>>> it > >>>>>>>>>>>>>>>>>>>>> worth > >>>>>>>>>>>>>>>>>>>>>>> to > >>>>>>>>>>>>>>>>>>>>>>>>> introduce a JobClient which is an > >>>>>>>> encapsulation of > >>>>>>>>>>>>>>>> ClusterClient > >>>>>>>>>>>>>>>>>>> that > >>>>>>>>>>>>>>>>>>>>>>>>> associated to specific job? > >>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>> Best, > >>>>>>>>>>>>>>>>>>>>>>>>> tison. > >>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>> [1] > >>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>> > >>>>>>>>>>>> > >>>>>>>>>>> > >>>>>>>>>> > >>>>>>>> > >> > https://docs.google.com/document/d/1UWJE7eYWiMuZewBKS0YmdVO2LUTqXPd6-pbOCof9ddY/edit?usp=sharing > >>>>>>>>>>>>>>>>>>>>>>>>> [2] > >>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>> > >>>>>>>>>>>> > >>>>>>>>>>> > >>>>>>>>>> > >>>>>>>> > >> > https://lists.apache.org/thread.html/7ffc9936a384b891dbcf0a481d26c6d13b2125607c200577780d1e18@%3Cdev.flink.apache.org%3E > >>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>> Jeff Zhang <zjf...@gmail.com> > >> 于2019年7月24日周三 > >>>>>>>>>>> 上午9:19写道: > >>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>> Thanks Stephan, I will follow up > >> this issue > >>>>>>>> in > >>>>>>>>>> next > >>>>>>>>>>>> few > >>>>>>>>>>>>>>>> weeks, > >>>>>>>>>>>>>>>>>>> and > >>>>>>>>>>>>>>>>>>>>>>> will > >>>>>>>>>>>>>>>>>>>>>>>>>> refine the design doc. We could > >> discuss more > >>>>>>>>>>> details > >>>>>>>>>>>>>> after > >>>>>>>>>>>>>>>> 1.9 > >>>>>>>>>>>>>>>>>>>>>>> release. > >>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>> Stephan Ewen <se...@apache.org> > >>>>>>>> 于2019年7月24日周三 > >>>>>>>>>>>> 上午12:58写道: > >>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>> Hi all! > >>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>> This thread has stalled for a > >> bit, which I > >>>>>>>>>> assume > >>>>>>>>>>>> ist > >>>>>>>>>>>>>>> mostly > >>>>>>>>>>>>>>>>>>> due to > >>>>>>>>>>>>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>>>>>>>>>> Flink 1.9 feature freeze and > >> release testing > >>>>>>>>>>> effort. > >>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>> I personally still recognize this > >> issue as > >>>>>>>> one > >>>>>>>>>>>> important > >>>>>>>>>>>>>>> to > >>>>>>>>>>>>>>>> be > >>>>>>>>>>>>>>>>>>>>>>>> solved. > >>>>>>>>>>>>>>>>>>>>>>>>>> I'd > >>>>>>>>>>>>>>>>>>>>>>>>>>> be happy to help resume this > >> discussion soon > >>>>>>>>>>> (after > >>>>>>>>>>>> the > >>>>>>>>>>>>>>> 1.9 > >>>>>>>>>>>>>>>>>>>>>>> release) > >>>>>>>>>>>>>>>>>>>>>>>>> and > >>>>>>>>>>>>>>>>>>>>>>>>>>> see if we can do some step > >> towards this in > >>>>>>>> Flink > >>>>>>>>>>>> 1.10. > >>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>> Best, > >>>>>>>>>>>>>>>>>>>>>>>>>>> Stephan > >>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>> On Mon, Jun 24, 2019 at 10:41 AM > >> Flavio > >>>>>>>>>>> Pompermaier > >>>>>>>>>>>> < > >>>>>>>>>>>>>>>>>>>>>>>>>> pomperma...@okkam.it> > >>>>>>>>>>>>>>>>>>>>>>>>>>> wrote: > >>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>> That's exactly what I suggested > >> a long time > >>>>>>>>>> ago: > >>>>>>>>>>>> the > >>>>>>>>>>>>>>> Flink > >>>>>>>>>>>>>>>>> REST > >>>>>>>>>>>>>>>>>>>>>>>>> client > >>>>>>>>>>>>>>>>>>>>>>>>>>>> should not require any Flink > >> dependency, > >>>>>>>> only > >>>>>>>>>>> http > >>>>>>>>>>>>>>> library > >>>>>>>>>>>>>>>> to > >>>>>>>>>>>>>>>>>>>>>>> call > >>>>>>>>>>>>>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>>>>>>>>>> REST > >>>>>>>>>>>>>>>>>>>>>>>>>>>> services to submit and monitor a > >> job. > >>>>>>>>>>>>>>>>>>>>>>>>>>>> What I suggested also in [1] was > >> to have a > >>>>>>>> way > >>>>>>>>>> to > >>>>>>>>>>>>>>>>> automatically > >>>>>>>>>>>>>>>>>>>>>>>>> suggest > >>>>>>>>>>>>>>>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>>>>>>>>>>> user (via a UI) the available > >> main classes > >>>>>>>> and > >>>>>>>>>>>> their > >>>>>>>>>>>>>>>> required > >>>>>>>>>>>>>>>>>>>>>>>>>>>> parameters[2]. > >>>>>>>>>>>>>>>>>>>>>>>>>>>> Another problem we have with > >> Flink is that > >>>>>>>> the > >>>>>>>>>>> Rest > >>>>>>>>>>>>>>> client > >>>>>>>>>>>>>>>>> and > >>>>>>>>>>>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>>>>>>>> CLI > >>>>>>>>>>>>>>>>>>>>>>>>>>> one > >>>>>>>>>>>>>>>>>>>>>>>>>>>> behaves differently and we use > >> the CLI > >>>>>>>> client > >>>>>>>>>>> (via > >>>>>>>>>>>> ssh) > >>>>>>>>>>>>>>>>> because > >>>>>>>>>>>>>>>>>>>>>>> it > >>>>>>>>>>>>>>>>>>>>>>>>>> allows > >>>>>>>>>>>>>>>>>>>>>>>>>>>> to call some other method after > >>>>>>>> env.execute() > >>>>>>>>>> [3] > >>>>>>>>>>>> (we > >>>>>>>>>>>>>>> have > >>>>>>>>>>>>>>>> to > >>>>>>>>>>>>>>>>>>>>>>> call > >>>>>>>>>>>>>>>>>>>>>>>>>>> another > >>>>>>>>>>>>>>>>>>>>>>>>>>>> REST service to signal the end > >> of the job). > >>>>>>>>>>>>>>>>>>>>>>>>>>>> Int his regard, a dedicated > >> interface, > >>>>>>>> like the > >>>>>>>>>>>>>>> JobListener > >>>>>>>>>>>>>>>>>>>>>>>> suggested > >>>>>>>>>>>>>>>>>>>>>>>>>> in > >>>>>>>>>>>>>>>>>>>>>>>>>>>> the previous emails, would be > >> very helpful > >>>>>>>>>>> (IMHO). > >>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>> [1] > >>>>>>>>>>>> https://issues.apache.org/jira/browse/FLINK-10864 > >>>>>>>>>>>>>>>>>>>>>>>>>>>> [2] > >>>>>>>>>>>> https://issues.apache.org/jira/browse/FLINK-10862 > >>>>>>>>>>>>>>>>>>>>>>>>>>>> [3] > >>>>>>>>>>>> https://issues.apache.org/jira/browse/FLINK-10879 > >>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>> Best, > >>>>>>>>>>>>>>>>>>>>>>>>>>>> Flavio > >>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>> On Mon, Jun 24, 2019 at 9:54 AM > >> Jeff Zhang > >>>>>>>> < > >>>>>>>>>>>>>>>> zjf...@gmail.com > >>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>> wrote: > >>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> Hi, Tison, > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> Thanks for your comments. > >> Overall I agree > >>>>>>>> with > >>>>>>>>>>> you > >>>>>>>>>>>>>> that > >>>>>>>>>>>>>>> it > >>>>>>>>>>>>>>>>> is > >>>>>>>>>>>>>>>>>>>>>>>>>> difficult > >>>>>>>>>>>>>>>>>>>>>>>>>>>> for > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> down stream project to > >> integrate with > >>>>>>>> flink > >>>>>>>>>> and > >>>>>>>>>>> we > >>>>>>>>>>>>>> need > >>>>>>>>>>>>>>> to > >>>>>>>>>>>>>>>>>>>>>>>> refactor > >>>>>>>>>>>>>>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> current flink client api. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> And I agree that CliFrontend > >> should only > >>>>>>>>>> parsing > >>>>>>>>>>>>>> command > >>>>>>>>>>>>>>>>> line > >>>>>>>>>>>>>>>>>>>>>>>>>> arguments > >>>>>>>>>>>>>>>>>>>>>>>>>>>> and > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> then pass them to > >> ExecutionEnvironment. > >>>>>>>> It is > >>>>>>>>>>>>>>>>>>>>>>>>> ExecutionEnvironment's > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> responsibility to compile job, > >> create > >>>>>>>> cluster, > >>>>>>>>>>> and > >>>>>>>>>>>>>>> submit > >>>>>>>>>>>>>>>>> job. > >>>>>>>>>>>>>>>>>>>>>>>>>> Besides > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> that, Currently flink has many > >>>>>>>>>>>> ExecutionEnvironment > >>>>>>>>>>>>>>>>>>>>>>>>> implementations, > >>>>>>>>>>>>>>>>>>>>>>>>>>> and > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> flink will use the specific one > >> based on > >>>>>>>> the > >>>>>>>>>>>> context. > >>>>>>>>>>>>>>>> IMHO, > >>>>>>>>>>>>>>>>> it > >>>>>>>>>>>>>>>>>>>>>>> is > >>>>>>>>>>>>>>>>>>>>>>>>> not > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> necessary, ExecutionEnvironment > >> should be > >>>>>>>> able > >>>>>>>>>>> to > >>>>>>>>>>>> do > >>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>> right > >>>>>>>>>>>>>>>>>>>>>>>>> thing > >>>>>>>>>>>>>>>>>>>>>>>>>>>> based > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> on the FlinkConf it is > >> received. Too many > >>>>>>>>>>>>>>>>> ExecutionEnvironment > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> implementation is another > >> burden for > >>>>>>>>>> downstream > >>>>>>>>>>>>>> project > >>>>>>>>>>>>>>>>>>>>>>>>> integration. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> One thing I'd like to mention > >> is flink's > >>>>>>>> scala > >>>>>>>>>>>> shell > >>>>>>>>>>>>>> and > >>>>>>>>>>>>>>>> sql > >>>>>>>>>>>>>>>>>>>>>>>>> client, > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> although they are sub-modules > >> of flink, > >>>>>>>> they > >>>>>>>>>>>> could be > >>>>>>>>>>>>>>>>> treated > >>>>>>>>>>>>>>>>>>>>>>> as > >>>>>>>>>>>>>>>>>>>>>>>>>>>> downstream > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> project which use flink's > >> client api. > >>>>>>>>>> Currently > >>>>>>>>>>>> you > >>>>>>>>>>>>>> will > >>>>>>>>>>>>>>>>> find > >>>>>>>>>>>>>>>>>>>>>>> it > >>>>>>>>>>>>>>>>>>>>>>>> is > >>>>>>>>>>>>>>>>>>>>>>>>>> not > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> easy for them to integrate with > >> flink, > >>>>>>>> they > >>>>>>>>>>> share > >>>>>>>>>>>> many > >>>>>>>>>>>>>>>>>>>>>>> duplicated > >>>>>>>>>>>>>>>>>>>>>>>>>> code. > >>>>>>>>>>>>>>>>>>>>>>>>>>>> It > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> is another sign that we should > >> refactor > >>>>>>>> flink > >>>>>>>>>>>> client > >>>>>>>>>>>>>>> api. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> I believe it is a large and > >> hard change, > >>>>>>>> and I > >>>>>>>>>>> am > >>>>>>>>>>>>>> afraid > >>>>>>>>>>>>>>>> we > >>>>>>>>>>>>>>>>>>> can > >>>>>>>>>>>>>>>>>>>>>>>> not > >>>>>>>>>>>>>>>>>>>>>>>>>>> keep > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> compatibility since many of > >> changes are > >>>>>>>> user > >>>>>>>>>>>> facing. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> Zili Chen <wander4...@gmail.com > >>> > >>>>>>>>>> 于2019年6月24日周一 > >>>>>>>>>>>>>>> 下午2:53写道: > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Hi all, > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> After a closer look on our > >> client apis, > >>>>>>>> I can > >>>>>>>>>>> see > >>>>>>>>>>>>>> there > >>>>>>>>>>>>>>>> are > >>>>>>>>>>>>>>>>>>>>>>> two > >>>>>>>>>>>>>>>>>>>>>>>>>> major > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> issues to consistency and > >> integration, > >>>>>>>> namely > >>>>>>>>>>>>>> different > >>>>>>>>>>>>>>>>>>>>>>>>> deployment > >>>>>>>>>>>>>>>>>>>>>>>>>> of > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> job cluster which couples job > >> graph > >>>>>>>> creation > >>>>>>>>>>> and > >>>>>>>>>>>>>>> cluster > >>>>>>>>>>>>>>>>>>>>>>>>>> deployment, > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> and submission via CliFrontend > >> confusing > >>>>>>>>>>> control > >>>>>>>>>>>> flow > >>>>>>>>>>>>>>> of > >>>>>>>>>>>>>>>>> job > >>>>>>>>>>>>>>>>>>>>>>>>> graph > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> compilation and job > >> submission. I'd like > >>>>>>>> to > >>>>>>>>>>>> follow > >>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>>>>>> discuss > >>>>>>>>>>>>>>>>>>>>>>>>>> above, > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> mainly the process described > >> by Jeff and > >>>>>>>>>>>> Stephan, and > >>>>>>>>>>>>>>>> share > >>>>>>>>>>>>>>>>>>>>>>> my > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ideas on these issues. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 1) CliFrontend confuses the > >> control flow > >>>>>>>> of > >>>>>>>>>> job > >>>>>>>>>>>>>>>> compilation > >>>>>>>>>>>>>>>>>>>>>>> and > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> submission. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Following the process of job > >> submission > >>>>>>>>>> Stephan > >>>>>>>>>>>> and > >>>>>>>>>>>>>>> Jeff > >>>>>>>>>>>>>>>>>>>>>>>>> described, > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> execution environment knows > >> all configs > >>>>>>>> of > >>>>>>>>>> the > >>>>>>>>>>>>>> cluster > >>>>>>>>>>>>>>>> and > >>>>>>>>>>>>>>>>>>>>>>>>>>>> topos/settings > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> of the job. Ideally, in the > >> main method > >>>>>>>> of > >>>>>>>>>> user > >>>>>>>>>>>>>>> program, > >>>>>>>>>>>>>>>> it > >>>>>>>>>>>>>>>>>>>>>>>> calls > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> #execute > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> (or named #submit) and Flink > >> deploys the > >>>>>>>>>>> cluster, > >>>>>>>>>>>>>>> compile > >>>>>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>>>>>>> job > >>>>>>>>>>>>>>>>>>>>>>>>>>> graph > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> and submit it to the cluster. > >> However, > >>>>>>>>>> current > >>>>>>>>>>>>>>>> CliFrontend > >>>>>>>>>>>>>>>>>>>>>>> does > >>>>>>>>>>>>>>>>>>>>>>>>> all > >>>>>>>>>>>>>>>>>>>>>>>>>>>> these > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> things inside its #runProgram > >> method, > >>>>>>>> which > >>>>>>>>>>>>>> introduces > >>>>>>>>>>>>>>> a > >>>>>>>>>>>>>>>>> lot > >>>>>>>>>>>>>>>>>>>>>>> of > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> subclasses > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> of (stream) execution > >> environment. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Actually, it sets up an exec > >> env that > >>>>>>>> hijacks > >>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>>>>>>>>>> #execute/executePlan > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> method, initializes the job > >> graph and > >>>>>>>> abort > >>>>>>>>>>>>>> execution. > >>>>>>>>>>>>>>>> And > >>>>>>>>>>>>>>>>>>>>>>> then > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> control flow back to > >> CliFrontend, it > >>>>>>>> deploys > >>>>>>>>>>> the > >>>>>>>>>>>>>>>> cluster(or > >>>>>>>>>>>>>>>>>>>>>>>>>> retrieve > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> the client) and submits the > >> job graph. > >>>>>>>> This > >>>>>>>>>> is > >>>>>>>>>>>> quite > >>>>>>>>>>>>>> a > >>>>>>>>>>>>>>>>>>>>>>> specific > >>>>>>>>>>>>>>>>>>>>>>>>>>>> internal > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> process inside Flink and none > >> of > >>>>>>>> consistency > >>>>>>>>>> to > >>>>>>>>>>>>>>> anything. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 2) Deployment of job cluster > >> couples job > >>>>>>>>>> graph > >>>>>>>>>>>>>> creation > >>>>>>>>>>>>>>>> and > >>>>>>>>>>>>>>>>>>>>>>>>> cluster > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> deployment. Abstractly, from > >> user job to > >>>>>>>> a > >>>>>>>>>>>> concrete > >>>>>>>>>>>>>>>>>>>>>>> submission, > >>>>>>>>>>>>>>>>>>>>>>>>> it > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> requires > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> create JobGraph --\ > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> create ClusterClient --> > >> submit JobGraph > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> such a dependency. > >> ClusterClient was > >>>>>>>> created > >>>>>>>>>> by > >>>>>>>>>>>>>>> deploying > >>>>>>>>>>>>>>>>> or > >>>>>>>>>>>>>>>>>>>>>>>>>>>> retrieving. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> JobGraph submission requires a > >> compiled > >>>>>>>>>>> JobGraph > >>>>>>>>>>>> and > >>>>>>>>>>>>>>>> valid > >>>>>>>>>>>>>>>>>>>>>>>>>>>> ClusterClient, > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> but the creation of > >> ClusterClient is > >>>>>>>>>> abstractly > >>>>>>>>>>>>>>>> independent > >>>>>>>>>>>>>>>>>>>>>>> of > >>>>>>>>>>>>>>>>>>>>>>>>> that > >>>>>>>>>>>>>>>>>>>>>>>>>>> of > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> JobGraph. However, in job > >> cluster mode, > >>>>>>>> we > >>>>>>>>>>>> deploy job > >>>>>>>>>>>>>>>>> cluster > >>>>>>>>>>>>>>>>>>>>>>>>> with > >>>>>>>>>>>>>>>>>>>>>>>>>> a > >>>>>>>>>>>>>>>>>>>>>>>>>>>> job > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> graph, which means we use > >> another > >>>>>>>> process: > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> create JobGraph --> deploy > >> cluster with > >>>>>>>> the > >>>>>>>>>>>> JobGraph > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Here is another inconsistency > >> and > >>>>>>>> downstream > >>>>>>>>>>>>>>>>> projects/client > >>>>>>>>>>>>>>>>>>>>>>>> apis > >>>>>>>>>>>>>>>>>>>>>>>>>> are > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> forced to handle different > >> cases with > >>>>>>>> rare > >>>>>>>>>>>> supports > >>>>>>>>>>>>>>> from > >>>>>>>>>>>>>>>>>>>>>>> Flink. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Since we likely reached a > >> consensus on > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 1. all configs gathered by > >> Flink > >>>>>>>>>> configuration > >>>>>>>>>>>> and > >>>>>>>>>>>>>>> passed > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 2. execution environment knows > >> all > >>>>>>>> configs > >>>>>>>>>> and > >>>>>>>>>>>>>> handles > >>>>>>>>>>>>>>>>>>>>>>>>>> execution(both > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> deployment and submission) > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> to the issues above I propose > >> eliminating > >>>>>>>>>>>>>>> inconsistencies > >>>>>>>>>>>>>>>>> by > >>>>>>>>>>>>>>>>>>>>>>>>>>> following > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> approach: > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 1) CliFrontend should exactly > >> be a front > >>>>>>>> end, > >>>>>>>>>>> at > >>>>>>>>>>>>>> least > >>>>>>>>>>>>>>>> for > >>>>>>>>>>>>>>>>>>>>>>>> "run" > >>>>>>>>>>>>>>>>>>>>>>>>>>>> command. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> That means it just gathered > >> and passed > >>>>>>>> all > >>>>>>>>>>> config > >>>>>>>>>>>>>> from > >>>>>>>>>>>>>>>>>>>>>>> command > >>>>>>>>>>>>>>>>>>>>>>>>> line > >>>>>>>>>>>>>>>>>>>>>>>>>>> to > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> the main method of user > >> program. > >>>>>>>> Execution > >>>>>>>>>>>>>> environment > >>>>>>>>>>>>>>>>> knows > >>>>>>>>>>>>>>>>>>>>>>>> all > >>>>>>>>>>>>>>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>>>>>>>>>>> info > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> and with an addition to utils > >> for > >>>>>>>>>>> ClusterClient, > >>>>>>>>>>>> we > >>>>>>>>>>>>>>>>>>>>>>> gracefully > >>>>>>>>>>>>>>>>>>>>>>>>> get > >>>>>>>>>>>>>>>>>>>>>>>>>> a > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ClusterClient by deploying or > >>>>>>>> retrieving. In > >>>>>>>>>>> this > >>>>>>>>>>>>>> way, > >>>>>>>>>>>>>>> we > >>>>>>>>>>>>>>>>>>>>>>> don't > >>>>>>>>>>>>>>>>>>>>>>>>>> need > >>>>>>>>>>>>>>>>>>>>>>>>>>> to > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> hijack #execute/executePlan > >> methods and > >>>>>>>> can > >>>>>>>>>>>> remove > >>>>>>>>>>>>>>>> various > >>>>>>>>>>>>>>>>>>>>>>>>> hacking > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> subclasses of exec env, as > >> well as #run > >>>>>>>>>> methods > >>>>>>>>>>>> in > >>>>>>>>>>>>>>>>>>>>>>>>>> ClusterClient(for > >>>>>>>>>>>>>>>>>>>>>>>>>>> an > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> interface-ized ClusterClient). > >> Now the > >>>>>>>>>> control > >>>>>>>>>>>> flow > >>>>>>>>>>>>>>> flows > >>>>>>>>>>>>>>>>>>>>>>> from > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> CliFrontend > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> to the main method and never > >> returns. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 2) Job cluster means a cluster > >> for the > >>>>>>>>>> specific > >>>>>>>>>>>> job. > >>>>>>>>>>>>>>> From > >>>>>>>>>>>>>>>>>>>>>>>> another > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> perspective, it is an > >> ephemeral session. > >>>>>>>> We > >>>>>>>>>> may > >>>>>>>>>>>>>>> decouple > >>>>>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>>>>>>>>>> deployment > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> with a compiled job graph, but > >> start a > >>>>>>>>>> session > >>>>>>>>>>>> with > >>>>>>>>>>>>>>> idle > >>>>>>>>>>>>>>>>>>>>>>>> timeout > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> and submit the job following. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> These topics, before we go > >> into more > >>>>>>>> details > >>>>>>>>>> on > >>>>>>>>>>>>>> design > >>>>>>>>>>>>>>> or > >>>>>>>>>>>>>>>>>>>>>>>>>>>> implementation, > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> are better to be aware and > >> discussed for > >>>>>>>> a > >>>>>>>>>>>> consensus. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Best, > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> tison. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Zili Chen < > >> wander4...@gmail.com> > >>>>>>>>>> 于2019年6月20日周四 > >>>>>>>>>>>>>>> 上午3:21写道: > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Hi Jeff, > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Thanks for raising this > >> thread and the > >>>>>>>>>> design > >>>>>>>>>>>>>>> document! > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> As @Thomas Weise mentioned > >> above, > >>>>>>>> extending > >>>>>>>>>>>> config > >>>>>>>>>>>>>> to > >>>>>>>>>>>>>>>>> flink > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> requires far more effort than > >> it should > >>>>>>>> be. > >>>>>>>>>>>> Another > >>>>>>>>>>>>>>>>> example > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> is we achieve detach mode by > >> introduce > >>>>>>>>>> another > >>>>>>>>>>>>>>> execution > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> environment which also hijack > >> #execute > >>>>>>>>>> method. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> I agree with your idea that > >> user would > >>>>>>>>>>>> configure all > >>>>>>>>>>>>>>>>> things > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> and flink "just" respect it. > >> On this > >>>>>>>> topic I > >>>>>>>>>>>> think > >>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>>>>>> unusual > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> control flow when CliFrontend > >> handle > >>>>>>>> "run" > >>>>>>>>>>>> command > >>>>>>>>>>>>>> is > >>>>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>>>>>>>> problem. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> It handles several configs, > >> mainly about > >>>>>>>>>>> cluster > >>>>>>>>>>>>>>>> settings, > >>>>>>>>>>>>>>>>>>>>>>> and > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> thus main method of user > >> program is > >>>>>>>> unaware > >>>>>>>>>> of > >>>>>>>>>>>> them. > >>>>>>>>>>>>>>>> Also > >>>>>>>>>>>>>>>>> it > >>>>>>>>>>>>>>>>>>>>>>>>>>> compiles > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> app to job graph by run the > >> main method > >>>>>>>>>> with a > >>>>>>>>>>>>>>> hijacked > >>>>>>>>>>>>>>>>> exec > >>>>>>>>>>>>>>>>>>>>>>>>> env, > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> which constrain the main > >> method further. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> I'd like to write down a few > >> of notes on > >>>>>>>>>>>>>> configs/args > >>>>>>>>>>>>>>>> pass > >>>>>>>>>>>>>>>>>>>>>>> and > >>>>>>>>>>>>>>>>>>>>>>>>>>>> respect, > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> as well as decoupling job > >> compilation > >>>>>>>> and > >>>>>>>>>>>>>> submission. > >>>>>>>>>>>>>>>>> Share > >>>>>>>>>>>>>>>>>>>>>>> on > >>>>>>>>>>>>>>>>>>>>>>>>>> this > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> thread later. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Best, > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> tison. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> SHI Xiaogang < > >> shixiaoga...@gmail.com> > >>>>>>>>>>>> 于2019年6月17日周一 > >>>>>>>>>>>>>>>>>>>>>>> 下午7:29写道: > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Hi Jeff and Flavio, > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Thanks Jeff a lot for > >> proposing the > >>>>>>>> design > >>>>>>>>>>>>>> document. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> We are also working on > >> refactoring > >>>>>>>>>>>> ClusterClient to > >>>>>>>>>>>>>>>> allow > >>>>>>>>>>>>>>>>>>>>>>>>>> flexible > >>>>>>>>>>>>>>>>>>>>>>>>>>>> and > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> efficient job management in > >> our > >>>>>>>> real-time > >>>>>>>>>>>> platform. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> We would like to draft a > >> document to > >>>>>>>> share > >>>>>>>>>>> our > >>>>>>>>>>>>>> ideas > >>>>>>>>>>>>>>>> with > >>>>>>>>>>>>>>>>>>>>>>>> you. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> I think it's a good idea to > >> have > >>>>>>>> something > >>>>>>>>>>> like > >>>>>>>>>>>>>>> Apache > >>>>>>>>>>>>>>>>> Livy > >>>>>>>>>>>>>>>>>>>>>>>> for > >>>>>>>>>>>>>>>>>>>>>>>>>>>> Flink, > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> and > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> the efforts discussed here > >> will take a > >>>>>>>>>> great > >>>>>>>>>>>> step > >>>>>>>>>>>>>>>> forward > >>>>>>>>>>>>>>>>>>>>>>> to > >>>>>>>>>>>>>>>>>>>>>>>>> it. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Regards, > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Xiaogang > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Flavio Pompermaier < > >>>>>>>> pomperma...@okkam.it> > >>>>>>>>>>>>>>>> 于2019年6月17日周一 > >>>>>>>>>>>>>>>>>>>>>>>>>> 下午7:13写道: > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Is there any possibility to > >> have > >>>>>>>> something > >>>>>>>>>>>> like > >>>>>>>>>>>>>>> Apache > >>>>>>>>>>>>>>>>>>>>>>> Livy > >>>>>>>>>>>>>>>>>>>>>>>>> [1] > >>>>>>>>>>>>>>>>>>>>>>>>>>>> also > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> for > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Flink in the future? > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> [1] > >> https://livy.apache.org/ > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> On Tue, Jun 11, 2019 at > >> 5:23 PM Jeff > >>>>>>>>>> Zhang < > >>>>>>>>>>>>>>>>>>>>>>>> zjf...@gmail.com > >>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>> wrote: > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Any API we expose > >> should not have > >>>>>>>>>>>> dependencies > >>>>>>>>>>>>>>> on > >>>>>>>>>>>>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>>>>>>>>>>> runtime > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> (flink-runtime) package or > >> other > >>>>>>>>>>>> implementation > >>>>>>>>>>>>>>>>>>>>>>> details. > >>>>>>>>>>>>>>>>>>>>>>>> To > >>>>>>>>>>>>>>>>>>>>>>>>>> me, > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> this > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> means > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> that the current > >> ClusterClient > >>>>>>>> cannot be > >>>>>>>>>>>> exposed > >>>>>>>>>>>>>> to > >>>>>>>>>>>>>>>>>>>>>>> users > >>>>>>>>>>>>>>>>>>>>>>>>>>> because > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> it > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> uses > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> quite some classes from the > >>>>>>>> optimiser and > >>>>>>>>>>>> runtime > >>>>>>>>>>>>>>>>>>>>>>>> packages. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> We should change > >> ClusterClient from > >>>>>>>> class > >>>>>>>>>>> to > >>>>>>>>>>>>>>>> interface. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ExecutionEnvironment only > >> use the > >>>>>>>>>> interface > >>>>>>>>>>>>>>>>>>>>>>> ClusterClient > >>>>>>>>>>>>>>>>>>>>>>>>>> which > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> should be > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> in flink-clients while the > >> concrete > >>>>>>>>>>>>>> implementation > >>>>>>>>>>>>>>>>>>>>>>> class > >>>>>>>>>>>>>>>>>>>>>>>>>> could > >>>>>>>>>>>>>>>>>>>>>>>>>>> be > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> in > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> flink-runtime. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> What happens when a > >>>>>>>> failure/restart in > >>>>>>>>>>> the > >>>>>>>>>>>>>>> client > >>>>>>>>>>>>>>>>>>>>>>>>>> happens? > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> There > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> need > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> to be a way of > >> re-establishing the > >>>>>>>>>>>> connection to > >>>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>>>>>> job, > >>>>>>>>>>>>>>>>>>>>>>>>> set > >>>>>>>>>>>>>>>>>>>>>>>>>>> up > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> listeners again, etc. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Good point. First we need > >> to define > >>>>>>>> what > >>>>>>>>>>>> does > >>>>>>>>>>>>>>>>>>>>>>>>>> failure/restart > >>>>>>>>>>>>>>>>>>>>>>>>>>> in > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> client mean. IIUC, that > >> usually mean > >>>>>>>>>>> network > >>>>>>>>>>>>>>> failure > >>>>>>>>>>>>>>>>>>>>>>>> which > >>>>>>>>>>>>>>>>>>>>>>>>>> will > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> happen in > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> class RestClient. If my > >>>>>>>> understanding is > >>>>>>>>>>>> correct, > >>>>>>>>>>>>>>>>>>>>>>>>>> restart/retry > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> mechanism > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> should be done in > >> RestClient. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Aljoscha Krettek < > >>>>>>>> aljos...@apache.org> > >>>>>>>>>>>>>>> 于2019年6月11日周二 > >>>>>>>>>>>>>>>>>>>>>>>>>>> 下午11:10写道: > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Some points to consider: > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> * Any API we expose > >> should not have > >>>>>>>>>>>> dependencies > >>>>>>>>>>>>>>> on > >>>>>>>>>>>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>>>>>>>>>> runtime > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> (flink-runtime) package > >> or other > >>>>>>>>>>>> implementation > >>>>>>>>>>>>>>>>>>>>>>>> details. > >>>>>>>>>>>>>>>>>>>>>>>>> To > >>>>>>>>>>>>>>>>>>>>>>>>>>> me, > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> this > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> means > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> that the current > >> ClusterClient > >>>>>>>> cannot be > >>>>>>>>>>>> exposed > >>>>>>>>>>>>>>> to > >>>>>>>>>>>>>>>>>>>>>>>> users > >>>>>>>>>>>>>>>>>>>>>>>>>>>> because > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> it > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> uses > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> quite some classes from > >> the > >>>>>>>> optimiser > >>>>>>>>>> and > >>>>>>>>>>>>>> runtime > >>>>>>>>>>>>>>>>>>>>>>>>> packages. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> * What happens when a > >>>>>>>> failure/restart in > >>>>>>>>>>> the > >>>>>>>>>>>>>>> client > >>>>>>>>>>>>>>>>>>>>>>>>>> happens? > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> There > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> need > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> to > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> be a way of > >> re-establishing the > >>>>>>>>>> connection > >>>>>>>>>>>> to > >>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>>>>>> job, > >>>>>>>>>>>>>>>>>>>>>>>>> set > >>>>>>>>>>>>>>>>>>>>>>>>>> up > >>>>>>>>>>>>>>>>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> listeners > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> again, etc. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Aljoscha > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> On 29. May 2019, at > >> 10:17, Jeff > >>>>>>>> Zhang < > >>>>>>>>>>>>>>>>>>>>>>>>> zjf...@gmail.com> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> wrote: > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Sorry folks, the design > >> doc is > >>>>>>>> late as > >>>>>>>>>>> you > >>>>>>>>>>>>>>>>>>>>>>> expected. > >>>>>>>>>>>>>>>>>>>>>>>>>> Here's > >>>>>>>>>>>>>>>>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> design > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> doc > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> I drafted, welcome any > >> comments and > >>>>>>>>>>>> feedback. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>> > >>>>>>>>>>>> > >>>>>>>>>>> > >>>>>>>>>> > >>>>>>>> > >> > https://docs.google.com/document/d/1VavBrYn8vJeZs-Mhu5VzKO6xrWCF40aY0nlQ_UVVTRg/edit?usp=sharing > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Stephan Ewen < > >> se...@apache.org> > >>>>>>>>>>>> 于2019年2月14日周四 > >>>>>>>>>>>>>>>>>>>>>>>>> 下午8:43写道: > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Nice that this > >> discussion is > >>>>>>>>>> happening. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> In the FLIP, we could > >> also > >>>>>>>> revisit the > >>>>>>>>>>>> entire > >>>>>>>>>>>>>>> role > >>>>>>>>>>>>>>>>>>>>>>>> of > >>>>>>>>>>>>>>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> environments > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> again. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Initially, the idea was: > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - the environments take > >> care of > >>>>>>>> the > >>>>>>>>>>>> specific > >>>>>>>>>>>>>>>>>>>>>>> setup > >>>>>>>>>>>>>>>>>>>>>>>>> for > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> standalone > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> (no > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> setup needed), yarn, > >> mesos, etc. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - the session ones have > >> control > >>>>>>>> over > >>>>>>>>>> the > >>>>>>>>>>>>>>> session. > >>>>>>>>>>>>>>>>>>>>>>>> The > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> environment > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> holds > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> the session client. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - running a job gives a > >> "control" > >>>>>>>>>> object > >>>>>>>>>>>> for > >>>>>>>>>>>>>>> that > >>>>>>>>>>>>>>>>>>>>>>>>> job. > >>>>>>>>>>>>>>>>>>>>>>>>>>> That > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> behavior > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> is > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> the same in all > >> environments. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> The actual > >> implementation diverged > >>>>>>>>>> quite > >>>>>>>>>>>> a bit > >>>>>>>>>>>>>>>>>>>>>>> from > >>>>>>>>>>>>>>>>>>>>>>>>>> that. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> Happy > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> to > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> see a > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> discussion about > >> straitening this > >>>>>>>> out > >>>>>>>>>> a > >>>>>>>>>>>> bit > >>>>>>>>>>>>>>> more. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> On Tue, Feb 12, 2019 at > >> 4:58 AM > >>>>>>>> Jeff > >>>>>>>>>>>> Zhang < > >>>>>>>>>>>>>>>>>>>>>>>>>>>> zjf...@gmail.com> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> wrote: > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Hi folks, > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Sorry for late > >> response, It > >>>>>>>> seems we > >>>>>>>>>>>> reach > >>>>>>>>>>>>>>>>>>>>>>>> consensus > >>>>>>>>>>>>>>>>>>>>>>>>> on > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> this, I > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> will > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> create > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> FLIP for this with > >> more detailed > >>>>>>>>>> design > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Thomas Weise < > >> t...@apache.org> > >>>>>>>>>>>> 于2018年12月21日周五 > >>>>>>>>>>>>>>>>>>>>>>>>>> 上午11:43写道: > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Great to see this > >> discussion > >>>>>>>> seeded! > >>>>>>>>>>> The > >>>>>>>>>>>>>>>>>>>>>>> problems > >>>>>>>>>>>>>>>>>>>>>>>>> you > >>>>>>>>>>>>>>>>>>>>>>>>>>> face > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> with > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Zeppelin integration > >> are also > >>>>>>>>>>> affecting > >>>>>>>>>>>>>> other > >>>>>>>>>>>>>>>>>>>>>>>>>> downstream > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> projects, > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> like > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Beam. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> We just enabled the > >> savepoint > >>>>>>>>>> restore > >>>>>>>>>>>> option > >>>>>>>>>>>>>>> in > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> RemoteStreamEnvironment > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> [1] > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> and that was more > >> difficult > >>>>>>>> than it > >>>>>>>>>>>> should > >>>>>>>>>>>>>> be. > >>>>>>>>>>>>>>>>>>>>>>> The > >>>>>>>>>>>>>>>>>>>>>>>>>> main > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> issue > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> is > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> that > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> environment and > >> cluster client > >>>>>>>>>> aren't > >>>>>>>>>>>>>>> decoupled. > >>>>>>>>>>>>>>>>>>>>>>>>>> Ideally > >>>>>>>>>>>>>>>>>>>>>>>>>>>> it > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> should > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> be > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> possible to just get > >> the > >>>>>>>> matching > >>>>>>>>>>>> cluster > >>>>>>>>>>>>>>> client > >>>>>>>>>>>>>>>>>>>>>>>>> from > >>>>>>>>>>>>>>>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> environment > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> and > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> then control the job > >> through it > >>>>>>>>>>>> (environment > >>>>>>>>>>>>>>> as > >>>>>>>>>>>>>>>>>>>>>>>>>> factory > >>>>>>>>>>>>>>>>>>>>>>>>>>>> for > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> cluster > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> client). But note > >> that the > >>>>>>>>>> environment > >>>>>>>>>>>>>> classes > >>>>>>>>>>>>>>>>>>>>>>> are > >>>>>>>>>>>>>>>>>>>>>>>>>> part > >>>>>>>>>>>>>>>>>>>>>>>>>>> of > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> public > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> API, > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> and it is not > >> straightforward to > >>>>>>>>>> make > >>>>>>>>>>>> larger > >>>>>>>>>>>>>>>>>>>>>>>> changes > >>>>>>>>>>>>>>>>>>>>>>>>>>>> without > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> breaking > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> backward > >> compatibility. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ClusterClient > >> currently exposes > >>>>>>>>>>> internal > >>>>>>>>>>>>>>> classes > >>>>>>>>>>>>>>>>>>>>>>>>> like > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> JobGraph and > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> StreamGraph. But it > >> should be > >>>>>>>>>> possible > >>>>>>>>>>>> to > >>>>>>>>>>>>>> wrap > >>>>>>>>>>>>>>>>>>>>>>>> this > >>>>>>>>>>>>>>>>>>>>>>>>>>> with a > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> new > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> public > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> API > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> that brings the > >> required job > >>>>>>>> control > >>>>>>>>>>>>>>>>>>>>>>> capabilities > >>>>>>>>>>>>>>>>>>>>>>>>> for > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> downstream > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> projects. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Perhaps it is helpful > >> to look at > >>>>>>>>>> some > >>>>>>>>>>>> of the > >>>>>>>>>>>>>>>>>>>>>>>>>> interfaces > >>>>>>>>>>>>>>>>>>>>>>>>>>> in > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Beam > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> while > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> thinking about this: > >> [2] for the > >>>>>>>>>>>> portable > >>>>>>>>>>>>>> job > >>>>>>>>>>>>>>>>>>>>>>> API > >>>>>>>>>>>>>>>>>>>>>>>>> and > >>>>>>>>>>>>>>>>>>>>>>>>>>> [3] > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> for > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> old > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> asynchronous job > >> control from > >>>>>>>> the > >>>>>>>>>> Beam > >>>>>>>>>>>> Java > >>>>>>>>>>>>>>> SDK. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> The backward > >> compatibility > >>>>>>>>>> discussion > >>>>>>>>>>>> [4] is > >>>>>>>>>>>>>>>>>>>>>>> also > >>>>>>>>>>>>>>>>>>>>>>>>>>> relevant > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> here. A > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> new > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> API > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> should shield > >> downstream > >>>>>>>> projects > >>>>>>>>>> from > >>>>>>>>>>>>>>> internals > >>>>>>>>>>>>>>>>>>>>>>>> and > >>>>>>>>>>>>>>>>>>>>>>>>>>> allow > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> them to > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> interoperate with > >> multiple > >>>>>>>> future > >>>>>>>>>>> Flink > >>>>>>>>>>>>>>> versions > >>>>>>>>>>>>>>>>>>>>>>>> in > >>>>>>>>>>>>>>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>>>>>>>>>>> same > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> release > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> line > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> without forced > >> upgrades. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Thanks, > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Thomas > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> [1] > >>>>>>>>>>>>>> https://github.com/apache/flink/pull/7249 > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> [2] > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>> > >>>>>>>>>>>> > >>>>>>>>>>> > >>>>>>>>>> > >>>>>>>> > >> > https://github.com/apache/beam/blob/master/model/job-management/src/main/proto/beam_job_api.proto > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> [3] > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>> > >>>>>>>>>>>> > >>>>>>>>>>> > >>>>>>>>>> > >>>>>>>> > >> > https://github.com/apache/beam/blob/master/sdks/java/core/src/main/java/org/apache/beam/sdk/PipelineResult.java > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> [4] > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>> > >>>>>>>>>>>> > >>>>>>>>>>> > >>>>>>>>>> > >>>>>>>> > >> > https://lists.apache.org/thread.html/064c75c5d10f0806095b14f6d76942598917a14429c1acbddd151fe2@%3Cdev.flink.apache.org%3E > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> On Thu, Dec 20, 2018 > >> at 6:15 PM > >>>>>>>> Jeff > >>>>>>>>>>>> Zhang < > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> zjf...@gmail.com> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> wrote: > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> I'm not so sure > >> whether the > >>>>>>>> user > >>>>>>>>>>>> should > >>>>>>>>>>>>>> be > >>>>>>>>>>>>>>>>>>>>>>>> able > >>>>>>>>>>>>>>>>>>>>>>>>> to > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> define > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> where > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> job > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> runs (in your > >> example Yarn). > >>>>>>>> This > >>>>>>>>>> is > >>>>>>>>>>>>>> actually > >>>>>>>>>>>>>>>>>>>>>>>>>>> independent > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> of > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> job > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> development and is > >> something > >>>>>>>> which > >>>>>>>>>> is > >>>>>>>>>>>>>> decided > >>>>>>>>>>>>>>>>>>>>>>> at > >>>>>>>>>>>>>>>>>>>>>>>>>>>> deployment > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> time. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> User don't need to > >> specify > >>>>>>>>>> execution > >>>>>>>>>>>> mode > >>>>>>>>>>>>>>>>>>>>>>>>>>>> programmatically. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> They > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> can > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> also > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> pass the execution > >> mode from > >>>>>>>> the > >>>>>>>>>>>> arguments > >>>>>>>>>>>>>> in > >>>>>>>>>>>>>>>>>>>>>>>> flink > >>>>>>>>>>>>>>>>>>>>>>>>>> run > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> command. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> e.g. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> bin/flink run -m > >> yarn-cluster > >>>>>>>> .... > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> bin/flink run -m > >> local ... > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> bin/flink run -m > >> host:port ... > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Does this make sense > >> to you ? > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> To me it makes > >> sense that > >>>>>>>> the > >>>>>>>>>>>>>>>>>>>>>>>>> ExecutionEnvironment > >>>>>>>>>>>>>>>>>>>>>>>>>>> is > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> not > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> directly > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> initialized by the > >> user and > >>>>>>>> instead > >>>>>>>>>>>> context > >>>>>>>>>>>>>>>>>>>>>>>>> sensitive > >>>>>>>>>>>>>>>>>>>>>>>>>>> how > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> you > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> want > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> to > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> execute your job > >> (Flink CLI vs. > >>>>>>>>>> IDE, > >>>>>>>>>>>> for > >>>>>>>>>>>>>>>>>>>>>>>> example). > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Right, currently I > >> notice Flink > >>>>>>>>>> would > >>>>>>>>>>>>>> create > >>>>>>>>>>>>>>>>>>>>>>>>>> different > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >> ContextExecutionEnvironment > >>>>>>>> based > >>>>>>>>>> on > >>>>>>>>>>>>>>> different > >>>>>>>>>>>>>>>>>>>>>>>>>>> submission > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> scenarios > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> (Flink > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Cli vs IDE). To me > >> this is > >>>>>>>> kind of > >>>>>>>>>>> hack > >>>>>>>>>>>>>>>>>>>>>>> approach, > >>>>>>>>>>>>>>>>>>>>>>>>> not > >>>>>>>>>>>>>>>>>>>>>>>>>>> so > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> straightforward. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> What I suggested > >> above is that > >>>>>>>> is > >>>>>>>>>>> that > >>>>>>>>>>>>>> flink > >>>>>>>>>>>>>>>>>>>>>>>> should > >>>>>>>>>>>>>>>>>>>>>>>>>>>> always > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> create > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> same > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ExecutionEnvironment > >> but with > >>>>>>>>>>> different > >>>>>>>>>>>>>>>>>>>>>>>>>> configuration, > >>>>>>>>>>>>>>>>>>>>>>>>>>>> and > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> based > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> on > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> configuration it > >> would create > >>>>>>>> the > >>>>>>>>>>>> proper > >>>>>>>>>>>>>>>>>>>>>>>>>> ClusterClient > >>>>>>>>>>>>>>>>>>>>>>>>>>>> for > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> different > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> behaviors. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Till Rohrmann < > >>>>>>>>>> trohrm...@apache.org> > >>>>>>>>>>>>>>>>>>>>>>>>> 于2018年12月20日周四 > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 下午11:18写道: > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> You are probably > >> right that we > >>>>>>>>>> have > >>>>>>>>>>>> code > >>>>>>>>>>>>>>>>>>>>>>>>> duplication > >>>>>>>>>>>>>>>>>>>>>>>>>>>> when > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> it > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> comes > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> to > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> creation of the > >> ClusterClient. > >>>>>>>>>> This > >>>>>>>>>>>> should > >>>>>>>>>>>>>>> be > >>>>>>>>>>>>>>>>>>>>>>>>>> reduced > >>>>>>>>>>>>>>>>>>>>>>>>>>> in > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> future. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> I'm not so sure > >> whether the > >>>>>>>> user > >>>>>>>>>>>> should be > >>>>>>>>>>>>>>>>>>>>>>> able > >>>>>>>>>>>>>>>>>>>>>>>> to > >>>>>>>>>>>>>>>>>>>>>>>>>>>> define > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> where > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> job > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> runs (in your > >> example Yarn). > >>>>>>>> This > >>>>>>>>>> is > >>>>>>>>>>>>>>> actually > >>>>>>>>>>>>>>>>>>>>>>>>>>>> independent > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> of the > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> job > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> development and is > >> something > >>>>>>>> which > >>>>>>>>>>> is > >>>>>>>>>>>>>>> decided > >>>>>>>>>>>>>>>>>>>>>>> at > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> deployment > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> time. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> To > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> me > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> it > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> makes sense that the > >>>>>>>>>>>> ExecutionEnvironment > >>>>>>>>>>>>>> is > >>>>>>>>>>>>>>>>>>>>>>> not > >>>>>>>>>>>>>>>>>>>>>>>>>>>> directly > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> initialized > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> by > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> the user and > >> instead context > >>>>>>>>>>>> sensitive how > >>>>>>>>>>>>>>> you > >>>>>>>>>>>>>>>>>>>>>>>>> want > >>>>>>>>>>>>>>>>>>>>>>>>>> to > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> execute > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> your > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> job > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> (Flink CLI vs. IDE, > >> for > >>>>>>>> example). > >>>>>>>>>>>>>> However, I > >>>>>>>>>>>>>>>>>>>>>>>> agree > >>>>>>>>>>>>>>>>>>>>>>>>>>> that > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >> ExecutionEnvironment should > >>>>>>>> give > >>>>>>>>>> you > >>>>>>>>>>>>>> access > >>>>>>>>>>>>>>> to > >>>>>>>>>>>>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ClusterClient > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> and > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> to > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> job (maybe in the > >> form of the > >>>>>>>>>>>> JobGraph or > >>>>>>>>>>>>>> a > >>>>>>>>>>>>>>>>>>>>>>> job > >>>>>>>>>>>>>>>>>>>>>>>>>> plan). > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Cheers, > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Till > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> On Thu, Dec 13, > >> 2018 at 4:36 > >>>>>>>> AM > >>>>>>>>>> Jeff > >>>>>>>>>>>>>> Zhang < > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> zjf...@gmail.com> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> wrote: > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Hi Till, > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Thanks for the > >> feedback. You > >>>>>>>> are > >>>>>>>>>>>> right > >>>>>>>>>>>>>>> that I > >>>>>>>>>>>>>>>>>>>>>>>>>> expect > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> better > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> programmatic > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> job > >> submission/control api > >>>>>>>> which > >>>>>>>>>>>> could be > >>>>>>>>>>>>>>>>>>>>>>> used > >>>>>>>>>>>>>>>>>>>>>>>> by > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> downstream > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> project. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> And > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> it would benefit > >> for the > >>>>>>>> flink > >>>>>>>>>>>> ecosystem. > >>>>>>>>>>>>>>>>>>>>>>> When > >>>>>>>>>>>>>>>>>>>>>>>> I > >>>>>>>>>>>>>>>>>>>>>>>>>> look > >>>>>>>>>>>>>>>>>>>>>>>>>>>> at > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> code > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> of > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> flink > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> scala-shell and > >> sql-client (I > >>>>>>>>>>> believe > >>>>>>>>>>>>>> they > >>>>>>>>>>>>>>>>>>>>>>> are > >>>>>>>>>>>>>>>>>>>>>>>>> not > >>>>>>>>>>>>>>>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> core of > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> flink, > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> but > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> belong to the > >> ecosystem of > >>>>>>>>>> flink), > >>>>>>>>>>> I > >>>>>>>>>>>> find > >>>>>>>>>>>>>>>>>>>>>>> many > >>>>>>>>>>>>>>>>>>>>>>>>>>>> duplicated > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> code > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> for > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> creating > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ClusterClient from > >> user > >>>>>>>> provided > >>>>>>>>>>>>>>>>>>>>>>> configuration > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> (configuration > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> format > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> may > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> be > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> different from > >> scala-shell > >>>>>>>> and > >>>>>>>>>>>>>> sql-client) > >>>>>>>>>>>>>>>>>>>>>>> and > >>>>>>>>>>>>>>>>>>>>>>>>> then > >>>>>>>>>>>>>>>>>>>>>>>>>>> use > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> that > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ClusterClient > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> to manipulate > >> jobs. I don't > >>>>>>>> think > >>>>>>>>>>>> this is > >>>>>>>>>>>>>>>>>>>>>>>>>> convenient > >>>>>>>>>>>>>>>>>>>>>>>>>>>> for > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> downstream > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> projects. What I > >> expect is > >>>>>>>> that > >>>>>>>>>>>>>> downstream > >>>>>>>>>>>>>>>>>>>>>>>>> project > >>>>>>>>>>>>>>>>>>>>>>>>>>> only > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> needs > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> to > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> provide > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> necessary > >> configuration info > >>>>>>>>>> (maybe > >>>>>>>>>>>>>>>>>>>>>>> introducing > >>>>>>>>>>>>>>>>>>>>>>>>>> class > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> FlinkConf), > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> and > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> then > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> build > >> ExecutionEnvironment > >>>>>>>> based > >>>>>>>>>> on > >>>>>>>>>>>> this > >>>>>>>>>>>>>>>>>>>>>>>>> FlinkConf, > >>>>>>>>>>>>>>>>>>>>>>>>>>> and > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >> ExecutionEnvironment will > >>>>>>>> create > >>>>>>>>>>> the > >>>>>>>>>>>>>> proper > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> ClusterClient. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> It > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> not > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> only > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> benefit for the > >> downstream > >>>>>>>>>> project > >>>>>>>>>>>>>>>>>>>>>>> development > >>>>>>>>>>>>>>>>>>>>>>>>> but > >>>>>>>>>>>>>>>>>>>>>>>>>>> also > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> be > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> helpful > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> for > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> their integration > >> test with > >>>>>>>>>> flink. > >>>>>>>>>>>> Here's > >>>>>>>>>>>>>>> one > >>>>>>>>>>>>>>>>>>>>>>>>>> sample > >>>>>>>>>>>>>>>>>>>>>>>>>>>> code > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> snippet > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> that > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> I > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> expect. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> val conf = new > >>>>>>>>>>>> FlinkConf().mode("yarn") > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> val env = new > >>>>>>>>>>>> ExecutionEnvironment(conf) > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> val jobId = > >> env.submit(...) > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> val jobStatus = > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>> env.getClusterClient().queryJobStatus(jobId) > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>> env.getClusterClient().cancelJob(jobId) > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> What do you think ? > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Till Rohrmann < > >>>>>>>>>>> trohrm...@apache.org> > >>>>>>>>>>>>>>>>>>>>>>>>>> 于2018年12月11日周二 > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 下午6:28写道: > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Hi Jeff, > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> what you are > >> proposing is to > >>>>>>>>>>>> provide the > >>>>>>>>>>>>>>>>>>>>>>> user > >>>>>>>>>>>>>>>>>>>>>>>>> with > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> better > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> programmatic > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> job > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> control. There > >> was actually > >>>>>>>> an > >>>>>>>>>>>> effort to > >>>>>>>>>>>>>>>>>>>>>>>> achieve > >>>>>>>>>>>>>>>>>>>>>>>>>>> this > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> but > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> it > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> has > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> never > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> been > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> completed [1]. > >> However, > >>>>>>>> there > >>>>>>>>>> are > >>>>>>>>>>>> some > >>>>>>>>>>>>>>>>>>>>>>>>> improvement > >>>>>>>>>>>>>>>>>>>>>>>>>>> in > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> code > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> base > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> now. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Look for example > >> at the > >>>>>>>>>>>> NewClusterClient > >>>>>>>>>>>>>>>>>>>>>>>>> interface > >>>>>>>>>>>>>>>>>>>>>>>>>>>> which > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> offers a > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> non-blocking job > >> submission. > >>>>>>>>>> But I > >>>>>>>>>>>> agree > >>>>>>>>>>>>>>>>>>>>>>> that > >>>>>>>>>>>>>>>>>>>>>>>> we > >>>>>>>>>>>>>>>>>>>>>>>>>>> need > >>>>>>>>>>>>>>>>>>>>>>>>>>>> to > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> improve > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Flink > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> in > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> this regard. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> I would not be in > >> favour if > >>>>>>>>>>>> exposing all > >>>>>>>>>>>>>>>>>>>>>>>>>>> ClusterClient > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> calls > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> via > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >> ExecutionEnvironment > >>>>>>>> because it > >>>>>>>>>>>> would > >>>>>>>>>>>>>>>>>>>>>>> clutter > >>>>>>>>>>>>>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>>>>>>>>>>> class > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> and > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> would > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> not > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> be > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> a > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> good separation > >> of concerns. > >>>>>>>>>>>> Instead one > >>>>>>>>>>>>>>>>>>>>>>> idea > >>>>>>>>>>>>>>>>>>>>>>>>>> could > >>>>>>>>>>>>>>>>>>>>>>>>>>> be > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> to > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> retrieve > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> current > >> ClusterClient from > >>>>>>>> the > >>>>>>>>>>>>>>>>>>>>>>>>>> ExecutionEnvironment > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> which > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> can > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> then > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> be > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> used > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> for cluster and > >> job > >>>>>>>> control. But > >>>>>>>>>>>> before > >>>>>>>>>>>>>> we > >>>>>>>>>>>>>>>>>>>>>>>> start > >>>>>>>>>>>>>>>>>>>>>>>>>> an > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> effort > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> here, > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> we > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> need > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> to > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> agree and capture > >> what > >>>>>>>>>>>> functionality we > >>>>>>>>>>>>>>> want > >>>>>>>>>>>>>>>>>>>>>>>> to > >>>>>>>>>>>>>>>>>>>>>>>>>>>> provide. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Initially, the > >> idea was > >>>>>>>> that we > >>>>>>>>>>>> have the > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> ClusterDescriptor > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> describing > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> how > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> to talk to > >> cluster manager > >>>>>>>> like > >>>>>>>>>>>> Yarn or > >>>>>>>>>>>>>>>>>>>>>>> Mesos. > >>>>>>>>>>>>>>>>>>>>>>>>> The > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ClusterDescriptor > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> can > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> be > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> used for > >> deploying Flink > >>>>>>>>>> clusters > >>>>>>>>>>>> (job > >>>>>>>>>>>>>> and > >>>>>>>>>>>>>>>>>>>>>>>>>> session) > >>>>>>>>>>>>>>>>>>>>>>>>>>>> and > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> gives > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> you a > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ClusterClient. The > >>>>>>>> ClusterClient > >>>>>>>>>>>>>> controls > >>>>>>>>>>>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>>>>>>>>>> cluster > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> (e.g. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> submitting > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> jobs, listing all > >> running > >>>>>>>> jobs). > >>>>>>>>>>> And > >>>>>>>>>>>>>> then > >>>>>>>>>>>>>>>>>>>>>>>> there > >>>>>>>>>>>>>>>>>>>>>>>>>> was > >>>>>>>>>>>>>>>>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> idea > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> to > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> introduce a > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> JobClient which > >> you obtain > >>>>>>>> from > >>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>>>>>>>> ClusterClient > >>>>>>>>>>>>>>>>>>>>>>>>>> to > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> trigger > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> job > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> specific > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> operations (e.g. > >> taking a > >>>>>>>>>>> savepoint, > >>>>>>>>>>>>>>>>>>>>>>>> cancelling > >>>>>>>>>>>>>>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> job). > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> [1] > >>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>> https://issues.apache.org/jira/browse/FLINK-4272 > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Cheers, > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Till > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> On Tue, Dec 11, > >> 2018 at > >>>>>>>> 10:13 AM > >>>>>>>>>>>> Jeff > >>>>>>>>>>>>>>> Zhang > >>>>>>>>>>>>>>>>>>>>>>> < > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> zjf...@gmail.com > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> wrote: > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Hi Folks, > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> I am trying to > >> integrate > >>>>>>>> flink > >>>>>>>>>>> into > >>>>>>>>>>>>>>> apache > >>>>>>>>>>>>>>>>>>>>>>>>>> zeppelin > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> which is > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> an > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> interactive > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> notebook. And I > >> hit several > >>>>>>>>>>> issues > >>>>>>>>>>>> that > >>>>>>>>>>>>>>> is > >>>>>>>>>>>>>>>>>>>>>>>>> caused > >>>>>>>>>>>>>>>>>>>>>>>>>>> by > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> flink > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> client > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> api. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> So > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> I'd like to > >> proposal the > >>>>>>>>>>> following > >>>>>>>>>>>>>>> changes > >>>>>>>>>>>>>>>>>>>>>>>> for > >>>>>>>>>>>>>>>>>>>>>>>>>>> flink > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> client > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> api. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 1. Support > >> nonblocking > >>>>>>>>>> execution. > >>>>>>>>>>>>>>>>>>>>>>> Currently, > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >> ExecutionEnvironment#execute > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> is a blocking > >> method which > >>>>>>>>>> would > >>>>>>>>>>>> do 2 > >>>>>>>>>>>>>>>>>>>>>>> things, > >>>>>>>>>>>>>>>>>>>>>>>>>> first > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> submit > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> job > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> and > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> then > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> wait for job > >> until it is > >>>>>>>>>>> finished. > >>>>>>>>>>>> I'd > >>>>>>>>>>>>>>> like > >>>>>>>>>>>>>>>>>>>>>>>>>>>> introduce a > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> nonblocking > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> execution method > >> like > >>>>>>>>>>>>>>>>>>>>>>>>> ExecutionEnvironment#submit > >>>>>>>>>>>>>>>>>>>>>>>>>>>> which > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> only > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> submit > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> job > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> and > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> then return > >> jobId to > >>>>>>>> client. > >>>>>>>>>> And > >>>>>>>>>>>> allow > >>>>>>>>>>>>>>> user > >>>>>>>>>>>>>>>>>>>>>>>> to > >>>>>>>>>>>>>>>>>>>>>>>>>>> query > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> job > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> status > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> via > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> jobId. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 2. Add cancel > >> api in > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>> > >> ExecutionEnvironment/StreamExecutionEnvironment, > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> currently the > >> only way to > >>>>>>>>>> cancel > >>>>>>>>>>>> job is > >>>>>>>>>>>>>>> via > >>>>>>>>>>>>>>>>>>>>>>>> cli > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> (bin/flink), > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> this > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> is > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> not > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> convenient for > >> downstream > >>>>>>>>>> project > >>>>>>>>>>>> to > >>>>>>>>>>>>>> use > >>>>>>>>>>>>>>>>>>>>>>> this > >>>>>>>>>>>>>>>>>>>>>>>>>>>> feature. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> So I'd > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> like > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> to > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> add > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> cancel api in > >>>>>>>>>>> ExecutionEnvironment > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 3. Add savepoint > >> api in > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>> ExecutionEnvironment/StreamExecutionEnvironment. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> It > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> is similar as > >> cancel api, > >>>>>>>> we > >>>>>>>>>>>> should use > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ExecutionEnvironment > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> as > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> unified > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> api for third > >> party to > >>>>>>>>>> integrate > >>>>>>>>>>>> with > >>>>>>>>>>>>>>>>>>>>>>> flink. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 4. Add listener > >> for job > >>>>>>>>>> execution > >>>>>>>>>>>>>>>>>>>>>>> lifecycle. > >>>>>>>>>>>>>>>>>>>>>>>>>>>> Something > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> like > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> following, > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> so > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> that downstream > >> project > >>>>>>>> can do > >>>>>>>>>>>> custom > >>>>>>>>>>>>>>> logic > >>>>>>>>>>>>>>>>>>>>>>>> in > >>>>>>>>>>>>>>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> lifecycle > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> of > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> job. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> e.g. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Zeppelin would > >> capture the > >>>>>>>>>> jobId > >>>>>>>>>>>> after > >>>>>>>>>>>>>>> job > >>>>>>>>>>>>>>>>>>>>>>> is > >>>>>>>>>>>>>>>>>>>>>>>>>>>> submitted > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> and > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> then > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> use > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> this > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> jobId to cancel > >> it later > >>>>>>>> when > >>>>>>>>>>>>>> necessary. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> public interface > >>>>>>>> JobListener { > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> void > >> onJobSubmitted(JobID > >>>>>>>>>>> jobId); > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> void > >>>>>>>>>>>> onJobExecuted(JobExecutionResult > >>>>>>>>>>>>>>>>>>>>>>>>>> jobResult); > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> void > >> onJobCanceled(JobID > >>>>>>>>>> jobId); > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> } > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 5. Enable > >> session in > >>>>>>>>>>>>>>> ExecutionEnvironment. > >>>>>>>>>>>>>>>>>>>>>>>>>>> Currently > >>>>>>>>>>>>>>>>>>>>>>>>>>>> it > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> is > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> disabled, > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> but > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> session is very > >> convenient > >>>>>>>> for > >>>>>>>>>>>> third > >>>>>>>>>>>>>>> party > >>>>>>>>>>>>>>>>>>>>>>> to > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> submitting > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> jobs > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> continually. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> I hope flink can > >> enable it > >>>>>>>>>> again. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 6. Unify all > >> flink client > >>>>>>>> api > >>>>>>>>>>> into > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>> ExecutionEnvironment/StreamExecutionEnvironment. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> This is a long > >> term issue > >>>>>>>> which > >>>>>>>>>>>> needs > >>>>>>>>>>>>>>> more > >>>>>>>>>>>>>>>>>>>>>>>>>> careful > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> thinking > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> and > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> design. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Currently some > >> of features > >>>>>>>> of > >>>>>>>>>>>> flink is > >>>>>>>>>>>>>>>>>>>>>>>> exposed > >>>>>>>>>>>>>>>>>>>>>>>>> in > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>> ExecutionEnvironment/StreamExecutionEnvironment, > >>>>>>>>>>>>>>>>>>>>>>>>>>> but > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> some are > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> exposed > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> in > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> cli instead of > >> api, like > >>>>>>>> the > >>>>>>>>>>>> cancel and > >>>>>>>>>>>>>>>>>>>>>>>>>> savepoint I > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> mentioned > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> above. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> I > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> think the root > >> cause is > >>>>>>>> due to > >>>>>>>>>>> that > >>>>>>>>>>>>>> flink > >>>>>>>>>>>>>>>>>>>>>>>>> didn't > >>>>>>>>>>>>>>>>>>>>>>>>>>>> unify > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> interaction > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> with > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> flink. Here I > >> list 3 > >>>>>>>> scenarios > >>>>>>>>>> of > >>>>>>>>>>>> flink > >>>>>>>>>>>>>>>>>>>>>>>>> operation > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - Local job > >> execution. > >>>>>>>> Flink > >>>>>>>>>>> will > >>>>>>>>>>>>>>> create > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> LocalEnvironment > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> and > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> then > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> use > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> this > >> LocalEnvironment to > >>>>>>>>>> create > >>>>>>>>>>>>>>>>>>>>>>>> LocalExecutor > >>>>>>>>>>>>>>>>>>>>>>>>>> for > >>>>>>>>>>>>>>>>>>>>>>>>>>>> job > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> execution. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - Remote job > >> execution. > >>>>>>>> Flink > >>>>>>>>>>> will > >>>>>>>>>>>>>>> create > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> ClusterClient > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> first > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> and > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> then > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> create > >> ContextEnvironment > >>>>>>>>>> based > >>>>>>>>>>>> on the > >>>>>>>>>>>>>>>>>>>>>>>>>>>> ClusterClient > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> and > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> then > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> run > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> job. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - Job > >> cancelation. Flink > >>>>>>>> will > >>>>>>>>>>>> create > >>>>>>>>>>>>>>>>>>>>>>>>>>> ClusterClient > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> first > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> and > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> then > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> cancel > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> this job via > >> this > >>>>>>>>>> ClusterClient. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> As you can see > >> in the > >>>>>>>> above 3 > >>>>>>>>>>>>>> scenarios. > >>>>>>>>>>>>>>>>>>>>>>>> Flink > >>>>>>>>>>>>>>>>>>>>>>>>>>> didn't > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> use the > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> same > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> approach(code > >> path) to > >>>>>>>> interact > >>>>>>>>>>>> with > >>>>>>>>>>>>>>> flink > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> What I propose is > >>>>>>>> following: > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Create the proper > >>>>>>>>>>>>>>>>>>>>>>>>>>> LocalEnvironment/RemoteEnvironment > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> (based > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> on > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> user > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> configuration) > >> --> Use this > >>>>>>>>>>>> Environment > >>>>>>>>>>>>>>> to > >>>>>>>>>>>>>>>>>>>>>>>>> create > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> proper > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ClusterClient > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >> (LocalClusterClient or > >>>>>>>>>>>>>> RestClusterClient) > >>>>>>>>>>>>>>>>>>>>>>> to > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> interactive > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> with > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Flink ( > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> job > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> execution or > >> cancelation) > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> This way we can > >> unify the > >>>>>>>>>> process > >>>>>>>>>>>> of > >>>>>>>>>>>>>>> local > >>>>>>>>>>>>>>>>>>>>>>>>>>> execution > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> and > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> remote > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> execution. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> And it is much > >> easier for > >>>>>>>> third > >>>>>>>>>>>> party > >>>>>>>>>>>>>> to > >>>>>>>>>>>>>>>>>>>>>>>>>> integrate > >>>>>>>>>>>>>>>>>>>>>>>>>>>> with > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> flink, > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> because > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >> ExecutionEnvironment is the > >>>>>>>>>>> unified > >>>>>>>>>>>>>> entry > >>>>>>>>>>>>>>>>>>>>>>>> point > >>>>>>>>>>>>>>>>>>>>>>>>>> for > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> flink. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> What > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> third > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> party > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> needs to do is > >> just pass > >>>>>>>>>>>> configuration > >>>>>>>>>>>>>> to > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ExecutionEnvironment > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> and > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >> ExecutionEnvironment will > >>>>>>>> do > >>>>>>>>>> the > >>>>>>>>>>>> right > >>>>>>>>>>>>>>>>>>>>>>> thing > >>>>>>>>>>>>>>>>>>>>>>>>>> based > >>>>>>>>>>>>>>>>>>>>>>>>>>> on > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> configuration. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Flink cli can > >> also be > >>>>>>>>>> considered > >>>>>>>>>>> as > >>>>>>>>>>>>>> flink > >>>>>>>>>>>>>>>>>>>>>>> api > >>>>>>>>>>>>>>>>>>>>>>>>>>>> consumer. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> it > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> just > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> pass > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> configuration to > >>>>>>>>>>>> ExecutionEnvironment > >>>>>>>>>>>>>> and > >>>>>>>>>>>>>>>>>>>>>>> let > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ExecutionEnvironment > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> to > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> create the proper > >>>>>>>> ClusterClient > >>>>>>>>>>>> instead > >>>>>>>>>>>>>>> of > >>>>>>>>>>>>>>>>>>>>>>>>>> letting > >>>>>>>>>>>>>>>>>>>>>>>>>>>> cli > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> to > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> create > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ClusterClient > >> directly. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 6 would involve > >> large code > >>>>>>>>>>>> refactoring, > >>>>>>>>>>>>>>> so > >>>>>>>>>>>>>>>>>>>>>>> I > >>>>>>>>>>>>>>>>>>>>>>>>>> think > >>>>>>>>>>>>>>>>>>>>>>>>>>> we > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> can > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> defer > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> it > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> for > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> future release, > >> 1,2,3,4,5 > >>>>>>>> could > >>>>>>>>>>> be > >>>>>>>>>>>> done > >>>>>>>>>>>>>>> at > >>>>>>>>>>>>>>>>>>>>>>>>> once I > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> believe. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Let > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> me > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> know > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> your > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> comments and > >> feedback, > >>>>>>>> thanks > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -- > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Best Regards > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Jeff Zhang > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -- > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Best Regards > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Jeff Zhang > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -- > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Best Regards > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Jeff Zhang > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -- > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Best Regards > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Jeff Zhang > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -- > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Best Regards > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Jeff Zhang > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -- > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Best Regards > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Jeff Zhang > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> -- > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> Best Regards > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> Jeff Zhang > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>> -- > >>>>>>>>>>>>>>>>>>>>>>>>>> Best Regards > >>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>> Jeff Zhang > >>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>> -- > >>>>>>>>>>>>>>>>>>>>>> Best Regards > >>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>> Jeff Zhang > >>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>> > >>>>>>>>>>>> > >>>>>>>>>>>> > >>>>>>>>>>> > >>>>>>>>>> > >>>>>>>> > >>>>>>> > >>>>>>> > >>>>>>> -- > >>>>>>> Best Regards > >>>>>>> > >>>>>>> Jeff Zhang > >> > >> > > -- Best Regards Jeff Zhang