【问题标题】:EOFException related to memory segments during run of Beam pipeline on Flink在 Flink 上运行 Beam 管道期间与内存段相关的 EOFException
【发布时间】:2017-08-29 09:06:18
【问题描述】:

我正在尝试在我们的测试集群上的 Flink 上运行 Apache Beam 管道。在通过序列化对对象进行编码期间,org.apache.flink.runtime.io.disk.SimpleCollectingOutputView:79 处的 EOFException 一直失败。我还无法在本地重现该错误。你可以找到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 行为(不应该溢出到磁盘吗?)。似乎不是一个可以扩展的解决方案。

【问题讨论】:

    标签: apache-flink apache-beam


    【解决方案1】:

    EOFException 被抛出是因为 Flink 耗尽了内存缓冲区。 Flink 期望 EOFException 作为开始向磁盘写入数据的通知。

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

    问题可以通过使用不包装EOFException而是转发它的自定义编码器来解决。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-10
    • 2020-02-29
    • 2015-09-02
    相关资源
    最近更新 更多