我正在测试集群上的flink上运行apachebeam管道。它一直以失败告终 EOFException
在 org.apache.flink.runtime.io.disk.SimpleCollectingOutputView:79
在通过序列化对对象进行编码的过程中。我还不能在本地重现这个错误。你可以在这里找到整个工作日志。某些值已替换为假数据。
用于运行管道的命令:
bin/flink run \
-m yarn-cluster \
--yarncontainer 1 \
--yarnslots 4 \
--yarnjobManagerMemory 2000 \
--yarntaskManagerMemory 2000 \
--yarnname "EBI" \
pipeline.jar \
--runner=FlinkRunner \
--zookeeperQuorum=hdp-master-001.fake.org:2181
虽然我认为这不相关,但要序列化的对象是可序列化的,并且具有隐式和显式编码器,但这并不影响情况。
是什么导致了这种情况?我能做些什么来解决它?
目前,将管理器的堆内存增加到4到8gib之间似乎可以防止异常。仍然不确定这是否应该是正常的flink行为(它是否应该溢出到磁盘?)。似乎不是一个可以扩展的解决方案。
1条答案
按热度按时间ymdaylpp1#
这个
EOFException
因为flink耗尽了内存缓冲区而引发。Flink希望EOFException
作为开始向磁盘写入数据的通知。此问题是由梁的
SerializableCoder
PackageEOFException
在一个CoderException
. 因此,flink没有捕捉到预期的结果EOFException
失败了。这个问题可以通过使用一个自定义编码器来解决,该编码器不 Package
EOFException
但它是向前的。