2015-04-23 43 views
5

如果我將RDD劃分爲60,並且在20臺機器上共有20個內核,即20個單核機器,則任務數爲60(等於分區數)。爲什麼這對於每個核心具有一個分區並且有20個任務是有利的?分區如何映射到Spark中的任務?

此外,我運行了一個實驗,將分區數設置爲2,檢查UI顯示任何時候都運行2個任務;然而,令我感到驚訝的是它在完成任務時切換實例,例如, node1和node2執行前兩個任務,然後node6和node8執行下一個2個任務等。我認爲通過將分區數量設置爲小於羣集中的核心(和實例),那麼程序將使用最小值所需實例的數量。誰能解釋這種行爲?

回答

2

對於第一個問題:您可能希望擁有比完全必要的更細化的任務,以便在同一時間將更少的內存加載到內存中。此外,它可以幫助提高容錯能力,因爲在出​​現故障時需要重做的工作量減少。不過它是一個參數。一般來說,答案取決於工作負載的類型(IO界限,內存界限,CPU界限)。

至於第二個,我認爲版本1.3有一些代碼來動態地請求資源。我不確定哪個版本是休息時間,但舊版本只是要求您配置驅動程序的確切資源。至於分區如何從一個節點移動到另一個節點,那麼AFAIK會從節點中選擇數據,該節點在HDFS上具有該數據的本地副本。由於hdfs有多個副本(默認情況下爲每個數據塊3個副本),因此有多個選項可以運行任何給定的片段)。

+0

謝謝。但是,我不把數據放入HDFS,而是從S3導入。我的印象是這不會將數據放入HDFS,但我可能是錯的? – monster

+0

呃,那要看。 Spark在HDFS之上被廣泛用作Hadoop替代品,但與更多的東西兼容。所以問題又回到你身上了,你有什麼數據?但說實話,我沒有用過S3。如果同樣的考慮適用,我也不會感到驚訝。沒有多少方法可以創建分佈式冗餘;-) –