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