Flink Configuration简介

本文详细介绍了Apache Flink的配置选项,涵盖了从常见配置到高级设置,包括内存管理和性能调试,特别是针对遇到内存问题时的调试参数。还提及了Flink与HDFS的集成,以及JobManager和TaskManager的分布式协调。同时,文章讨论了Flink在YARN上的部署和高可用模式,但忽略了Kerberos、部分优化器和资源管理器的细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文主要翻译自官方文档中Configuration的部分:Flink1.1.3 configuration。有些配置结合工作中的相关经验。

Common Options

env.java.home : java安装路径,如果没有指定则默认使用系统的$JAVA_HOME环境变量。建议设置此值,因为之前我曾经在standalone模式中启动flink集群,报找不到JAVA_HOME的错误。config.sh中(Please specify JAVA_HOME. Either in Flink config ./conf/flink-conf.yaml or as system-wide JAVA_HOME.)

env.java.opts : 定制JVM选项,在Flink启动脚本中执行。需要单独执行JobManager和TaskManager的选项。

env.java.opts.jobmanager : 执行jobManager的JVM选项。在Yarn Client环境下此参数无效。

env.java.opts.taskmanager : 执行taskManager的JVM选项。在Yarn Client环境下此参数无效。

jobmanager.rpc.address : Jobmanager的IP地址,即master地址。默认是localhost,此参数在HA环境下或者Yarn下无效,仅在local和无HA的standalone集群中有效。

jobmanager.rpc.port : JobMamanger的端口,默认是6123。

jobmanager.heap.mb : JobManager的堆大小(单位是MB)。当长时间运行operator非常多的程序时,需要增加此值。具体设置多少只能通过测试不断调整。

taskmanager.heap.mb : 每一个TaskManager的堆大小(单位是MB),由于每个taskmanager要运行operator的各种函数(Map、Reduce、CoGroup等,包含sorting、hashing、caching),因此这个值应该尽可能的大。如果集群仅仅跑Flink的程序,建议此值等于机器的内存大小减去12G,剩余的12GB用于操作系统。如果是Yarn模式,这个值通过指定tm参数来分配给container,同样要减去操作系统可以容忍的大小(12GB)。

taskmanager.numberOfTaskSlots : 每个TaskManager的并行度。一个slot对应一个core,默认值是1.一个并行度对应一个线程。总的内存大小要且分给不同的线程使用。

parallelism.default : 每个operator的默认并行度。默认是1.如果程序中对operator设置了setParallelism,或者提交程序时指定了-p参数,则会覆盖此参数。如果只有一个Job运行时,此值可以设置为taskManager的数量 * 每个taskManager的slots数量。即NumTaskManagers  * NumSlotsPerTaskManager 。

fs.default-scheme : 设置默认的文件系统模式。默认值是file:///即本地文件系统根目录。如果指定了hdfs://localhost:9000/,则程序中指定的文件/user/USERNAME/in.txt,即指向了hdfs://localhost:9000/user/USERNAME/in.txt。这个值仅仅当没有其他schema被指定时生效。一般hadoop中core-site.xml中都会配置fs.default.name。

fs.hdfs.hadoopconf : HDFS的配置路径。例如:/home/flink/hadoop/hadoop-2.6.0/etc/hadoop。如果配置了这个值,用户程序中就可以简写hdfs路径如:hdfs:///path/to/files。而不用写成:hdfs://address:port/path/to/files这种格式。配置此参数后,Flink就可以找到此路径下的core-site.xml和hdfs-site.xml了。建议配置此参数。

Advanced Options

Managed Memory

对于批处理程序,Flink使用了自我的内存管理,默认使用70%的taskmanager.heap.mb的内存。这样Flink批处理程序不会出现OOM问题,因为Flink自己知道有多少内存可以使用,当内存不够时,就使用磁盘空间。而且这样有些operation可以直接访问数据,
而不需要序列化数据到java对象。Flink自我管理的内存可以加速程序的执行。如果需要的话,自我管理的内存也可以在JVM堆外被分配,这也有助于提升性能。
taskmanager.memory.size :相对于jobmanager.heap.mb,使用多少内存用于内存管理器进行内存的自我管理。如果没有指定,则默认值是-1,代表参考参数taskmanager.memory.fraction。设置了自我内存管理,Flink在批处理中就可以在堆内或堆外进行排序、hash、cache等操作。

taskmanager.memory.fraction : 当taskmanager.memory.size没有设置时(或-1),此参数才生效。意思是使用taskmanager.heap.mb的百分比用于自我内存管理。默认值是0.7,代表使用70%的taskmanager的内存。剩余的30%用于UDF的堆以及用于taskmanager间通信数据的内存。

taskmanager.memory.off-heap : 默认是false。如果设置为true,则taskmanager在JVM堆外分配内存。这对于大段内存的使用很有效。

taskmanager.memory
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值