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 bradyMk <zh...@126.com> on 2020/10/30 03:51:29 UTC

flink任务挂掉后自动重启

flink任务一般都是7*24h在跑的,如果挂掉,有没有什么办法自动重启任务?之前都是任务挂掉然后手动再提交一次任务,但是不可能每次挂掉都可以手动重启;另外,如果对于没做checkpoints的任务,可以通过定时脚本监控yarn,如果任务不存在,则重新提交任务,但是,对于做了checkpoints的任务,我们提交的时候就需要指定ck的目录,这个目录都是在变的,那么又该如何让任务挂掉后能自动重启呢?希望能得到大佬们的指点~



-----
Best Wishes
--
Sent from: http://apache-flink.147419.n8.nabble.com/

Re: 回复: flink任务挂掉后自动重启

Posted by bradyMk <zh...@126.com>.
您好,请问每次任务重启后,jm节点是不一样的,你是如何获取到{cluster}的信息的呢?



-----
Best Wishes
--
Sent from: http://apache-flink.147419.n8.nabble.com/

Re: 回复: flink任务挂掉后自动重启

Posted by bradyMk <zh...@126.com>.
了解了,是我想的太局限了,谢谢zhisheng大佬啦~



-----
Best Wishes
--
Sent from: http://apache-flink.147419.n8.nabble.com/

Re: 回复: flink任务挂掉后自动重启

Posted by zhisheng <zh...@gmail.com>.
平台层是将功能自动化,产品化,没有平台总可以手动按照这个思路去实现。

bradyMk <zh...@126.com> 于2020年11月2日周一 下午2:27写道:

> 那我们没有这样的计算平台该怎么办呢?
>
>
>
> -----
> Best Wishes
> --
> Sent from: http://apache-flink.147419.n8.nabble.com/
>

Re: 回复: flink任务挂掉后自动重启

Posted by bradyMk <zh...@126.com>.
那我们没有这样的计算平台该怎么办呢?



-----
Best Wishes
--
Sent from: http://apache-flink.147419.n8.nabble.com/

Re: 回复: flink任务挂掉后自动重启

Posted by zhisheng <zh...@gmail.com>.
平台层的意思就是说:假设你们有实时计算平台,那么可以考虑把这个想法做在你们的平台里面。

bradyMk <zh...@126.com> 于2020年11月2日周一 上午11:40写道:

> zhisheng大佬好~我不是很理解您说的平台层具体是什么意思,指的是什么。。。
>
>
>
> -----
> Best Wishes
> --
> Sent from: http://apache-flink.147419.n8.nabble.com/

Re: 回复: flink任务挂掉后自动重启

Posted by bradyMk <zh...@126.com>.
zhisheng大佬好~我不是很理解您说的平台层具体是什么意思,指的是什么。。。



-----
Best Wishes
--
Sent from: http://apache-flink.147419.n8.nabble.com/

Re: 回复: flink任务挂掉后自动重启

Posted by bradyMk <zh...@126.com>.
zhisheng大佬好~我不太理解你说的平台层是什么。。。



-----
Best Wishes
--
Sent from: http://apache-flink.147419.n8.nabble.com/

Re: 回复: flink任务挂掉后自动重启

Posted by zhisheng <zh...@gmail.com>.
hi,

提供一个方案,平台层可以做到作业自动拉起,那么需要平台层有这些信息。

1、作业启动的时候保存一下作业的 jobid 信息

2、平台轮训检测作业的状态,如果作业挂了,直接从配置的 checkpoint 基础路径 + jobid 目录下去找最新的目录(里面含
_metadata)

eg: hdfs:/flink/checkpoints/9b4cddb385b0c5db96b0774769867673/chk-15109

然后平台层将作业从 checkpoint 拉起,当然这个是否自动拉起,拉起的次数可以让用户去选择。

Best!
zhisheng

bradyMk <zh...@126.com> 于2020年10月31日周六 下午4:20写道:

> 好的,我去试试这种方法,感谢~
>
>
>
> -----
> Best Wishes
> --
> Sent from: http://apache-flink.147419.n8.nabble.com/
>

Re: 回复: flink任务挂掉后自动重启

Posted by bradyMk <zh...@126.com>.
好的,我去试试这种方法,感谢~



-----
Best Wishes
--
Sent from: http://apache-flink.147419.n8.nabble.com/

回复: flink任务挂掉后自动重启

Posted by 史 正超 <sh...@outlook.com>.
可以通过使用rest api 定时拉取checkpoints的状态
rest api uri为  {cluster}/jobs/{jobid}/checkpoints

返回的是json,里面有最近一次的ck记录和 历史记录。
________________________________
发件人: bradyMk <zh...@126.com>
发送时间: 2020年10月30日 6:52
收件人: user-zh@flink.apache.org <us...@flink.apache.org>
主题: Re: flink任务挂掉后自动重启

谢谢您的解答~
重启策略确实可以解决任务故障重启,但是有的时候(例如集群资源不够),任务会直接被kill掉,我想问的是针对被kill掉的任务,有没有什么方法可以自动重启,特别是带有ck的任务,如果想要自动重启,如何在启动的时候自动去hdfs上获取最新的ck地址呢?



-----
Best Wishes
--
Sent from: http://apache-flink.147419.n8.nabble.com/

Re: flink任务挂掉后自动重启

Posted by bradyMk <zh...@126.com>.
谢谢您的解答~
重启策略确实可以解决任务故障重启,但是有的时候(例如集群资源不够),任务会直接被kill掉,我想问的是针对被kill掉的任务,有没有什么方法可以自动重启,特别是带有ck的任务,如果想要自动重启,如何在启动的时候自动去hdfs上获取最新的ck地址呢?



-----
Best Wishes
--
Sent from: http://apache-flink.147419.n8.nabble.com/

Re: flink任务挂掉后自动重启

Posted by Congxian Qiu <qc...@gmail.com>.
Hi
    1 Flink 的 RestartStrategy[1] 可以解决你的问题吗?
    2 从 checkpoint 恢复 这个,可以尝试记录每个作业最新的 checkpoint 地址,也可以在启动的时候从 hdfs 获取一下

[1]
https://ci.apache.org/projects/flink/flink-docs-release-1.11/zh/dev/task_failure_recovery.html
Best,
Congxian


bradyMk <zh...@126.com> 于2020年10月30日周五 上午11:51写道:

>
> flink任务一般都是7*24h在跑的,如果挂掉,有没有什么办法自动重启任务?之前都是任务挂掉然后手动再提交一次任务,但是不可能每次挂掉都可以手动重启;另外,如果对于没做checkpoints的任务,可以通过定时脚本监控yarn,如果任务不存在,则重新提交任务,但是,对于做了checkpoints的任务,我们提交的时候就需要指定ck的目录,这个目录都是在变的,那么又该如何让任务挂掉后能自动重启呢?希望能得到大佬们的指点~
>
>
>
> -----
> Best Wishes
> --
> Sent from: http://apache-flink.147419.n8.nabble.com/

Re: Re:Re: Re:flink任务挂掉后自动重启

Posted by bradyMk <zh...@126.com>.
您好,除了手动自己去kill掉任务,我这边经常会有类似丢节点或者写hbase时节点连不上导致整个job挂掉的问题,类似:
Caused by:
org.apache.hadoop.hbase.client.RetriesExhaustedWithDetailsException: Failed
66 actions: Operation Timeout: 66 times, servers with issues:
172.xx.x.xx,16020,1597989428451
	at
org.apache.hadoop.hbase.client.AsyncProcess$BatchErrors.makeException(AsyncProcess.java:297)
	at
org.apache.hadoop.hbase.client.AsyncProcess$BatchErrors.access$2300(AsyncProcess.java:273)
	at
org.apache.hadoop.hbase.client.AsyncProcess.waitForAllPreviousOpsAndReset(AsyncProcess.java:1906)
...
针对这种情况,应该是不能自动拉起的,这种情况,job被kill掉,需要重新提交任务就好了,所以我现在才想需要一个任务自动重启的功能



-----
Best Wishes
--
Sent from: http://apache-flink.147419.n8.nabble.com/

Re: Re: Re:flink任务挂掉后自动重启

Posted by bradyMk <zh...@126.com>.
谢谢您的解答,我现在已经尝试用这种思路去搞了



-----
Best Wishes
--
Sent from: http://apache-flink.147419.n8.nabble.com/

Re: Re: Re:flink任务挂掉后自动重启

Posted by LakeShen <sh...@gmail.com>.
Hi bradyMk,

    整体上有两种方法:
   1. 任务被 Kill 掉后,拉起时,从checkpoint 恢复,这个就需要知道任务结束之前,最新一次的 checkpoint
信息,然后从这开始恢复。
   Flink 任务 checkpoint 的路径是 checkpoint 根路径 + job_id 组成的路径,所以你可以从这个目录找到
chk-xx 最新的 checkpoint ,然后进行恢复即可。
   当然,还有其他方法知道任务被kill 前,最新一次的 checkpoint 信息。你选择一种适合你的方式就行,然后做成自动化的,降低运维成本。

   2. 任务被 kill 掉后,从 Savepoint 恢复,可以定时做一次 savepoint
,不过这种方法由于状态和当前时间有间隙,可能会导致数据重放,从而下游可能会有消息重复。

  建议选择 1 来实现。

Best,
LakeShen



hailongwang <18...@163.com> 于2020年11月3日周二 下午7:21写道:

> Hi bradyMk,
>
>
> 在 on yarn 的模式下,如果某个container 被kill 了,是会重新拉起的。
> 至于整个 job 被kill 了,这种情况应该是自己手动显示的去停止把?
> 最于重启的话,重启次数可以设置个非常大的数字(~无限重启),但是一旦 job 一直这么重启,我个人任务就算重新拉起也是没用的把?
>   这个时候应该结合平台的告警策略来进行人工干预了。
> Best,
> Hailong Wang
>
>
>
>
> 在 2020-11-03 09:32:50,"bradyMk" <zh...@126.com> 写道:
> >您好,你说的这个策略是失败重启策略,但是如果job在某些情况被kill掉,或者重启超过重启次数,任务也会退出;我主要是针对这种情况重启的
> >
> >
> >
> >-----
> >Best Wishes
> >--
> >Sent from: http://apache-flink.147419.n8.nabble.com/
>

Re:Re: Re:flink任务挂掉后自动重启

Posted by hailongwang <18...@163.com>.
Hi bradyMk,


在 on yarn 的模式下,如果某个container 被kill 了,是会重新拉起的。
至于整个 job 被kill 了,这种情况应该是自己手动显示的去停止把?
最于重启的话,重启次数可以设置个非常大的数字(~无限重启),但是一旦 job 一直这么重启,我个人任务就算重新拉起也是没用的把?
  这个时候应该结合平台的告警策略来进行人工干预了。
Best,
Hailong Wang




在 2020-11-03 09:32:50,"bradyMk" <zh...@126.com> 写道:
>您好,你说的这个策略是失败重启策略,但是如果job在某些情况被kill掉,或者重启超过重启次数,任务也会退出;我主要是针对这种情况重启的
>
>
>
>-----
>Best Wishes
>--
>Sent from: http://apache-flink.147419.n8.nabble.com/

Re: Re:flink任务挂掉后自动重启

Posted by bradyMk <zh...@126.com>.
您好,你说的这个策略是失败重启策略,但是如果job在某些情况被kill掉,或者重启超过重启次数,任务也会退出;我主要是针对这种情况重启的



-----
Best Wishes
--
Sent from: http://apache-flink.147419.n8.nabble.com/

Re:flink任务挂掉后自动重启

Posted by hailongwang <18...@163.com>.
Hi,
 Flink 自动重启策略[1]可以满足你的需求?
一般来说,如果 container 挂的话,yarn 会重新拉起。Job 因为某些异常失败,flink 也有 策略进行拉起。
[1] 
https://ci.apache.org/projects/flink/flink-docs-release-1.11/ops/config.html#fault-tolerance
Best,
Hailong Wang

在 2020-10-30 10:51:29,"bradyMk" <zh...@126.com> 写道:
>flink任务一般都是7*24h在跑的,如果挂掉,有没有什么办法自动重启任务?之前都是任务挂掉然后手动再提交一次任务,但是不可能每次挂掉都可以手动重启;另外,如果对于没做checkpoints的任务,可以通过定时脚本监控yarn,如果任务不存在,则重新提交任务,但是,对于做了checkpoints的任务,我们提交的时候就需要指定ck的目录,这个目录都是在变的,那么又该如何让任务挂掉后能自动重启呢?希望能得到大佬们的指点~
>
>
>
>-----
>Best Wishes
>--
>Sent from: http://apache-flink.147419.n8.nabble.com/

Re: flink任务挂掉后自动重启

Posted by silence <sl...@aliyun.com.INVALID>.
说一下我们平台的实现方式
1、自定义metricReporter,假如任务开启了checkpoint,reporter会自动的将最新完成的checkpoint路径进行上报
   
可参考https://ci.apache.org/projects/flink/flink-docs-release-1.11/monitoring/metrics.html#checkpointing
2、平台会有是否重试和是否基于checkpoint进行恢复的选项
3、假如上述两选项都开启了之后,可以对运行失败的任务基于最新的checkpoint进行拉起



--
Sent from: http://apache-flink.147419.n8.nabble.com/