[英]How to handle Spark Executors when number of partitions do not match no of Executors?
[英]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.