簡體   English   中英

何時以及如何在執行程序上分配spark分區

[英]When and how does spark distribute partitions on executors

spark如何為執行程序分配分區。

當我使用1個驅動程序和5個執行程序在spark shell中運行以下行時:

> var data = sc.textFile("file") // auto generates 2 partitions
> data.count()                   // materialize partitions on two nodes
> data = data.repartition(10)    // repartition data.count()            
> data.count()                   // 10 partitions still on original 2 nodes

重新分區后,10個分區仍位於原始的兩個節點上(5個中)。 這看起來非常低效,因為在包含分區的每個節點上重復運行5個任務,而不是在節點之間均勻分布。 對於在相同的rdds上重復多次的迭代任務,效率最低是最明顯的。

所以我的問題是,spark如何決定哪個節點具有哪個分區,有沒有辦法可以強制數據移動到其他節點?

我只是在這里提供一個猜測來顯示邏輯(不一定是真正發生的事情)。

讓我們假設您的文件不是很大,即它適合1塊HDFS。 並假設該塊被復制到2個節點。 如果您想在第三個節點上進行處理,那么這意味着您需要復制它。 由於計數是一個相對較快的計算,因此處理任務所需的時間可能相對較小。 Spark可能已經決定最好等待並在本地進行處理,而不是將數據混洗到其他節點(您可以配置此參數)。

暫無
暫無

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

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