2017-10-28 106 views
0

我想了解Spark中的分區。 我在Windows 10本地模式下運行spark。 我的筆記本電腦有2個物理內核和4個邏輯內核。Spark:理解分區 - 內核

1 /術語:對我來說,spark =核心線程。所以Spark中的核心與物理核心不同,對吧? Spark核心與任務相關聯,對嗎? 如果是這樣,因爲你需要一個分區線程,如果我的sparksql數據框有4個分區,它需要4個線程嗎?

2 /如果我有4個邏輯內核,是否意味着我只能在筆記本電腦上同時運行4個併發線程?那麼Spark中的4個?

3 /設置分區數量:如何選擇我的數據幀的分區數量,以便進一步轉換和操作儘可能快地運行? - 因爲我的筆記本電腦有4個邏輯核心,它應該有4個分區嗎? - 與物理內核或邏輯內核相關的分區數量是多少? - 在火花文檔中,寫道每個CPU需要2-3個任務。既然我有兩個物理核心,那麼分區的nb應該等於4還是6?

(我知道的分區,這個數字不會對本地模式太大的影響,但是這僅僅是明白的)

回答

0
  1. 世界上沒有這樣的東西「火花核心」。如果你指的是--executor-cores等選項,那麼是的,它指的是每個執行程序將同時運行多少個任務。

  2. 您可以將併發任務的數量設置爲任何您想要的數量,但超過您可能不會給予的優勢和邏輯核心的數量。

  3. 要使用的分區數是情境性的。在不知道數據或你正在做的轉換的情況下,很難給出一個數字。典型的建議是在整個內核的倍數以下使用,例如,如果您有16個內核,那麼47,79,127和類似的數字可能會略低於16的倍數。原因是你想確保所有核心都在工作(儘可能少的時間你有資源閒置,等待其他人完成)。但是你留出一點額外的空間以允許投機性執行(如果緩慢運行,火花可能決定兩次運行相同的任務,以查看第二次嘗試是否會更快)。

儘管如此,挑選數字還是有點嘗試和誤差,請利用spark工作服務器來監視您的任務運行情況。很少有記錄的任務很少,每個都意味着你應該增加分區的數量,另一方面,每個只有幾條記錄的分區也很糟糕,你應該儘量減少這些分區。

+0

nit:我確實使用「spark core」來指代Spark與RDD的主/核心模塊。這對我來說是Spark核心。 –