我正在使用Flink v1.4.0。我正在使用DataSet API(尽管这不重要)。我正在12核VM上进行一些重型转换。我正在为一个Flink job使用2个内核,其中我将一些数据存储到Flink Queryable State中,并使用剩余的10个内核运行另一个Flink作业。当我以10个内核运行第二个作业时,似乎出现以下错误:java.io.IOException: Insufficient number of network buffers: required 10, but only 9 available. The total number of network buffers is currently set to 4096 of 32768 bytes each. You can increase this number by setting the configuration keys 'taskmanager.network.memory.fraction', 'taskmanager.network.memory.min', and 'taskmanager.network.memory.max'. at org.apache.flink.runtime.io.network.buffer.NetworkBufferPool.createBufferPool(NetworkBufferPool.java:257) at org.apache.flink.runtime.io.network.NetworkEnvironment.registerTask(NetworkEnvironment.java:199) at org.apache.flink.runtime.taskmanager.Task.run(Task.java:618) at java.lang.Thread.run(Thread.java:745)
(转载)java - Flink IOException:网络缓冲区数量不足
如果我使用8核来运行它,它就可以通过。是什么原因造成的,为什么我不能使用其他2个-> 8 + 2 = 10个内核?最佳答案引用Apache Flink常见问题解答: 如果您以很高的并行度运行Flink,则可能需要增加网络缓冲区的数量。 默认情况下,Flink占用JVM堆大小的10%作为网络缓冲区,最小为64MB,最大为1GB。您可以通过taskmanager.network.memory.fraction,taskmanager.network.memory.min和taskmanager.network.memory.max调整所有这些值。 有关详细信息,请参阅《配置参考》。有一个dedicated section in the docs for how to configure the network buffers。总之,可以通过设置./conf/flink-conf.yaml参数来配置taskmanager.network.numberOfBuffers文件中的网络缓冲区数。该参数应设置为#slots-per-TM^2 * #TMs * 4,其中#slots per TM是每个TaskManager的插槽数,而#TMs是任务管理器的总数。例如,要支持一个由20个8插槽计算机组成的集群,则应使用大约5000个网络缓冲区以实现最佳吞吐量。默认情况下,每个网络缓冲区的大小为32 KiBytes。在上面的示例中,系统将因此为网络缓冲区分配大约300 MiBytes。请参考文档以获取详细信息。
原地址:https://www.coder.work/article/3585277
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...