在Flink上运行Beam管道期间与内存段相关的EOFException

时间:2017-08-29 09:06:19

标签: apache-flink apache-beam

我试图在我们的测试集群上运行Flink上的Apache Beam管道。在通过序列化对对象进行编码期间,EOFExceptionorg.apache.flink.runtime.io.disk.SimpleCollectingOutputView:79失败了。我还没有能够在本地重现错误。你可以找到the entire job log here。一些值已被假数据替换。

用于运行管道的命令:

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 个答案:

答案 0 :(得分:1)

抛出EOFException因为Flink内存不足。 Flink希望EOFException作为通知开始将数据写入磁盘。

这个问题是由于梁SerializableCoderEOFException包裹在CoderException中引起的。因此,Flink没有捕获预期的EOFException并且失败。

问题可以通过使用自定义编码器来解决,该编码器不会包裹EOFException但会转发它。