2014-09-02 63 views
-1

我需要知道Spark如何允許工作節點之間的通信? 分配給工作人員的所有任務都來自主程序,但是可以將工作人員的輸出發送給其他工人,因此它可以處理其上的進一步步驟。是Apache Spark中允許的多階段工作者嗎?

我正在研究一種情況,其中存在多種類型要完成的任務,假設說任務A,B,C。 要啓動任務C,應完成任務A和B,但A和B可以彼此獨立完成。所以,我需要幾個工作人員來完成任務A,很少需要B,並且他們必須調用任務C的工人,而不涉及主人。請向我提供有關如何實現這一目標的見解。 紗線中有這種功能嗎?

+0

這會給你帶來什麼好處?如果您分階段完成任務,那麼爲了ABC或BAC,不會像交錯A,B和C那樣花費大約相同時間? – DNA 2014-09-02 15:54:58

+0

實際上,它就像流媒體,假設第一個請求是A1,B1,C1,第二個A2,B2和C2。因此,如果任務A1和B1完成,則第二階段的工人可以執行C1,而第一階段的工人可以繼續執行A2和B2。 – Maulik 2014-09-03 04:26:07

+0

我認爲它可以在某些情況下有意義。然而@DNA與他的論點有一點關係。最後,並沒有太多的Spark分配潛力被使用。 – 2014-09-10 15:27:23

回答

0

我只是拋出一個可能的解決方案,雖然我沒有測試它自己,我不確定它的成功可能性。

什麼在我腦海中被利用的動作,如計數創造一種與ç任務之間的屏障。這將迫使Spark在開始階段C(我對此聲明不太確定)之前完成所有先前的步驟 - 在所有節點中。

然後,您可以使用廣播功能來緩存變量並使其可用於所有執行程序,而無需與主站進行通信。

0

我想給這個問題的可能答案一槍。在我看來,這可以通過兩種方式完成:

1.)如果任務A和B是獨立的並需要在C之前完成,爲什麼不先在RDD上執行任務A和B,然後使用結果這些任務(或新的rdd)並使用其他操作執行C.

2.)互聯網溝通是spark(AFAIK)中的一個問題。只有火花通信方式是廣播和累加器變量。但是他們都對駕駛員溝通有用,而不是工人 - 工人溝通。一種可能的解決方法是將結果或變量從worker保存到HDFS等公用存儲並從另一個worker訪問它。對於例如在PySpark中,存在使用Popep,Pydoop,Hadoopy等從工作者機器到HDFS的高效溝通方式。

相關問題