2017-08-29 22 views
2

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

用于运行管道命令:虽然我认为这是没有关系的,对象要被序列化是serialisable,并曾都隐式和显式编码器,但是这并未

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

由于Flink耗尽内存缓冲区,所以引发了EOFException。 Flink预计EOFException作为通知开始将数据写入磁盘。

此问题是由Beam的SerializableCoderEOFException换成CoderException引起的。因此,Flink不会收到预期的EOFException并失败。

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

+0

已向Beam团队报告此问题,并可能在未来版本中提供解决方案。要跟踪这方面的进展,请订阅https://issues.apache.org/jira/browse/BEAM-2831 –

相关问题