Flink使用(三)——记一次Flink Session任务反复重启
前言
环境: JDK 1.8+Flink 1.6+Hadoop 2.7.3
文中若有表述不正确,欢迎大伙留言指出,谢谢!
1、现象
使用yarn-session在yarn上启动flink集群并提交任务后,在Flink Web UI 上发现任务的state个数每十分钟左右会从0到10左右后又重复从0开始,但输出的结果没有问题。
2、分析过程
2.1 检查checkpoint过程(不是最终原因)
最开始以为是checkpoint的状态(RockDB方式)未设置好,检查配置未发现问题。使用yarn logs命令查找任务日志,发现没有没有Error,详细分析日志发现:
INFO:yarn.YarnApplicationMasterRunner:RECEIVER SIGNAL 15: SIGTERM. Shutting down as requested
操作系统为什么会发送请求kill掉容器了?从日志中没有找到有用信息,在网上查找前辈们的使用经验[1],发现当任务逻辑中有keyBy(key),其key变化时会导致窗口状态无法清理导致物理内存溢出容器被kill,但是我们的checkpoint的状态个数到10左右就又重新从0开始,而且每个state的大小只有几KB,所以可以排除是因为物理内存溢出导致的。
2.2 虚拟内存溢出(不是最终原因)
既然从任务日志本身没有发现问题,容器又被kill掉,所以打算从容器的日志出发去分析原因。分析容器本身的日志,就要去查看yarn的对应日志,通过任务日志中获取的容器信息找到集群对应的节点然后再分析对应时间短的容器日志,发现虚拟内存超过了申请,如下:

虚拟内存一般是申请内存的2.1倍(Hadoop中默认),博主为每个容器申请的内存为1G,所以对应的虚拟内存是2.1G,遇到这种情况最好的解决办法是扩大申请的资源比如2G,扩大资源后发现问题还是存在。为什么会用到这么多虚拟内存了?组里的前辈提示可能是JDK 1.8内存模型的原因,但是申请1G之前是可以测试的,而且我测试仅使用yarn-session在yarn上申请Flink集群,但不提交任务,问题还是存在,所以没有沿着这个方向去分析(后续还是得扩展学习的)。
在yarn的任务页面查看任务的状态时发现其有多个Attempt ID,其对应web UI和端口都是变化的,具体如下图:

AM为什么会重启这么多次了?AM的重启的最大次数是由yarn.resourcemanager.am.max-attempts确定,而集群中该参数为2。说明该参数未生效。
2.3 继续容器日志分析
继续分析容器日志发现如下:

容器10min会timeout被干掉,该值是由yarn上yarn.resourcemanager.container.liveness-monitor.interval-ms=600000ms(yarn-default.xml)确定的[2],到此,10min state重启的原因找到了,但是为什么AM重启的次数未被限制住了?在日志中找到信息如下:

从日志中发现,任务重启次数是统计在10秒钟中任务重启的次数,超过10重启的次数就不会被统计,该值在Flink中是由akka.ask.timeout=10s决定的[3]。到此,AM多次重启的原因也找到了。但是,是什么原因导致的AM失败还是没有找到,后台找到ERROR如下:

该信息仅显示NodeManager的心跳信息未上报成功,但原因未知。
3、尝试输出yarn对应类的Debug信息
设置是在浏览器中yarn的ResourceManager active 节点的8088端口后加上logLevel,如:127.0.0.1:8088/logLevel,在页面上指定类名和日志级别,然后在对应节点的ResourceManager日志中就可以找到对应的debug日志。本问题中设置类名为org.apache.hadoop.yarn.server.resourcemanager.mnode,结果没有找到有用信息。
4、解决办法
在排除问题过程中发现同集群上Spark任务AM的attempt ID已经重启到1600+了,所以到此判断是Yarn的问题导致,但是什么问题还是没有找到。
解决办法:重启yarn集群即可。
后记:
哎,真是一顿操作猛如虎啊,到头啥原因还是没有定位出来。不过在这个过程中涉及的思考过程和涉及的参数还是值得记录下来的,所以有了这篇博客,对不住了各位看官,愿勿恼!
Ref:
[1]https://blog.csdn.net/TripleDangClark/article/details/89146895
[2]http://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-common/yarn-default.xml
[3]https://ci.apache.org/projects/flink/flink-docs-release-1.6/ops/jobmanager_high_availability.html
Flink使用(三)——记一次Flink Session任务反复重启的更多相关文章
- Flink(三)Flink开发IDEA环境搭建与测试
一.IDEA开发环境 1.pom文件设置 <properties> <maven.compiler.source>1.8</maven.compiler.source&g ...
- flink笔记(三) flink架构及运行方式
架构图 Job Managers, Task Managers, Clients JobManager(Master) 用于协调分布式执行.它们用来调度task,协调检查点,协调失败时恢复等. Fli ...
- Flink 的Window 操作(基于flink 1.3描述)
Window是无限数据流处理的核心,Window将一个无限的stream拆分成有限大小的”buckets”桶,我们可以在这些桶上做计算操作.本文主要聚焦于在Flink中如何进行窗口操作,以及程序员如何 ...
- Flink 从0到1学习—— Flink 不可以连续 Split(分流)?
前言 今天上午被 Flink 的一个算子困惑了下,具体问题是什么呢? 我有这么个需求:有不同种类型的告警数据流(包含恢复数据),然后我要将这些数据流做一个拆分,拆分后的话,每种告警里面的数据又想将告警 ...
- Flink 源码解析 —— 深度解析 Flink 是如何管理好内存的?
前言 如今,许多用于分析大型数据集的开源系统都是用 Java 或者是基于 JVM 的编程语言实现的.最着名的例子是 Apache Hadoop,还有较新的框架,如 Apache Spark.Apach ...
- Flink 从0到1学习 —— Flink 中如何管理配置?
前言 如果你了解 Apache Flink 的话,那么你应该熟悉该如何像 Flink 发送数据或者如何从 Flink 获取数据.但是在某些情况下,我们需要将配置数据发送到 Flink 集群并从中接收一 ...
- Flink 源码解析 —— 深度解析 Flink 序列化机制
Flink 序列化机制 https://t.zsxq.com/JaQfeMf 博客 1.Flink 从0到1学习 -- Apache Flink 介绍 2.Flink 从0到1学习 -- Mac 上搭 ...
- Flink 从 0 到 1 学习 —— Flink 配置文件详解
前面文章我们已经知道 Flink 是什么东西了,安装好 Flink 后,我们再来看下安装路径下的配置文件吧. 安装目录下主要有 flink-conf.yaml 配置.日志的配置文件.zk 配置.Fli ...
- Flink 从 0 到 1 学习 —— Flink Data transformation(转换)
toc: true title: Flink 从 0 到 1 学习 -- Flink Data transformation(转换) date: 2018-11-04 tags: Flink 大数据 ...
随机推荐
- 审阅模式中word保存不了
word保存不了 觉得有用的话,欢迎一起讨论相互学习~Follow Me 昨天写论文出现一个怪事,发现自己word内容按ctrl+S 进行保存时可以的,但是当按X进行关闭时,出现 关闭不了,问我是否需 ...
- LwIP应用开发笔记之三:LwIP无操作系统UDP客户端
前一节我们实现了基于RAW API的UDP服务器,在接下来,我们进一步利用RAW API实现UDP客户端. 1.UDP协议简述 UDP协议全称是用户数据报协议,在网络中它与TCP协议一样用于处理数据包 ...
- Java进程故障排查思路及步骤
故障场景 Java进程出现问题,通常表现出如下现象: Web应用响应时间长/超时,甚至不响应 CPU使用率极高/低,频繁出现Full GC,甚至OutOfMemoryError 响应时间长.超时,甚至 ...
- 零基础C#网站开发实战教学(全套)最新更新2019-12-16。。。
这是林枫山自己编写制作的全套Visual Studio 2013 C# 网站开发案例实战教学教程,欢迎下载学习. 下载目录链接如下(如果链接下载不了,请加QQ:714259796获取教程): 网站界面 ...
- JobStorage.Current property value has not been initialized. You must set it before using Hangfire Client or Server API.
JobStorage.Current property value has not been initialized. You must set it before using Hangfire Cl ...
- bridge和原生交互的简单用法
首先获取当前环境是ios还是Android var u = navigator.userAgent; var isAndroid = u.indexOf('Android') > -1 || u ...
- Git_从远程branch取回所有最新代码,暴力覆盖本地 && GIT基本结构
假设你本地有一个xx分支对应着远端的xx分支,当前,你在本地的xx分支进行了修改(可以是执行了add, commit,但不要push),然后,现在想从远端的xx分支拿到最新的代码,可以用下图方法覆盖掉 ...
- WPS应用技巧
打开云文档的文件:文件-打开-我的云文档 (选择时的文档为PDF时仅扫描PDF文件)
- Python学习之路:列表(List)的append()、extend()与insert()方法
相同点 这三种方法的作用都是为列表(List)添加值 它们的语法为: list.append(obj)list.extend(seq)list.insert(index,obj) #此处index为对 ...
- HTML table 表格边框
一.总体思路: 1.表格无边框,背景颜色设置一种颜色(#DCDFE6),这样表格的边框的颜色就是表格的背景颜色: 2.单元格间距为1px,背景颜色设置为白色(#FFFFFF) // CSS table ...