簡體   English   中英

Spark:理解分區 - 核心

[英]Spark: understanding partitioning - cores

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

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

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

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

(我知道分區數對本地模式不會有太大影響,但這只是為了理解)

  1. 沒有“火花芯”這樣的東西。 如果您指的是--executor-cores類的選項,那么是的,這是指每個執行程序將同時運行多少個任務。

  2. 您可以將並發任務的數量設置為您想要的任何數量,但超過您擁有的邏輯核心數量可能不會提供優勢。

  3. 要使用的分區數視情況而定。 在不知道您正在執行的數據或轉換的情況下,很難給出一個數字。 典型的建議是使用略低於總核心數的倍數。例如,如果您有 16 個核心,則可能 47、79、127 以及略低於 16 倍數的類似數字都可以使用。 這樣做的原因是您希望確保所有內核都在工作(盡可能少的時間讓您有資源空閑,等待其他人完成)。 但是你留下了一些額外的東西以允許推測執行(如果它運行緩慢,spark可能會決定運行相同的任務兩次,看看它是否會在第二次嘗試時運行得更快)。

不過,選擇數字需要反復試驗,利用 spark 作業服務器來監控任務的運行方式。 有多個記錄的任務很少意味着您可能應該增加分區的數量,另一方面,許多每個只有幾條記錄的分區也很糟糕,在這些情況下您應該嘗試減少分區。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM