You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user-zh@flink.apache.org by Evan <ch...@foxmail.com> on 2020/07/09 01:38:01 UTC

代码中如何取消正在运行的Flink Streaming作业

这个问题之前看到过有人在问,但是没有看到答案,我想问一下,Flink Streaming API有没有提供类似的接口,调用后就能停止这个Stream作业呢?

Re: 代码中如何取消正在运行的Flink Streaming作业

Posted by Congxian Qiu <qc...@gmail.com>.
Hi

如果可以的话,建议先调用 RestClient 的 stop 等命令(这样可以在最后做一次 savepoint,或者 checkpoint -- 这个
FLINK-12619 想做),然后失败再使用 yarn 的 kill 命令,这样能够减少后续启动时的回放数据量

Best,
Congxian


zhisheng <zh...@gmail.com> 于2020年7月14日周二 下午12:53写道:

> 如果是 on yarn 的话,也可以直接调用 yarn 的 kill 命令停止作业
>
> Jeff Zhang <zj...@gmail.com> 于2020年7月11日周六 下午11:23写道:
>
> > Zeppelin 能够帮你提交和cancel job,就是通过上面jianxu说的ClusterClient
> > api来做到的,对zeppelin感兴趣的话,可以参考这个视频
> >
> > https://www.bilibili.com/video/BV1Te411W73b?p=21
> >
> >
> > jianxu <rj...@163.com> 于2020年7月11日周六 下午4:52写道:
> >
> > > Hi:
> > >
> > >
> >
> 我想,你可能打算通过API的方式来取消正在运行的流任务。Flink任务提交时需要构建ClusterClient,提交成功后会返回任务对应的JobId。任务取消时,通过调用ClusterClient的cancel(JobID
> > > jobId)取消流任务。
> > >     Flink源码可以看看 CliFrontend[1]中的逻辑,如果觉得比较麻烦可以参考
> > > https://github.com/todd5167/flink-spark-submiter
> > > 项目的任务提交部分,取消任务时构建ClusterClient即可。
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > > | |
> > > jianxu
> > > |
> > > |
> > > rjianxu@163.com
> > > |
> > >
> > >
> > >
> > >
> > > 在2020年07月11日 16:19,Congxian Qiu<qc...@gmail.com> 写道:
> > > Hi
> > >
> > > 如果你是想做一个作业管理的平台,可以尝试看一下 CliFrontend[1] 中相关的逻辑,对于 On Yarn
> > > 的作业,简单地说你需要能够正确的初始化一个 client 和 Yarn RM 交互,然后你需要知道
> applicationId,另外你还需要知道
> > > flink 的 JobId,接下来就是调用 Flink 的接口了
> > >
> > > 如果像更多的了解参数如从和命令行传到 java 代码的,你可以自己写一个单元测试,单步调试一下整个流程。
> > >
> > > [1]
> > >
> > >
> >
> https://github.com/apache/flink/blob/master/flink-clients/src/main/java/org/apache/flink/client/cli/CliFrontend.java
> > >
> > > Best,
> > > Congxian
> > >
> > >
> > > godfrey he <go...@gmail.com> 于2020年7月9日周四 上午10:08写道:
> > >
> > > 可以通过 StreamExecutionEnvironment#executeAsync 提交作业,返回 JobClient [1], 通过
> > > JobClient 可以 cancel 作业,获取 job status。
> > >
> > > [1]
> > >
> > >
> > >
> >
> https://cwiki.apache.org/confluence/display/FLINK/FLIP-74%3A+Flink+JobClient+API
> > >
> > > Best,
> > > Godfrey
> > >
> > > Evan <ch...@foxmail.com> 于2020年7月9日周四 上午9:40写道:
> > >
> > > 这个问题之前看到过有人在问,但是没有看到答案,我想问一下,Flink Streaming
> > > API有没有提供类似的接口,调用后就能停止这个Stream作业呢?
> > >
> > >
> >
> > --
> > Best Regards
> >
> > Jeff Zhang
> >
>

Re: 代码中如何取消正在运行的Flink Streaming作业

Posted by zhisheng <zh...@gmail.com>.
如果是 on yarn 的话,也可以直接调用 yarn 的 kill 命令停止作业

Jeff Zhang <zj...@gmail.com> 于2020年7月11日周六 下午11:23写道:

> Zeppelin 能够帮你提交和cancel job,就是通过上面jianxu说的ClusterClient
> api来做到的,对zeppelin感兴趣的话,可以参考这个视频
>
> https://www.bilibili.com/video/BV1Te411W73b?p=21
>
>
> jianxu <rj...@163.com> 于2020年7月11日周六 下午4:52写道:
>
> > Hi:
> >
> >
> 我想,你可能打算通过API的方式来取消正在运行的流任务。Flink任务提交时需要构建ClusterClient,提交成功后会返回任务对应的JobId。任务取消时,通过调用ClusterClient的cancel(JobID
> > jobId)取消流任务。
> >     Flink源码可以看看 CliFrontend[1]中的逻辑,如果觉得比较麻烦可以参考
> > https://github.com/todd5167/flink-spark-submiter
> > 项目的任务提交部分,取消任务时构建ClusterClient即可。
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> > | |
> > jianxu
> > |
> > |
> > rjianxu@163.com
> > |
> >
> >
> >
> >
> > 在2020年07月11日 16:19,Congxian Qiu<qc...@gmail.com> 写道:
> > Hi
> >
> > 如果你是想做一个作业管理的平台,可以尝试看一下 CliFrontend[1] 中相关的逻辑,对于 On Yarn
> > 的作业,简单地说你需要能够正确的初始化一个 client 和 Yarn RM 交互,然后你需要知道 applicationId,另外你还需要知道
> > flink 的 JobId,接下来就是调用 Flink 的接口了
> >
> > 如果像更多的了解参数如从和命令行传到 java 代码的,你可以自己写一个单元测试,单步调试一下整个流程。
> >
> > [1]
> >
> >
> https://github.com/apache/flink/blob/master/flink-clients/src/main/java/org/apache/flink/client/cli/CliFrontend.java
> >
> > Best,
> > Congxian
> >
> >
> > godfrey he <go...@gmail.com> 于2020年7月9日周四 上午10:08写道:
> >
> > 可以通过 StreamExecutionEnvironment#executeAsync 提交作业,返回 JobClient [1], 通过
> > JobClient 可以 cancel 作业,获取 job status。
> >
> > [1]
> >
> >
> >
> https://cwiki.apache.org/confluence/display/FLINK/FLIP-74%3A+Flink+JobClient+API
> >
> > Best,
> > Godfrey
> >
> > Evan <ch...@foxmail.com> 于2020年7月9日周四 上午9:40写道:
> >
> > 这个问题之前看到过有人在问,但是没有看到答案,我想问一下,Flink Streaming
> > API有没有提供类似的接口,调用后就能停止这个Stream作业呢?
> >
> >
>
> --
> Best Regards
>
> Jeff Zhang
>

Re: 代码中如何取消正在运行的Flink Streaming作业

Posted by Jeff Zhang <zj...@gmail.com>.
Zeppelin 能够帮你提交和cancel job,就是通过上面jianxu说的ClusterClient
api来做到的,对zeppelin感兴趣的话,可以参考这个视频

https://www.bilibili.com/video/BV1Te411W73b?p=21


jianxu <rj...@163.com> 于2020年7月11日周六 下午4:52写道:

> Hi:
>
> 我想,你可能打算通过API的方式来取消正在运行的流任务。Flink任务提交时需要构建ClusterClient,提交成功后会返回任务对应的JobId。任务取消时,通过调用ClusterClient的cancel(JobID
> jobId)取消流任务。
>     Flink源码可以看看 CliFrontend[1]中的逻辑,如果觉得比较麻烦可以参考
> https://github.com/todd5167/flink-spark-submiter
> 项目的任务提交部分,取消任务时构建ClusterClient即可。
>
>
>
>
>
>
>
>
>
>
> | |
> jianxu
> |
> |
> rjianxu@163.com
> |
>
>
>
>
> 在2020年07月11日 16:19,Congxian Qiu<qc...@gmail.com> 写道:
> Hi
>
> 如果你是想做一个作业管理的平台,可以尝试看一下 CliFrontend[1] 中相关的逻辑,对于 On Yarn
> 的作业,简单地说你需要能够正确的初始化一个 client 和 Yarn RM 交互,然后你需要知道 applicationId,另外你还需要知道
> flink 的 JobId,接下来就是调用 Flink 的接口了
>
> 如果像更多的了解参数如从和命令行传到 java 代码的,你可以自己写一个单元测试,单步调试一下整个流程。
>
> [1]
>
> https://github.com/apache/flink/blob/master/flink-clients/src/main/java/org/apache/flink/client/cli/CliFrontend.java
>
> Best,
> Congxian
>
>
> godfrey he <go...@gmail.com> 于2020年7月9日周四 上午10:08写道:
>
> 可以通过 StreamExecutionEnvironment#executeAsync 提交作业,返回 JobClient [1], 通过
> JobClient 可以 cancel 作业,获取 job status。
>
> [1]
>
>
> https://cwiki.apache.org/confluence/display/FLINK/FLIP-74%3A+Flink+JobClient+API
>
> Best,
> Godfrey
>
> Evan <ch...@foxmail.com> 于2020年7月9日周四 上午9:40写道:
>
> 这个问题之前看到过有人在问,但是没有看到答案,我想问一下,Flink Streaming
> API有没有提供类似的接口,调用后就能停止这个Stream作业呢?
>
>

-- 
Best Regards

Jeff Zhang

回复: 代码中如何取消正在运行的Flink Streaming作业

Posted by jianxu <rj...@163.com>.
Hi:
    我想,你可能打算通过API的方式来取消正在运行的流任务。Flink任务提交时需要构建ClusterClient,提交成功后会返回任务对应的JobId。任务取消时,通过调用ClusterClient的cancel(JobID jobId)取消流任务。
    Flink源码可以看看 CliFrontend[1]中的逻辑,如果觉得比较麻烦可以参考https://github.com/todd5167/flink-spark-submiter项目的任务提交部分,取消任务时构建ClusterClient即可。










| |
jianxu
|
|
rjianxu@163.com
|




在2020年07月11日 16:19,Congxian Qiu<qc...@gmail.com> 写道:
Hi

如果你是想做一个作业管理的平台,可以尝试看一下 CliFrontend[1] 中相关的逻辑,对于 On Yarn
的作业,简单地说你需要能够正确的初始化一个 client 和 Yarn RM 交互,然后你需要知道 applicationId,另外你还需要知道
flink 的 JobId,接下来就是调用 Flink 的接口了

如果像更多的了解参数如从和命令行传到 java 代码的,你可以自己写一个单元测试,单步调试一下整个流程。

[1]
https://github.com/apache/flink/blob/master/flink-clients/src/main/java/org/apache/flink/client/cli/CliFrontend.java

Best,
Congxian


godfrey he <go...@gmail.com> 于2020年7月9日周四 上午10:08写道:

可以通过 StreamExecutionEnvironment#executeAsync 提交作业,返回 JobClient [1], 通过
JobClient 可以 cancel 作业,获取 job status。

[1]

https://cwiki.apache.org/confluence/display/FLINK/FLIP-74%3A+Flink+JobClient+API

Best,
Godfrey

Evan <ch...@foxmail.com> 于2020年7月9日周四 上午9:40写道:

这个问题之前看到过有人在问,但是没有看到答案,我想问一下,Flink Streaming
API有没有提供类似的接口,调用后就能停止这个Stream作业呢?


Re: 代码中如何取消正在运行的Flink Streaming作业

Posted by Congxian Qiu <qc...@gmail.com>.
Hi

如果你是想做一个作业管理的平台,可以尝试看一下 CliFrontend[1] 中相关的逻辑,对于 On Yarn
的作业,简单地说你需要能够正确的初始化一个 client 和 Yarn RM 交互,然后你需要知道 applicationId,另外你还需要知道
flink 的 JobId,接下来就是调用 Flink 的接口了

如果像更多的了解参数如从和命令行传到 java 代码的,你可以自己写一个单元测试,单步调试一下整个流程。

[1]
https://github.com/apache/flink/blob/master/flink-clients/src/main/java/org/apache/flink/client/cli/CliFrontend.java

Best,
Congxian


godfrey he <go...@gmail.com> 于2020年7月9日周四 上午10:08写道:

> 可以通过 StreamExecutionEnvironment#executeAsync 提交作业,返回 JobClient [1], 通过
> JobClient 可以 cancel 作业,获取 job status。
>
> [1]
>
> https://cwiki.apache.org/confluence/display/FLINK/FLIP-74%3A+Flink+JobClient+API
>
> Best,
> Godfrey
>
> Evan <ch...@foxmail.com> 于2020年7月9日周四 上午9:40写道:
>
> > 这个问题之前看到过有人在问,但是没有看到答案,我想问一下,Flink Streaming
> > API有没有提供类似的接口,调用后就能停止这个Stream作业呢?
>

Re: 代码中如何取消正在运行的Flink Streaming作业

Posted by godfrey he <go...@gmail.com>.
可以通过 StreamExecutionEnvironment#executeAsync 提交作业,返回 JobClient [1], 通过
JobClient 可以 cancel 作业,获取 job status。

[1]
https://cwiki.apache.org/confluence/display/FLINK/FLIP-74%3A+Flink+JobClient+API

Best,
Godfrey

Evan <ch...@foxmail.com> 于2020年7月9日周四 上午9:40写道:

> 这个问题之前看到过有人在问,但是没有看到答案,我想问一下,Flink Streaming
> API有没有提供类似的接口,调用后就能停止这个Stream作业呢?