首页 > 其他分享 >flink 大批量任务提交 yarn 失败问题

flink 大批量任务提交 yarn 失败问题

时间:2024-09-24 11:13:09浏览次数:7  
标签:26 07 大批量 flink yarn 提交 apache

问题现象

用户迁移到新集群后,反馈他们开发平台大量 flink 任务提交失败了,当时集群的 yarn 资源是足够的

排查过程

用户是在他们的开发平台上提交的,查看他们失败的任务,发现是他们提交端主动 Kill 的,接着沟通发现他们提交平台有个逻辑就是提交到 yarn 的 flink 任务,如果在 2分钟内没有在 yarn 上启动起来,也就是提交的 flink yarn application 没有变成 running 状态的话,开发平台会终止这个提交,并判定这个任务的状态为提交失败了.

已知背景如下:

  1. 旧集群没有这个问题,迁移到新集群后出现的
  2. 在提交任务的高峰期才会出现这种问题,低峰期没有这个问题
  3. 提交端客户端的日志是显示在等待,然后超过 2分钟了,cancel 了
2022-07-26 17:45:32,355 INFO  org.apache.flink.yarn.AbstractYarnClusterDescriptor           - Submitting application master application_1625727384658_7951
2022-07-26 17:45:32,577 INFO  org.apache.hadoop.yarn.client.api.impl.YarnClientImpl         - Submitted application application_1625727384658_7951
2022-07-26 17:45:32,578 INFO  org.apache.flink.yarn.AbstractYarnClusterDescriptor           - Waiting for the cluster to be allocated
2022-07-26 17:45:32,579 INFO  org.apache.flink.yarn.AbstractYarnClusterDescriptor           - Deploying cluster, current state ACCEPTED
2022-07-26 17:46:32,801 INFO  org.apache.flink.yarn.AbstractYarnClusterDescriptor           - Deployment took more than 60 seconds. Please check if the requested resources are available in the YARN cluster
2022-07-26 17:46:33,052 INFO  org.apache.flink.yarn.AbstractYarnClusterDescriptor           
......
2022-07-26 17:47:16,655 INFO  org.apache.flink.yarn.AbstractYarnClusterDescriptor           - Deployment took more than 60 seconds. Please check if the requested resources are available in the YARN cluster
2022-07-26 17:47:16,690 INFO  org.apache.flink.yarn.AbstractYarnClusterDescriptor           - Cancelling deployment from Deployment Failure Hook

疑点

把提交平台的 2 分钟判断时间增加到 5分钟是能够保证任务成功提交的.

根据 yarn 任务提交流程 ,application 等 master 启动起来后,并向 rm 注册后, application 就从 accepted 状态变为 running 状态了,所以问题是为什么 master 在 2分钟内拉不起了

am 也是一个 container ,一般来说 container 启动过程耗时比较长的资源本地化 localized resource 过程, 从 nm 日志中也确实证实了这一点.

但是资源本地化是一个很简单的操作,如果慢了,问题不会在应用层,一般都是底层网络或者硬件的问题.

于是接着开始转向排查底层操作系统和硬件的问题

分析发现问题节点上的线程数非常多:
ps -efL | grep java | wc -l
有 11 w 个, 当线程数在 5 w 个的时候,是能正常拉起 flink 任务的,这也是旧集群上正常节点上的线程数,但是当提交的任务增加,线程数达到 10 w 以上时,就无法在 2 分钟内拉起提交的 flink 任务.

在问题节点上,发现 ps 执行出现卡顿的现象,从这里排查发现:
因为线程开的太多,导致/proc目录下的子目录过多,导致的遍历这些目录时,getdents 消耗时间过长,只要是会访问/proc目录下的文件,都会因为同样的原因导致处理慢。

于是猜测 flink 提交任务估计也是同样的因素导致拉起超时,接着 使用 strace 工具来跟踪 nodemanager 进程,跟踪启动 am container 的过程:
找到下载jar包的进程/线程pid,然后strace -p pid -f -Ttt 2> strace.log 发现 nm 进程底层会有 /proc 目录的操作.

所以得出结论还是由于起的线程过多,导致proc下的目录过多,引起底层的相关调用变慢,进而导致上层的 java 程序变慢.

但是用户接着提出疑问,新集群 cpu 和内存配置都是旧集群的两倍,为什么支撑不了两倍的 flink 任务提交,并且当时问题节点的 cpu load 并没满

没有其他排查线索了
这时发现问题节点使用的 linux 内核版本是3.10 的,版本比较老,怀疑是内核层面对于多核多线程的处理能力导致的,于是构造环境使用 strace 进行测试,发现确实高版本内核 getdents 调用性能差异巨大

企业微信截图_e7c6b3ca-0aaf-4a90-b6ff-3a450e98df97.png

企业微信截图_45d3a35f-57a0-4aec-b421-485e4724ef4c.png

结论

linux 内核版本3.10低版本 对多核数大量线程相关处理缺少优化,导致某些底层系统调用处理性能不高.
升级内核到 4.18 版本即可解决

标签:26,07,大批量,flink,yarn,提交,apache
From: https://www.cnblogs.com/hdpdriver/p/18428777

相关文章

  • paimon flink cdc 整库同步
    --单表同步bin/flinkrun/opt/module/flink/opt/paimon-flink-action-0.9.0.jarmysql-sync-table--warehousehdfs://xx:8020/paimon/hive--databasedefault--tableuser1_sink--primary-keysid--mysql-confhostname=xx--mysql-confusername=xx--mysql-conf......
  • Flink数据源拆解分析(WikipediaEditsSource)
    在demo中,WikipediaEditsSource类作为数据源负责向Flink提供实时消息,今天咱们一起来分析其源码,了解Flink是怎么获取到来自Wiki的实时数据的,这对我们今后做自定义数据源也有很好的参考作用;官方解释以下是官网对消息来源的说明,维基百科提供了一个IRC协议的通道,从这个通道可以获取对......
  • Flink的反压机制:底层原理、产生原因、排查思路与解决方案
            反压(Backpressure)是流处理框架(如ApacheFlink)中非常重要的概念。反压的产生和有效处理,直接影响整个流处理作业的稳定性和性能。本文将从Flink的底层原理、反压产生的原因、如何排查反压问题,以及如何解决反压问题等方面进行详细讨论。1.Flink反压的底层原......
  • Flink 中 Checkpoint 的底层原理和机制
            Flink的Checkpoint机制是ApacheFlink在流式处理中的一个核心特性,保证了分布式数据流处理系统的 容错性。通过定期保存 状态快照(checkpoint),即使在发生故障时,Flink也可以恢复到之前的状态,确保处理的正确性。为了全面解释Flink的Checkpoint底层实现......
  • flink 启动Job加载外部jar都有哪些方法?
    flink启动Job加载外部jar都有哪些方法在ApacheFlink版本中,启动Job时加载外部Jar包有几种不同的方法。这些方法允许用户引入自定义的UDF(用户定义函数)或其他依赖项。以下是几种常见的方法:1.使用flinkrun命令直接启动你可以通过命令行工具flinkrun来指定你的Job......
  • 如何基于Flink CDC与OceanBase构建实时数仓,实现简化链路,高效排查
    本文作者:阿里云FlinkSQL负责人,伍翀,ApacheFlinkPMCMember&Committer众多数据领域的专业人士都很熟悉ApacheFlink,它作为流式计算引擎,流批一体,其核心在于其强大的分布式流数据处理能力,同时巧妙地融合了流计算与批计算的能力,因此成为了众多企业在进行流式计算业务时的首......
  • Hadoop(二十)Yarn工作原理
    Yarn资源调度器Yarn是一个资源调度平台,负责为运算程序提供服务器运算资源,相当于一个分布式的操作系统平台,而MapReduce等运算程序则相当于运行于操作系统之上的应用程序一、基础架构YARN主要由ResourceManager、NodeManager、ApplicationMaster和Container等组件构成二、Y......
  • Flink-cdc丢失数据排查
    一、获取任务信息任务id:i01f51582-d8be-4262-aefa-000000任务名称:ods_test1234丢失的数据时间:2024-09-1609:28:47 二、数据同步查看日志1、筛选日志筛选2024-09-1609:28:47到5分钟后数据2、查找快照id,筛选内容Committedsnapshot7258609197164498019(BaseRowDelt......
  • 大数据-128 - Flink 并行度设置 细节详解 全局、作业、算子、Slot
    点一下关注吧!!!非常感谢!!持续更新!!!目前已经更新到了:Hadoop(已更完)HDFS(已更完)MapReduce(已更完)Hive(已更完)Flume(已更完)Sqoop(已更完)Zookeeper(已更完)HBase(已更完)Redis(已更完)Kafka(已更完)Spark(已更完)Flink(正在更新!)章节内容上节我们完成了如下的内容:ManageOperatorStateStateBackendCheckpoint......
  • 大数据-124 - Flink State 01篇 状态原理和原理剖析:状态类型 执行分析
    点一下关注吧!!!非常感谢!!持续更新!!!目前已经更新到了:Hadoop(已更完)HDFS(已更完)MapReduce(已更完)Hive(已更完)Flume(已更完)Sqoop(已更完)Zookeeper(已更完)HBase(已更完)Redis(已更完)Kafka(已更完)Spark(已更完)Flink(正在更新!)章节内容上节我们完成了如下的内容:Flink并行度Flink并行度详解Flink并行度......