Flink插槽已删除异常

时间:2019-01-08 15:37:01

标签: apache-flink

我遇到以下异常

org.apache.flink.util.FlinkException: The assigned slot container_1546939492951_0001_01_003659_0 was removed.
at org.apache.flink.runtime.resourcemanager.slotmanager.SlotManager.removeSlot(SlotManager.java:789)
at org.apache.flink.runtime.resourcemanager.slotmanager.SlotManager.removeSlots(SlotManager.java:759)
at org.apache.flink.runtime.resourcemanager.slotmanager.SlotManager.internalUnregisterTaskManager(SlotManager.java:951)
at org.apache.flink.runtime.resourcemanager.slotmanager.SlotManager.unregisterTaskManager(SlotManager.java:372)
at org.apache.flink.runtime.resourcemanager.ResourceManager.closeTaskManagerConnection(ResourceManager.java:823)
at org.apache.flink.yarn.YarnResourceManager.lambda$onContainersCompleted$0(YarnResourceManager.java:346)
at org.apache.flink.runtime.rpc.akka.AkkaRpcActor.handleRunAsync(AkkaRpcActor.java:332)
at org.apache.flink.runtime.rpc.akka.AkkaRpcActor.handleRpcMessage(AkkaRpcActor.java:158)
at org.apache.flink.runtime.rpc.akka.FencedAkkaRpcActor.handleRpcMessage(FencedAkkaRpcActor.java:70)
at org.apache.flink.runtime.rpc.akka.AkkaRpcActor.onReceive(AkkaRpcActor.java:142)
at org.apache.flink.runtime.rpc.akka.FencedAkkaRpcActor.onReceive(FencedAkkaRpcActor.java:40)
at akka.actor.UntypedActor$$anonfun$receive$1.applyOrElse(UntypedActor.scala:165)
at akka.actor.Actor$class.aroundReceive(Actor.scala:502)
at akka.actor.UntypedActor.aroundReceive(UntypedActor.scala:95)
at akka.actor.ActorCell.receiveMessage(ActorCell.scala:526)
at akka.actor.ActorCell.invoke(ActorCell.scala:495)
at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:257)
at akka.dispatch.Mailbox.run(Mailbox.scala:224)
at akka.dispatch.Mailbox.exec(Mailbox.scala:234)
at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)

在运行涉及合并两个非常大的数据集的批处理过程时。

这是我在概述中看到的内容。失败发生在没有任何输入的任务管理器上。奇怪的是,尽管前面已经进行了重新平衡,但是上一组(分区->平面地图->地图)却没有向该任务管理器发送任何内容。

正在EMR上运行它。我看到有一个 slot.idle.timeout ,会起作用吗?如果是的话,如何为该工作指定它?可以在命令行上完成吗?

enter image description here

5 个答案:

答案 0 :(得分:2)

这可能是超时问题,但通常当我遇到这种情况时,是因为发生了故障(例如,YARN杀死了容器,因为它超出了pmem或vmem限制)。我建议您仔细检查JobManager和所有TaskManager日志文件。

答案 1 :(得分:0)

您可以在Java代码中添加以下行。

env.getCheckpointConfig().enableExternalizedCheckpoints(ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION);

然后您的工作将自动开始取消。

答案 2 :(得分:0)

我有一个类似的问题,事实证明我们Flink作业中的日志过多。我猜这导致任务管理器超时。删除或减少日志量可以解决问题

答案 3 :(得分:0)

在Kubernetes上运行Flink时,我遇到了类似的问题,结果是TaskManager被OOMKilled并重新启动。如果还在Kubernetes上运行Flink,则可以检查TaskManager窗格的状态:

kubectl describe pods <pod>

如果您看到该容器之前已被清空,则可能是原因:

    Last State:     Terminated
      Reason:       OOMKilled
      Exit Code:    137

答案 4 :(得分:0)

如果您有这样的日志,此问题并不总是由织布和被纱线杀死而引起的:“关闭TaskExecutor连接container_e86_1590402668190_3503_01_000015,因为:容器在丢失节点上释放”,并且它早于错误日志。我猜这是由Nodemanager关闭导致的。大约10分钟后,flink ResourceManager无法与NodeManager通信,ResourceManager将开始删除插槽,然后重新启动(如果您有重新启动策略)。