2016-06-09 66 views
1

我想了解,當從spark-submit提交作業時,我已經用4個節點引發部署的系統如何在火花中分發工作。如果有大量的數據需要操作,我想明確地知道分割的任務有多少個階段,以及有多少個執行者爲這項工作運行。想要了解這是如何決定每個階段。如何在火花中分發任務

+0

您的應用程序將在Spark上運行的很多方式都可以在spark提交的命令行中進行配置,其中包括執行程序,節點等的數量:http://spark.apache.org/docs/latest/configuration。 HTML –

回答

1

很難完全回答這個問題,因爲存在很多不確定因素。

階段數量僅取決於描述的工作流程,其中包括不同類型的映射,縮小,連接等。如果您瞭解它,則基本上可以從代碼中正確讀取它。但最重要的是,這可以幫助您編寫更多的高性能算法,因爲衆所周知,必須避免洗牌。例如,當您進行連接時,它需要洗牌 - 這是一個邊界階段。這很簡單,你必須打印rdd.toDebugString(),然後看看縮進(看here),因爲縮進是一個洗牌。

但是,執行者的數量完全不同,因爲它取決於分區數量。這就像爲2個分區只需要2執行人,但對於40倍的 - 所有4個,因爲你只有4.但另外的分區數量可能取決於幾個屬性,你可以在提供火花提交:

  • spark.default.parallelism參數或
  • 數據源使用(FE對HDFS和卡桑德拉是不同的)

這將會是一個很好的保持在所有集羣中核心的忙,但沒有更多的(意味着單個進程只有一個分區),因爲每個分區的處理需要一定的開銷。另一方面,如果數據傾斜,那麼某些內核需要更多時間來處理更大的分區,在這種情況下,它有助於將數據分割到更多分區,以便所有內核都處於大致相同的時間。這有助於同時平衡羣集和吞吐量。