栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

大数据架构之Flink调优-资源配置调优

大数据架构之Flink调优-资源配置调优

Flink性能调优的第一步,就是为任务分配合适的资源,在一定范围内,增加资源的分配与性能的提升是成正比的,实现了最优的资源配置后,在此基础上再考虑进行后面论述的性能调优策略。

提交方式主要是yarn-per-job,资源的分配在使用脚本提交Flink任务时进行指定。

标准的Flink任务提交脚本(Generic CLI 模式)

从1.11开始,增加了通用客户端模式,参数使用-D 指定

bin/flink run 
-t yarn-per-job 
-d 
-p 5  指定并行度
-Dyarn.application.queue=test  指定yarn队列
-Djobmanager.memory.process.size=1024mb  指定JM的总进程大小
-Dtaskmanager.memory.process.size=1024mb  指定每个TM的总进程大小
-Dtaskmanager.numberOfTaskSlots=2  指定每个TM的slot数
-c com.atguigu.flink.tuning.UvDemo 
/opt/module/flink-1.13.1/myjar/flink-tuning-1.0-SNAPSHOT.jar

参数列表:https://ci.apache.org/projects/flink/flink-docs-release-1.13/deployment/config.html

1、内存设置 1.1 TaskManager内存模型

Flink1.10对TaskManager内存模型做了较大改动,Flink使用了堆上内存和堆外内存:

**framework Heap&framework Off-Heap:**Flink框架内存使用了堆上内存和堆外内存,不计入slot资源

**Task Heap&Task Off-Heap:**Task执行的内存使用了堆上内存和堆外内存

**NetWork(网络缓冲内存):**网络数据交换所使用的堆外内存,入网络数据交换缓冲区

**Direct Memory(直接内存) :**框架堆外内存、Task堆外内存、网络缓冲内存,都在堆外的直接内存里

**Managed Memory(托管内存):**Flink管理的堆外内存。用于管理排序、哈希表、缓存中间结果及RocksDB State Backend的本地内存

**JVM metaspace&JVM Overhead(JVM特有内存):**JVM本身占用的内存,包括元空间和执行开销

Total Flink Memory=framework Heap+framework Off-Heap+ask Heap+Task Off-Heap+NetWork+Managed Memory

Total Process Memory=Total Flink Memory+JVM metaspace+JVM Overhead

1.2 内存模型详解

**JVM 特定内存:**JVM本身占用的内存,包括元空间和执行开销

    **JVM metaspace:**JVM元空间

    taskmanager.memory.jvm-metaspace.size,默认256mb

    **JVM over-head执行开销:**JVM执行时自身所需要的内容,包括线程堆栈、IO、编译缓存等所使用的内存。

    taskmanager.memory.jvm-overhead.fraction,默认0.1

    taskmanager.memory.jvm-overhead.min,默认192mb

    taskmanager.memory.jvm-overhead.max,默认1gb

    总进程内存*fraction,如果小于配置的min(或大于配置的max)大小,则使用min/max大小

**框架内存:**Flink框架,即TaskManager本身所占用的内存,不计入Slot的资源中。

堆内:taskmanager.memory.framework.heap.size,默认128MB

堆外:taskmanager.memory.framework.off-heap.size,默认128MB

**Task内存:**Task执行用户代码时所使用的内存

堆内:taskmanager.memory.task.heap.size,默认none,由Flink内存扣除掉其他部分的内存得到。

堆外:taskmanager.memory.task.off-heap.size,默认0,表示不使用堆外内存

**网络缓冲内存:**网络数据交换所使用的堆外内存大小,如网络数据交换缓冲区

堆外:taskmanager.memory.network.fraction,默认0.1

​ taskmanager.memory.network.min,默认64mb

​ taskmanager.memory.network.max,默认1gb

Flink内存*fraction,如果小于配置的min(或大于配置的max)大小,则使用min/max大小

**托管内存:**用于RocksDB State Backend 的本地内存和批的排序、哈希表、缓存中间结果。

堆外:taskmanager.memory.managed.fraction,默认0.4

  	 taskmanager.memory.managed.size,默认none

如果size没指定,则等于Flink内存*fraction

2、案例分析

基于Yarn模式,一般参数指定的是总进程内存,taskmanager.memory.process.size,比如指定为4G,每一块内存得到大小如下:

    计算Flink内存

    JVM元空间256m

    JVM执行开销: 4g*0.1=409.6m,在[192m,1g]之间,最终结果409.6m

    Flink内存=4g-256m-409.6m=3430.4m

    网络内存=3430.4m0.1=343.04m,在[64m,1g]之间,最终结果343.04m

    托管内存=3430.4m0.4=1372.16m

    框架内存,堆内和堆外都是128m

    Task堆内内存=3430.4m-128m-128m-343.04m-1372.16m=1459.2m

JVM Options:
	-Xmx1664299798                              #约1875M=Task堆内存+框架内存
	-Xms1664299798                              
	-XX:MaxDirectMemorySize=493921243           #约471M=Task堆外内存+框架堆外内存+网络内存
	-XX:MaxmetaspaceSize=268435456              #256M=JVM元空间

所以进程内存给多大,每一部分内存需不需要调整可以看内存的使用率来调整

3、生产资源配置示例
bin/flink run 
-t yarn-per-job 
-d 
-p 5  指定并行度
-Dyarn.application.queue=test  指定yarn队列
-Djobmanager.memory.process.size=2048mb  JM2~4G足够
-Dtaskmanager.memory.process.size=4096mb  单个TM2~8G足够
-Dtaskmanager.numberOfTaskSlots=2  与容器核数1core:1slot或2core:1slot
-c com.atguigu.flink.tuning.UvDemo 
/opt/module/flink-1.13.1/myjar/flink-tuning-1.0-SNAPSHOT.jar

Flink是实时流处理,关键在于资源情况能不能抗住高峰时期每秒的数据量,通常用QPS/TPS来描述数据情况。

本文是优极限大数据全套大数据教程之Flink调优的一部分文档,如需Flink或大数据齐全套课程资料请私信我或留言。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/741980.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号