2017-09-15 60 views
0

我在三个节点的集群上执行Apache Flink程序。 其中一个作为jobmanager和taskmanager也是如此。另外两个只是taskmanager。Flink集群上的taskmanager死亡

当我开始我的程序(我做它jobmanager)我得到以下错误(节目的无实际执行的一分钟后):

java.lang.Exception: TaskManager was lost/killed: c4211322e77548b791c70d466c138a49 @ giordano-2-2-100-1 (dataPort=37904) 
at org.apache.flink.runtime.instance.SimpleSlot.releaseSlot(SimpleSlot.java:217) 
at org.apache.flink.runtime.instance.SlotSharingGroupAssignment.releaseSharedSlot(SlotSharingGroupAssignment.java:533) 
at org.apache.flink.runtime.instance.SharedSlot.releaseSlot(SharedSlot.java:192) 
at org.apache.flink.runtime.instance.Instance.markDead(Instance.java:167) 
at org.apache.flink.runtime.instance.InstanceManager.unregisterTaskManager(InstanceManager.java:212) 
at org.apache.flink.runtime.jobmanager.JobManager.org$apache$flink$runtime$jobmanager$JobManager$$handleTaskManagerTerminated(JobManager.scala:1228) 
at org.apache.flink.runtime.jobmanager.JobManager$$anonfun$handleMessage$1.applyOrElse(JobManager.scala:1131) 
at scala.runtime.AbstractPartialFunction.apply(AbstractPartialFunction.scala:36) 
at org.apache.flink.runtime.LeaderSessionMessageFilter$$anonfun$receive$1.applyOrElse(LeaderSessionMessageFilter.scala:49) 
at scala.runtime.AbstractPartialFunction.apply(AbstractPartialFunction.scala:36) 
at org.apache.flink.runtime.LogMessages$$anon$1.apply(LogMessages.scala:33) 
at org.apache.flink.runtime.LogMessages$$anon$1.apply(LogMessages.scala:28) 
at scala.PartialFunction$class.applyOrElse(PartialFunction.scala:123) 
at org.apache.flink.runtime.LogMessages$$anon$1.applyOrElse(LogMessages.scala:28) 
at akka.actor.Actor$class.aroundReceive(Actor.scala:467) 
at org.apache.flink.runtime.jobmanager.JobManager.aroundReceive(JobManager.scala:125) 
at akka.actor.ActorCell.receiveMessage(ActorCell.scala:516) 
at akka.actor.dungeon.DeathWatch$class.receivedTerminated(DeathWatch.scala:44) 
at akka.actor.ActorCell.receivedTerminated(ActorCell.scala:369) 
at akka.actor.ActorCell.autoReceiveMessage(ActorCell.scala:501) 
at akka.actor.ActorCell.invoke(ActorCell.scala:486) 
at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:238) 
at akka.dispatch.Mailbox.run(Mailbox.scala:220) 
at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:397) 
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) 

佐丹奴-2-2- 100-1是作业任务管理器的地址。 我将任务槽的数量设置为等于机器核心数(2)和堆内存,以相应于meminfo显示的可用内存。

在执行过程中(出现错误之前),我观察了cpu使用情况,并注意到工作任务管理器的两个核心正在工作(每个至少50%,有时甚至100%),而其他两个节点(任务管理器)完全免费,CPU使用率约为0%。

我设置了jobmanager正确RPC地址,并正确填写奴文件放在:

giordano-2-2-100-1 
giordano-2-2-100-2 
giordano-2-2-100-3 

而且我用ping从主节点,以验证其他节点访问,并且它的确定,并从telnet任务管理员来验证工作管理员是否可以到达,在这种情况下,一切正常。

老实说,我对我在做什么错没有更多的想法...

此外,我想在我的笔记本(双核)与设定的相同配置的单节点集群执行程序真正的集群和同一个罐子。在这种情况下,一切正常,所以我悄悄确定问题出在工作经理身上。

P.S.在堆栈溢出时,我发现了同样问题的回复:TaskManager loss/killed但我不明白如何设置不同的垃圾回收器。

+0

什么是你开始工作的并行性?是否可以运行一个只在运行'JobManager'的机器上执行的CPU密集型作业?然后,这可能会阻止正确处理心跳。请尝试在运行JM的机器上启动TM吗?共享JM和TM的日志也可以帮助解决您的问题。 –

+0

我评论了并行性,因为我有一些运营商在2和一些在1运行。 我已经执行了更多的实验。我注意到,直到某个负载集群能够正确执行任务(但只使用一个节点),而如果我添加更多负载(例如在其他数据上复制操作员),则会显示以前的错误。 我设置了G1垃圾回收器,没有结果。 继续... –

+0

我按照你的提示配置了1JM和2个TM并执行了一个相对较轻的程序。它被正确执行,但即使在这种情况下,也只是在一个节点上(n.3)。每个核心都占用92%以上的CPU使用,内存占80-85%。我附上了日志(stackOV_1JM_2TM_OK):https://www.dropbox.com/s/w6uvgmhdg2bom49/stackOV_1JM_2TM_OK.zip?dl=0 –

回答

0

当任务管理器内存不足,以及GC花费太多时间尝试释放某些内存时,会发生此问题。

尝试使用更多RAM或减少任务的内存要求。