zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Python 虚拟环境(VirtualEnv)
    python 枚举
    Python 面向对象编程
    Python 使用模块
    Python 函数
    Python dict & set
    JAVA-工具类
    09-12 练习题
    JAVA-数组
    java-语句
  • 原文地址:https://www.cnblogs.com/linzepeng/p/15071564.html
Copyright © 2011-2022 走看看