0%

Flink常见问题

本文主要包括:

  • Flink常见问题

Flink常见问题

  • 原因:这是由于Flink提交给YARN之后,YARN后续并没有继续监控Flink任务的状态
  • 解决办法:在提交任务时,命令行加一个参数 -d 即可,例如:run -m yarn-cluster -d -p 2 -yn 2 -yjm 1024m -ytm 2048m -ynm xxxx -c xxxx

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

  • 原因:YARN队列压力过大或者磁盘满了之后,可能会导致Flink申请的节点标记为失败,导致taskmanager挂掉
  • 解决办法:如果有配置重启策略的话,taskmanager会进行重启,如果没有配置重启策略但是配置了checkpoint,默认的重启策略是无限次重启,但是需要注意一点的是,taskmananger成功重启的前提是jobmanager没有挂掉,如果jobmanager也挂掉了,那么taskmanager重启成功之后也是无效的。

生产上的任务频繁挂掉

一开始以为是问题二导致的,但是实际上问题二配置了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  

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