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 大数据 ...
随机推荐
- Elasticsearch学习笔记——索引模板
在索引模板里面,date类型的字段的format支持多种类型,在es中全部会转换成long类型进行存储,参考 https://zhuanlan.zhihu.com/p/34240906 一个索引模板范 ...
- shell中 >/dev/null 2>&1是什么意思
原文地址:http://juke.outofmemory.cn/entry/295292 我们经常能在 shell 脚本中发现 >/dev/null 2>&1 这样的语句.以前的我 ...
- ssh_exchange_identification: read: Connection reset by peer 解决思路
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/Jdk_yxs/article/deta ...
- 怎么在eclipse中安装properties插件
原文地址:https://jingyan.baidu.com/article/380abd0a6abe731d90192ce4.html 首先,在eclipse中点击“help”-"Inst ...
- PHP二维码添加logo的方法
PHP二维码添加logo的方法<pre> public function createqcode($text,$id){ include '/phpqrcode/phpqrcode.php ...
- vim设定Tab缩进长度
在Linux系统中,vim是一款非常好用的文本编辑器,那么,如何在Linux下的vim编辑器设定Tab的缩进长度呢? Linux系统下,vim编辑器Tab键的默认长度为8个空格,在vim中可以通过修改 ...
- 013 ECMAScript基础应用
1.ECMAScript概述 (1)前端的发展历程 <1>web 1.0时代 最初的网页以HTML为主,是纯静态的网页.网页是只读的,信息流只能从服务的到客户端单向流通.开发人员也只关心页 ...
- netcore发布失败
2.2 发布Views <MvcRazorCompileOnPublish>true</MvcRazorCompileOnPublish> 导致 发布失败--------- ...
- day56——http协议、MVC和MTV框架模式、django下载安装、url路由分发
day56 昨日复习 今日内容 HTTP协议 网页:https://www.cnblogs.com/clschao/articles/9230431.html 老师整理的重点 老师整理的重点 请求信息 ...
- Python知识点总结篇(四)
递归 特性 必须有明确的结束条件: 每进入深一层递归,问题规模比上层应有所减少: 递归效率不高,层次更多会导致栈溢出: def calc(n): print(n) if n // 2 > 0: ...