2017-09-15 483 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或減少任務的內存要求。