+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

Reply via email to