Flink On YARN 基于yarn-cluster的HA配置&Flink常见问题

一、背景

在Flink开发中,上线的任务经常会无故挂掉,刚开始对任务无故挂掉的原因,一无所知,排查起来也比较困难,网上资料也比较模糊不清,后面通过查阅资料和自己的一些经验,总算是有了一些结果,所以想总结一下近段时间所遇到的问题和解决方法。

二、问题陈列

  1.Flink On YARN中任务挂掉后,YARN的Web UI显示还在运行,但实际上已经挂掉了

    原因:这是由于Flink提交给YARN之后,YARN后续并没有继续监控Flink任务的状态

    解决办法:在提交任务时,命令行加一个参数 -d 即可,例如:run -m yarn-cluster  -d -p 2  -yn 2  -yjm 1024m -ytm 2048m  -ynm  xxxx -c xxxx

  2.java.lang.Exception: Container released on a *lost* node

         

   原因:YARN队列压力过大或者磁盘满了之后,可能会导致Flink申请的节点标记为失败,导致taskmanager挂掉

   解决办法:如果有配置重启策略的话,taskmanager会进行重启,如果没有配置重启策略但是配置了checkpoint,默认的重启策略是无限次重启,但是需要注意一点的是,taskmananger成功重启的前提是jobmanager没有挂掉,如果jobmanager也挂掉了,那么taskmanager重启成功之后也是无效的。

  3.生产上的任务频繁挂掉,一开始以为是问题二导致的,但是实际上问题二配置了checkpoint或者重启策略之后会自己重启,所以证明主要原因并不是以上的问题,其实主要的原因就是当YARN的队列资源紧张的时候,也有可能导致jobmanager挂掉,我们生产上的集群并没有配置Flink On YARN的高可用,即jobmanager挂掉之后是不会进行重启的,所以需要配置Flink On YARN的高可用,配置如下(此配置适用于Flink On YARN的yarn-cluster模式):

    1)首先配置 yarn-site.xml,配置resourcemanager重启次数

<property>
  <name>yarn.resourcemanager.am.max-attempts</name>
  <value>4</value>
  <description>
    The maximum number of application master execution attempts.
  </description>
</property>

    2)配置flink-conf.yaml ,这里必须添加zookeeper 信息,官方文档yarn-cluster模式只要求添加重启参数,不添加的话,task manager 会和job manager 一起挂掉, 只会重启对应的job manager 

# flink job manager次数  这个参数必须小于yarn.resourcemanager.am.max-attempts 
yarn.application-attempts: 3
# 添加zookeeper 配置
high-availability: zookeeper
high-availability.zookeeper.quorum: xx.x.x.xxx:2181
# job manager元数据在文件系统储存的位置
high-availability.storageDir: hdfs:///flink/recovery  

三、测试

1.启动flink 程序

       

2. kill 掉对应的 YarnSessionClusterEntrypoint (对应job manager)所在进程

  

 3.新的job manager,已经被重启,恰巧也和task Manager一个一个节点

 

4.task manager 上对应日志如上,与旧的job manager 的ResourceManager通信,当超时大于10s后,将其标记为失败,之后根据zookeeper去注册到新的job manager 

注:此配置只能降低Flink的失败次数,如果想让Flink稳定运行,应该还是需要在YARN上单独划分一个队列给实时任务使用,避免因其他因素导致实时任务失败

参考文档:https://blog.csdn.net/yumingzhu1/article/details/118994625

官方文档:https://ci.apache.org/projects/flink/flink-docs-release-1.9/ops/jobmanager_high_availability.html#configuration-1

原文地址:https://www.cnblogs.com/linzepeng/p/15071564.html