2016-07-30 42 views
0

使用Spark,如果我已經將我的累加器定義爲關聯和可縮減的,爲什麼每個工作人員都直接將它們發送給驅動程序,而不是隨着我的實際工作逐漸減少?這對我來說似乎有點愚蠢。爲什麼累加器直接發送給驅動程序?

+2

你能否詳細說明一下?我想你對累加器的工作原理有錯誤的想法。或者你問任務結果? – zero323

+0

作爲'broadcast'變量,'accumulators'在幾種情況下非常有用。 –

回答

1

Spark中的每個任務都維護着自己的累加器,並在特定任務完成時將其值返回給驅動程序。

由於在Spark中的累加器大多是一個診斷和監視共享任務之間的累加器會使這些幾乎無用。更何況,特定任務完成之後的工人失敗會導致數據丟失,並使累加器比現在更不可靠。

此外,這種機制與標準RDD reduce幾乎相同,其中任務結果不斷髮送給驅動程序並在本地合併。

+0

沒錯,但我們假設我正在使用累加器來獲取有關彈性搜索索引的額外信息,特別是查看了哪些文檔。並且可以說在這個指數中有很多重複的,〜40%。在這種情況下,讓每個工人向蓄能器發送關於他們的分區的信息,以使司機爆炸。如果蓄電池的減少與工作人員減少分區的方式相同,那麼在「最終」蓄電池發送給駕駛員時,就不會有問題。 –

+0

這裏沒有區別。任務完成後,累加器和任務結果都會發送。這就是說,使用越來越多的收集累加器,尤其是實現應用程序邏輯並不是最好的想法。 – zero323

+0

等待...從一個任務的結果都發送到驅動程序,然後減少驅動程序?我不認爲這是真的,我相信裁員是在工人之間逐步完成的,直到最終減少到司機身上爲止。 –

相關問題