【性能调优】local模式下flink处理离线任务能力分析

文章目录

  • 一. flink的内存管理
    • 1.Jobmanager的内存模型
    • 2.TaskManager的内存模型
      • 2.1. 模型说明
      • 2.2. 通讯、数据传输方面
      • 2.3. 框架、任务堆外内存
      • 2.4. 托管内存
    • 3.任务分析
  • 二. 单个节点的带宽瓶颈
    • 1. 带宽相关理论
    • 2. 使用speedtest-cli 测试带宽
    • 3. 任务分析
    • 3. 其他工具使用介绍

本文相关讨论

  1. flink内存对任务性能的影响:通过了解内存模型,了解这些模型都负责那些工作,比如用户代码使用堆,数据通讯使用直接内存等,以便能够根据任务特点针对性调整任务内存;
  2. 并发与带宽之间的关系,local模式下怎么根据带宽,设置最佳线程数;
  3. 内存监控相关命令。

 

任务说明:
使用local模式运行flink sql任务,任务为:从hdfs解析数据到hdfs中的离线任务,其中数据量有4亿,文件数有13个,初始运行参数为:堆内存设为3g、并发设为13,其中运行命令如下:

  java -XX:NativeMemoryTracking=summary -Xms3096m -Xmx3096m    -cp $FLINK_HOME/lib/chunjun-core.jar:$FLINKX_HOME/bin/:$FLINK_HOME/lib/*:$HADOOP_CLASSPATH \
  $CLASS_NAME -job hdfs-hdfs.sql -mode local -jobType sql \
  -flinkConfDir $FLINK_HOME/conf \
  -flinkLibDir $FLINK_HOME/lib \
  -hadoopConfDir $HADOOP_CONF_DIR \
  -confProp "{ \"taskmanager.numberOfTaskSlots\":13}" 

本例子使用chunjun提交flink任务。

 

一. flink的内存管理

了解flink内存模型,可以让我们针对任务特点,合理设置内存,在不造成内存浪费的同时,分析出任务性能瓶颈。

1.Jobmanager的内存模型

组成部分配置参数描述
JVM 堆内存jobmanager.memory.heap.sizeJobManager 的 JVM 堆内存。框架内存、特殊批处理source、cp、akka通讯(java api实现)。
堆外内存jobmanager.memory.off-heap.sizeJobManager 的_堆外内存(直接内存或本地内存)_。
JVM Metaspacejobmanager.memory.jvm-metaspace.sizeFlink JVM 进程的 Metaspace。
JVM 开销jobmanager.memory.jvm-overhead.min
jobmanager.memory.jvm-overhead.max
jobmanager.memory.jvm-overhead.fraction
用于其他 JVM 开销的本地内存,例如栈空间、垃圾回收空间等。该内存部分为基于进程总内存的受限的等比内存部分。

Flink 需要多少 JVM 堆内存,很大程度上取决于运行的作业数量、作业的结构及上述用户代码的需求。
jobManager的内存管理相关调优不用关注太多,因为jobmanager的任务相对固定。

 

2.TaskManager的内存模型

2.1. 模型说明

在这里插入图片描述

内存分类解释
一. 堆内存
1. 框架堆内存启动TM所需内存
2. Task堆内存存放、执行Flink算子及用户代码
二.堆外内存
3. 框架堆外内存*用于 Flink 框架的堆外内存(直接内存或本地内存)
4. 任务堆外内存*用于 Flink 应用的算子及用户代码的堆外内存(直接内存或本地内存)(比如用户代码使用netty进行数据传输)。
5. 网络内存*用户任务之间数据传输的直接内存
6. 托管内存用于存放Flink的中间结果和RocksDB State Backend 的本地内存
7. JVM Metaspace和Overhead内存用于JVM存储类元数据;JVM的例如栈空间、垃圾回收空间等开销

*代表直接内存。

 

2.2. 通讯、数据传输方面

TaskManager和JobManager之间的通讯

主要依赖JVM堆内存,网络缓冲器内存在数据传输方面也起到了一定的作用。具体来说:

  1. TaskManager和JobManager之间的所有通信(例如任务提交,状态更新等)都是通过Akka消息进行的。
  2. 在数据传输过程中,TaskManager使用的网络缓冲器内存也在一定程度上参与了和JobManager的通信。比如说,TaskManager需要向JobManager发送一些统计信息,或者在写入或读取远程状态数据时,都需要使用网络缓冲器内存。

 
TaskManager之间的通信
TaskManager之间的通信主要使用的是网络缓冲器内存(Network Memory)。当两个TaskManager之间需要交换数据时,会使用网络缓冲器内存来存储待发送的数据以及接收到的数据。

Flink的网络通信基于Netty,Netty默认使用堆外(off-heap)内存进行数据的读写操作。在数据发送方,Flink会先将数据序列化后存放到网络缓冲器中,然后通过网络发送到接收方。在接收方,Flink会从网络缓冲器中读取数据,然后进行反序列化,恢复成原始的数据格式。 网络缓冲器内存的大小会影响Flink job的性能,如果设置得过小可能会导致数据传输的瓶颈,过大则可能会浪费内存资源

 

2.3. 框架、任务堆外内存

  1. 框架堆外内存:主要用于网络缓冲和一些需要大数据计算的操作,如排序或哈希操作。Flink使用堆外内存以存储中间结果,防止大数据操作时耗尽所有的Java堆内存。
  2. 任务堆外内存:主要用于用户代码和操作,以及用户代码依赖的库和插件的内存需求。它使得用户代码和框架操作能在任务中并行运行而不会互相干扰。
    在实际操作中,你可以根据具体工作负载的需求来调整这三部分内存的配置。

 

2.4. 托管内存

托管内存(Managed Memory)主要用于数据处理和中间结果的存储,被用于以下几个主要的用途:

  1. 状态后端:如果你使用RockDB这样的内存稀疏状态后端,那么托管内存可以用作写缓冲区或者读缓冲区,用来优化读写的性能。
  2. 网络缓冲:在数据发送和接收过程中,Flink使用托管内存作为网络缓冲区。
  3. 批处理算子:在进行批处理的计算时,如排序和哈希操作,Flink会使用到托管内存。

 
状态后端存储

  • Flink 任务处理中的状态(例如键控状态)通常需要持久化,以确保容错性和恢复能力。
    托管内存是Flink特地为状态后端和网络缓冲等用途分配的内存段。 托管内存被用于存储状态后端的数据,这样可以避免将大量状态数据存储在 JVM 堆内存中,从而提高任务的稳定性和性能。
  • 当你启用RockDB状态后端时,Flink将把数据写入磁盘,而不仅仅是维持在内存中,这样可以支持更大的状态大小和更长的保留周期。

 

3.任务分析

任务为local模式,任务为从hdfs读到hdfs写,hdfs的源数据有13个文件,总共有4亿的数据,每条数据98byte。下面从flink内存模型的角度分析下任务对各内存的使用情况

local模式代表,在机器上启动一个minicluster,这包含一个jobmanager、一个taskmanager。

  1. 任务启动时会使用框架堆内存(Framework Heap Memory)创建启动jobmanager和taskmanager。
  2. 因为只有一个taskmanager,也就是不会涉及到taskmanager之间的数据传输,所以不会用到网络缓存(Network Memory)。
  3. 从用户代码层面看,这里使用的是flink sql ,其中hdfs-connector用于读写数据,这算是用户代码,而相关读写实现使用的是hdfs
    client相关api实现,api中没有涉及到使用直接内存的方法,所以读写数据的操作是在堆内存中(.任务堆内存(Task Heap Memory))。
  4. 此离线任务来一条数据处理一条,即任务无状态、或中间结果,也就是说任务不需要托管内存(Managed memory)

所以总体分析下来,local模式下我们需要调控的是堆内存,因为数据传输主要存在于用户代码中。

 

二. 单个节点的带宽瓶颈

根据拿到的带宽,与任务消费数据速度,我们大概可以测试出任务的并发度。

1. 带宽相关理论

网络带宽是指在一个固定的时间内(1秒),能通过的最大位数据,是个峰值数据, 单位是Mbps

 

上行带宽/下行带宽

带宽的上行和下行分别指的是网络传输中数据的上传和下载方向。

  • 对于服务器来说对外提供服务用的是自己的上行带宽和用户的下行带宽, 而用户上传东西则用的自己的上行带宽和服务器的下行带宽
  • 对于用户来说访问服务器用的是用户的下行带宽和服务器的上行带宽, 而上传文件则用的用户的上行带宽和服务器的下行带宽

 

流量单位/存储单位

下载速度的单位为KB/s,而带宽所使用的计量单位为Kb/s,两者相差8倍:8 bit = 1 B 一字节 (1Byte)

带宽速度计算:

1M带宽下载速度125KB/s;
2M带宽下载速度125KB/s*2;
10M带宽下载速度125KB/s*10=1.25M/s;
20M带宽下载速度125KB/s*20=2.5M/s;
100M带宽下载速度125KB/s*100=12.5M/s

 

实际带宽速率的损失

理论上,2Mbps带宽,宽带理论速率是 256KB/s。实际速率大约为103–200kB/s。4M,即4Mb/s宽带理论速率是 512KB/s 实际速率大约为200—440kB/s。
其原因是受用户计算机性能、网络设备质量、资源使用情况、网络高峰期、网站服务能力、线路衰耗、信号衰减等多因素的影响而造成的)。

 

吞吐量
吞吐量是指在没有帧丢失的情况下,设备能够接收并转发的最大数据速率实际带宽,单位Mbps, 通常用来描述一个系统的性能。

与带宽的关系:吞吐量即在规定时间、空间及数据在网络中所走的路径(网络路径)的前提下,下载文件时实际获得的带宽值。由于多方面的原因,实际上吞吐量往往比传输介质所标称的最大带宽小得多

例如: 带宽为10Mbps的链路连接的一对节点可能只达到2Mbps的吞吐量。这样就意味着,一个主机上的应用能够以2Mbps的速度向另外的一个主机发送数据。

 

2. 使用speedtest-cli 测试带宽


# 安装
$ sudo yum  install -y  speedtest-cli 

# 测试
$ speedtest-cli
Retrieving speedtest.net configuration...
Testing from China Unicom (111.206.170.119)...
Retrieving speedtest.net server list...
Selecting best server based on ping...
Hosted by China Telecom TianJin-5G (TianJin) [123.83 km]: 65.213 ms
Testing download speed................................................................................
Download: 143.51 Mbit/s
Testing upload speed......................................................................................................
Upload: 456.74 Mbit/s


 

3. 任务分析

Speedtest-cli测量出的是你的网络连接的最大理论带宽。实际上,你的实际网络带宽可能因为很多因素(例如网络拥堵,服务器性能,距离测试服务器的远近,你本地网络的设置等)而低于这个理论值。对于代码中处理数据,还要考虑代码处理数据的效率。

实际在测试过程中,有如下瓶颈:

  • 使用3G内存启动flink任务,对于每条数据为98Byte,单线程每次处理4万条数据,13个线程(数据源共有13个文件)同时消费,花费20s,大概算下来每秒处理2.43MB/s数据。
  • 当增大堆内存时效率并未提升,也就是到了带宽瓶颈。且当我将内存降低到2G时,消费速度并未明显减小。

 

也就是说每秒处理2.43MB/s数据是机器带宽瓶颈,目前最佳内存为2G,并发减小时处理时间会比例减小,当并发减小到4时,处理速度达到快,3秒处理完,但总体算下来小于每秒处理2.43MB/s数据,也就是说并发根据文件数设置可以达到最佳性能。

 

3. 其他工具使用介绍

测试任务占用内存: jps + top

# 1. 找到指定进程
jps -l
2900 com.dtstack.chunjun.Main
3645 sun.tools.jps.Jps


# 2. 查看一个进程占用内存
top -p <pid>
按e会转换内存为byte->m->g等单位,较为人性化的展示。

在这里插入图片描述

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/330659.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

生物识别规划人脸识别芯片方案的概述和特点

方案概述 人脸识别方案采用高性能AI芯片&#xff0c;支持RGB和IR摄像头&#xff0c; 支持LCD显示屏。 方案特点 • 普通RGB摄像头和IR摄像头同时参与3D成像RGB摄像头 支持屏幕回显 • 双目摄像头得到特征点视差计算人脸相 对3D深度信息&#xff0c; 同时利用可见光和红外 光谱信…

达梦数据库入门语法:从基础到进阶的指南

目录 博客前言&#xff1a; 达梦数据库语法介绍 一.创建表空间 1.图形化创建 2.语法创建 ​编辑​编辑 3.修改表空间参数 图形化修改 ​编辑​编辑 语法修改 4.设置加密算法、密码 二.创建用户 1.图形化 2.sql执行 ​编辑 3.授予权限 授予用户 DBA 权限 授予用户…

运算符和表达式

表达式 表达式是由运算符、运算量和标点符号组成的有效序列&#xff0c;其目的是用来说明一个计算过程&#xff0c;表达式可以独立成句&#xff0c;一般形式为&#xff1a; 表达式&#xff1b; 运算符 运算符可以按照功能分为&#xff1a;算术运算符、赋值运算符、关系运算…

【 文本到上下文 #4】NLP 与 ML

一、说明 欢迎回到我们的 NLP 博客系列&#xff01;当我们进入第四部分时&#xff0c;焦点转移到机器学习 &#xff08;ML&#xff09; 和自然语言处理 &#xff08;NLP&#xff09; 之间的动态相互作用上。在本章中&#xff0c;我们将深入探讨 ML 和 NLP 的迷人协同作用&#…

PLSQL 把多个字段转为json格式

PLSQL 把多个字段转为json格式 sql Select cc.bm, cc.xm, json_arrayagg(cc.hb) jgFrom (Select aa.bm, aa.xm, json_object(aa.ksbh, aa.wjmc) hbFrom (Select 001 bm, 老六 xm, 0001 ksbh, 文具盒 wjmcFrom dual tUnion AllSelect 001 bm, 老六 xm, 0002 ksbh, 毛笔 wjmcFr…

LabVIEW精确测量产品中按键力和行程

项目背景 传统的按键测试方法涉及手工操作&#xff0c;导致不一致和效率低下。在汽车行业中&#xff0c;带有实体按键的控制面板非常常见&#xff0c;确保一致的按键质量至关重要。制造商经常在这些组件的大规模、准确测试中遇到困难。显然&#xff0c;需要一个更自动化、精确…

Modbus协议学习第三篇之协议通信规则

导语 本篇博客将深入介绍Modbus协议的一些内容&#xff0c;主要包括通讯方式和通讯模型的介绍 Modbus通讯方式 Modbus协议是单主机、多从机的通信协议&#xff0c;即同一时间&#xff0c;总线上只能有一个主设备&#xff0c;但可以有一个或者多个从设备&#xff08;最多好像是2…

基于springboot+vue的校园管理系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目背景…

贵阳贵安推进“数字活市”战略成效明显

作者&#xff1a;黄玉叶 近年来&#xff0c;贵阳贵安将数字经济确立为高质量发展的主路径之一&#xff0c;把推进“数字活市”作为实施主战略、实现主定位&#xff0c;特别是建设“数字经济发展创新区核心区”的重要抓手&#xff0c;从改革、发展、民生三个维度纵深推进“数字活…

未来的NAS:连接您的数字生活

未来的NAS&#xff1a;连接您的数字生活 引言 网络附加存储&#xff08;Network Attached Storage&#xff0c;简称NAS&#xff09;是一种通过网络连接的存储设备&#xff0c;用于集中存储和共享数据。传统的NAS设备通常包含一个或多个硬盘驱动器&#xff0c;可以通过局域网连…

数据结构和算法的部分例题(力扣)

1.数组 1.1 合并一个数组的两个有序区间 public class MargTwo {public static void main(String[] args) {int[] arr1{1,5,6,2,4,10,11};int[] arr2new int[arr1.length];marg2(arr1,0,2,3,6,arr2);}private static void marg2(int[]arr1,int iStar,int iEnd,int jStar,int j…

【机组】通用寄存器单元实验的解密与实战

​&#x1f308;个人主页&#xff1a;Sarapines Programmer&#x1f525; 系列专栏&#xff1a;《机组 | 模块单元实验》⏰诗赋清音&#xff1a;云生高巅梦远游&#xff0c; 星光点缀碧海愁。 山川深邃情难晤&#xff0c; 剑气凌云志自修。 ​ 目录 &#x1f33a;一、 实验目…

广和通AI解决方案“智”赋室外机器人迈向新天地!

大模型趋势下&#xff0c;行业机器人将具备更完善的交互与自主能力&#xff0c;逐步迈向AI 2.0时代&#xff0c;成为人工智能技术全面爆发的重要基础。随着行业智能化&#xff0c;更多机器人应用将从“室内”走向“室外”&#xff0c;承担更多高风险、高智能工作。复杂的室外环…

阿里云国外服务器价格表

阿里云国外服务器优惠活动「全球云服务器精选特惠」&#xff0c;国外服务器租用价格24元一个月起&#xff0c;免备案适合搭建网站&#xff0c;部署独立站等业务场景&#xff0c;阿里云服务器网aliyunfuwuqi.com分享阿里云国外服务器优惠活动&#xff1a; 全球云服务器精选特惠…

Linux网络引导自动安装centos7

目录 一、部署PXE远程安装服务 1. 系统装机的三种引导方式 2. pxe概述 3. 实现过程 4. 搭建过程中服务介绍 4.1 TFTP服务 4.2 vsftp&#xff1a;安装系统镜像文件获取方式 4.3 syslinux 4.4 DHCP服务 5. 操作过程 二、实现Kickstart无人值守安装 1. 安装Kickstart图…

Codeforce s Round 920 (Div. 3) G题 旋转矩阵,斜缀和,平移

Problem - G - Codeforces 目录 题意&#xff1a; 思路&#xff1a; 总思路&#xff1a; 旋转矩阵&#xff1a; 前缀和预处理&#xff1a; 平移的处理&#xff0c;尤其是越界的处理&#xff1a; 核心代码&#xff1a; 题意&#xff1a; 给你个n*m的矩阵&#xff0c;里…

【论文解读】用于代码处理的语言模型综述

目录 1.简要介绍 2.代码处理的语言模型的评估 3.通用语言模型 4.用于代码处理的特定语言模型 5.语言模型的代码特性 6.软件开发中的LLM 7.结论与挑战 ​​​​​​​1.简要介绍 在这项工作中&#xff0c;论文系统地回顾了在代码处理方面的最新进展&#xff0c;包括50个模…

Elasticsearch各种高级文档操作2

本文来记录下Elasticsearch各种文档操作 文章目录 初始化文档数据 初始化文档数据 在进行各种文档操作之前&#xff0c;我们先进行初始化文档数据的工作

【MySQL】权限控制

DCL-权限控制 查询权限 show grants for 用户名主机名;授予权限 grant 权限列表 on 数据库名.表名 to 用户名主机名;grant all on test.* to user%; %是通配符&#xff0c;表示任意主机。撤销权限 revoke 权限列表 on 数据库名.表名 from 用户名主机名;revoke all on test.*…

10- OpenCV:基本阈值操作(Threshold)

目录 1、图像阈值 2、阈值类型 3、代码演示 1、图像阈值 &#xff08;1&#xff09;图像阈值&#xff08;threshold&#xff09;含义&#xff1a;是将图像中的像素值划分为不同类别的一种处理方法。通过设定一个特定的阈值&#xff0c;将像素值与阈值进行比较&#xff0c;根…