在flink上运行beam管道期间与内存段相关的eofexception

63lcw9qa  于 2021-06-25  发布在  Flink
关注(0)|答案(1)|浏览(370)

我正在测试集群上的flink上运行apachebeam管道。它一直以失败告终 EOFExceptionorg.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行为(它是否应该溢出到磁盘?)。似乎不是一个可以扩展的解决方案。

ymdaylpp

ymdaylpp1#

这个 EOFException 因为flink耗尽了内存缓冲区而引发。Flink希望 EOFException 作为开始向磁盘写入数据的通知。
此问题是由梁的 SerializableCoder Package EOFException 在一个 CoderException . 因此,flink没有捕捉到预期的结果 EOFException 失败了。
这个问题可以通过使用一个自定义编码器来解决,该编码器不 Package EOFException 但它是向前的。

相关问题