Apache Flink作为分布式处理引擎,用于对无界和有界数据流进行状态计算。其中实时任务用于处理无界数据流,离线任务用于处理有界数据。
通过本文你将掌握让大型离线任务运行稳定的能力,同时能够通过分析离线任务运行特点,降低任务运行资源消耗,减少任务成本。
下面我们进入正题:
01
—
离线任务情况说明
对于平台处理的离线任务,任务大都是处理:从HDFS到HIVE的数据清洗任务。这类任务的特点是数据来一条处理一条,所以任务大都是没有状态的。
看一个任务
source: 301个文件,每个文件9.6G(压缩后的大小),总共大约240亿条数据
trans:对于每条数据通过正则去获取目标数据。
资源配置:301并发、tm:<10core、10slots、15G>、jm: 10core、8G内存。那将会产生32个container(运行在yarn中)。
任务运行的速度大概在1.2亿/min,运行2小时50多分钟。但是任务会偶发的报hadoop集群的问题,如下报错
connection reset by peer
EOFException: End of File Exception
以至于后面这个任务少了几天数据,任务都跑不下去。但其他类似的任务运行的很稳定,“事出反常必有妖”:
本文尝试从内存、并发的角度分析任务的稳定性及任务运行速度等问题。
02
—
相关理论
1. Task Slots and Resources
通过阅读官网,我们可以了解到:
1. taskmanager是一个jvm进程,一个taskmanager可能执行一个或多个subtask在各自的线程(slot)中。
2. taskmanager的(托管)内存资源会根据slot的数量而分开,但是tm中的 TCP(通过多路复用)连接、心跳消息、共享数据集、数据结构和cpu资源各slot会共享。