2015-10-07 157 views
5

火花流中的批次是RDD的批次。假設批次的3個RDD。RDD分區火花Streaming

另外spark文檔說,一個塊每隔200ms被reciever創建,分區被分配給塊。

在1秒內說我有一批3個RDD,如果考慮200毫秒,則有5個塊。

那麼RDD如何在工作節點之間進行分區,是將要分區的單個RDD還是完整批次。

我可能採取了錯誤的方式。請指導我

回答

13

一個流式批次對應一個RDD。該RDD將有n個分區,其中n =批間隔/塊間隔。 假設您擁有標準的200ms塊間隔和2秒的批處理間隔,那麼您將擁有10個分區。 模塊由接收器創建,每個接收器分配在主機中。 因此,這10個分區位於單個節點中,並被複制到第二個節點。

當提交RDD進行處理時,運行該任務的主機將從該主機讀取數據。在同一節點上執行的任務將具有「NODE_LOCAL」位置,而在其他節點上執行的任務將具有「任意」位置,並且需要更長的時間。

因此,爲了改進並行處理,建議分配多個接收器並使用聯合來創建單個DStream以供進一步處理。這樣數據將被多個節點並行消耗和處理。

+0

嘿謝謝@maasg – dexter

+0

謝謝@maasg。只是爲了確認,如果我們有多個接收器,那麼我們有多個DStream,每個DStream對應一個RDD。所以,當我們結合多個Dstream時,我們得到一個DStream。該DStream包含多個RDD或單個RDD? –

+0

@ DineshSachdev108 Bu定義union()將「返回一個新的DStream,其中包含源DStream和其他流中元素的聯合」 這意味着結果也將是一個dStream。根據定義,「DStream表示爲RDD序列 這意味着結果將包含多個RDD,具體取決於您的接收器接收多少個批次。 – bigdatamann

0

這是仍然適用於更新版本的火花?

我讀了an article,其中火花上有多個接收器的場景已經過時,而新的直接kafka api(createDirectStream)將爲您處理幾乎所有的事情。