flink任务挂掉后从ck自动重启

问题描述

我们的flink程序往往是7*24小时在运行的,当任务挂掉后,我们虽然可以通过监控报警等,第一时间知道程序挂掉,但是如果我们电脑不在旁边或者我们在休假,这种情况,往往不能够及时的重启任务。

需求

想实现一个脚本,能够在规定的时间范围内监测到任务已经停止,然后自动运行重启命令,重启任务;如果任务是存有中间状态的,那么还需要在自动重启时获取到任务的checkpoint路径

实现思路

  • 关于监测任务是否挂掉

我们可以利用yarn的命令配合Linux的命令行来找到你提交的命令,例如:

yarn application -list| awk ‘{print $2}’ | grep xxxxxx | wc -l

上述命令返回你运行的任务名在yarn上任务列表里的行数,如果是0,那么就证明你的任务挂掉了。

  • 关于任务重启
    如果你能知道任务挂掉了,那么就可以自动重启了,我们可以在监测到上述命令返回0时,运行你的启动脚本,例如:
  if [ $name = 0 ];then
        “重启命令”
 		echo "程序挂掉"
  fi
  • 关于任务带ck重启

实际生产中,我们的flink往往是带有状态信息的,也就是重启的时候需要指定ck的路径,那么我们这里提供一个简单思路,因为ck的路径是可以在配置中指定的,所以我们只需要知道flink任务的jobId就可以找到对应任务的最新ck,那么我们就可以尝试

①. 在任务启动时保存jobID到文件中,在启动时输出日志:

“>> /logs/test.log”

②.在任务挂掉重启时,先获取之前保存的jobID,然后根据jobID获取路径

  jobID=$(cat /logs/test.log)  		
  path="hdfs:///flink/flink-checkpoints/$jobID"

③.重启时,带上ck路径

 if [ $name = 0 ];then
 		jobID=$(cat /logs/test.log)
 		path="hdfs:///flink/flink-checkpoints/$jobID"
        “重启命令”-s $path
 		echo "程序挂掉"
  fi

最后,我们可以写个定时脚本,定时去运行这个命令,这样就可以在指定时间内监测到flink任务挂掉,然后自动重启了。

因为自己的脚本里还有其他东西,所以这里就不方便贴自己的脚本了,只提供一个实现思路,其实还是蛮简单的,如果有问题,欢迎指导交流

你可能感兴趣的:(flink,大数据,实时大数据,flink)