flink任务提交、内存、并行度设置

flink任务运行方式

flink任务提交方式有3种 session、per-job、application三种
flink任务运行底座也有三种,Standalone、yarn、k8s

原则上一个flink任务运行的方式由3*3=9种,但是有些是没法搭配的

yarn:包括yarn-session 、yarn-per-job 、yarn-application
standalone:包括 standalone-session standalone-application,不支持per-job
k8s: 包括 k8s-session、k8s-per-job 、k8s-application
!!!!但是 per-job被官网废弃了,用application替代per-job!!!!

在这里插入图片描述
当前主流就是yarn-application

flink历史服务器

flink任务失败或停止之后,flink webui 就看不到了,因此日志就只能到yarn上去看或者taskmanager所在的服务器去看,这样很不方便,因此flink提供了历史服务器,能够看已经退出的flink任务,而且flink不管是standalone还是yarn都支持。

1)创建存储目录
hadoop fs -mkdir -p /logs/flink-job
2)在 flink-config.yaml中添加如下配置
jobmanager.archive.fs.dir: hdfs://hadoop102:8020/logs/flink-job
historyserver.web.address: hadoop102
historyserver.web.port: 8082
historyserver.archive.fs.dir: hdfs://hadoop102:8020/logs/flink-job
historyserver.archive.fs.refresh-interval: 5000
3)启动历史服务器
bin/historyserver.sh start
4)停止历史服务器
bin/historyserver.sh stop
5)在浏览器地址栏输入:http://hadoop102:8082  查看已经停止的 job 的统计信息

flink任务并行度、slot(槽位)、taskmanger数量

假如完成同一件事需要8个人,那么这个任务的并行度就是8,再假如一个人完成这件事需要使用一个工具台,也就是需要8个slot,再假如一个一个车间(taskmanager)只有6个工具台,那这个任务就有问题(有两人闲着)。
并行度:一个任务的并行量
slot(槽位):能够提供完成任务的环境的数量

再接着假如,一个车间(taskmanager)能够提供10个slot(槽位),请问并行度多少为最佳?
答案:当然是10个,每个人都不闲着。

上述任务是发生在一个车间(taskmanager),如果有n个车间(taskmanager),效率又会有n倍(约)提升

那么问题来了,在standalone和k8s底座上起多少个taskmanager是我们手动确定的,在yarn底座上运行的时候,我们没有事先启动好taskmanager,是任务启动之后自己分配的taskmanager,yarn的资源有很多,不可能都用来运行taskmanager,是怎么确定运行taskmanager数量的呢?
答:在1.5版本之后,taskmanager的数量是动态计算,根据slot和并行度进行计算
在这里插入图片描述

翻译::::::::::::::
更新返工作业部署的配置
Flink重做的集群和作业部署组件改善了与资源管理器的集成,实现了动态资源分配。这些更改的一个结果是,在向YARN和Mesos提交应用程序时,您不再需要指定容器的数量。Flink会根据应用程序的并行性自动确定容器的数量。

尽管部署逻辑已完全重新设计,但我们的目标是避免不必要地更改以前的行为以实现平稳过渡。尽管如此,您应该在conf/flink-conf.yaml中更新或了解一些选项。

尚未完全支持分配具有多个插槽的taskmanager。因此,我们建议使用单个插槽配置taskmanager,即设置taskmanager.numberOfTaskSlots: 1
如果发现新部署模式存在任何问题,则始终可以通过配置mode: legacy切换回pre-1.5行为。
请通过发布到邮件列表或打开JIRA问题,向Flink社区报告您注意到的任何问题或可能的改进。

注意: 我们计划在下一版本中删除传统模式。

taskmanager数量计算方式:
TaskManager 数 = Job 的最大并行度 / 每个TaskManager 分配的任务槽数slot,结果向上取整

上述公式告诉了我们一个问题,如果slot小,并行度很大,最后导致的taskmanager就会很多,最终导致yar

### ### 合理设置并行度的总体原则 在 Flink 中,设置合理的并行度是提升作业性能的关键因素之一。并行度通常与集群资源(如 TaskManager 的数量、每个 TaskManager 的 Slot 数量以及 CPU 心数)密切相关。对于三台机器组成的集群,每台机器具有 8 CPU,总共 24 个 CPU 心,理论上可以支持 24 个并行任务[^1]。 #### TaskManager 与 Slot 的关系 每个 TaskManager 是一个 JVM 进程,它通过 Slot 来控制可以接收的 task 数量。每个 Slot 通常对应一个线程,可以处理一个 subtask。为了充分利用 CPU 资源,通常建议将每个 TaskManager 的 Slot 数量设置为与 CPU 心数相同。例如,每台机器有 8 CPU,可以将每个 TaskManager 的 Slot 数量设置为 8。这样三台机器总共可以提供 24 个 Slot,理论上可以支持最大并行度为 24 的任务[^1]。 #### 设置默认并行度 默认并行度可以通过 `StreamExecutionEnvironment` 的 `setParallelism()` 方法进行设置,也可以在提交作业时通过命令行参数指定。例如,在代码中设置默认并行度为 24: ```java StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); env.setParallelism(24); // 设置全局默认并行度为 24 ``` 如果未显式设置,默认并行度可以从 `flink-conf.yaml` 文件中读取。例如: ```yaml parallelism.default: 24 ``` #### 算子级别的并行度 对于某些特定的算子,可以根据其计算复杂度和资源需求单独设置并行度。例如,对于一个计算密集型的 Map 算子,可以将其并行度设置为 8,而 Filter 算子的并行度设置为 4: ```java DataStream<String> input = env.readTextFile("input.txt"); DataStream<String> processedStream = input.map(new MyMapFunction()) .setParallelism(8); // 设置 Map 算子的并行度为 8 DataStream<Integer> resultStream = processedStream.filter(new MyFilterFunction()) .setParallelism(4); // 设置 Filter 算子的并行度为 4 resultStream.print().setParallelism(1); // 设置 Sink 的并行度1 ``` #### Slot 的分配与并行度的关系 Slot 的数量决定了 TaskManager 可以同时处理的任务数。如果每台机器配置了 8 个 Slot,则三台机器总共可以提供 24 个 Slot。为了确保任务能够顺利执行,作业的总并行度不能超过 Slot 的总数。例如,如果总并行度设置为 24,则每个 Slot 可以处理一个任务。如果总并行度超过 24,可能会导致部分任务无法启动,从而影响作业的性能[^2]。 #### 网络缓冲区的优化 Flink 1.5 及以后版本中,网络缓冲区的内存分配可以通过 `taskmanager.memory.off-heap`、`taskmanager.network.memory.fraction` 以及 `.min` 和 `.max` 参数进行配置。这些参数可以优化网络传输的性能,确保数据在传输过程中不会因为缓冲区不足而影响作业的执行效率[^3]。 #### 动态调整并行度 Flink 支持在作业运行时通过 Web UI 或 REST API 动态调整并行度。这种灵活性使得可以根据实际运行时的资源使用情况调整任务并行度。需要注意的是,在调整并行度时,尤其是减少并行度时,需确保状态能够正确合并,以避免数据丢失或不一致。 #### 注意事项 - **资源分配**:确保集群资源能够支持所设置并行度,避免资源不足导致性能下降。 - **状态一致性**:在调整并行度时,尤其是减少并行度时,需确保状态能够正确合并,以避免数据丢失或不一致。 - **性能测试**:在生产环境中使用之前,建议对不同并行度的配置进行性能测试,以找到最优的设置。 ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值