+1 for creating a channel.

Kostas

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

Reply via email to