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