2

我使用以下代碼運行應用程序。我不明白爲什麼只有1個執行者在使用,即使我有3個。當我嘗試增加範圍時,我的工作失敗,導致任務管理器失去執行者。 在總結中,我看到了shuffle寫入的值,但shuffle讀取值爲0(可能導致所有數據都在一個節點上,並且不需要執行任何shuffle讀取操作)。Spark應用程序只使用1個執行程序

val rdd: RDD[(Int, Int)] = sc.parallelize((1 to 10000000).map(k => (k -> 1)).toSeq) 
val rdd2= rdd.sortByKeyWithPartition(partitioner = partitioner) 
val sorted = rdd2.map((_._1)) 
val count_sorted = sorted.collect() 

編輯:我增加了執行器和驅動程序的內存和內核。我也將執行者的數量從4改爲了1。這似乎有所幫助。我現在看到在每個節點上洗牌讀/寫。

+0

您是否在集羣模式下獨立運行?你是在本地運行還是在某個集羣上運行? – Metropolis

+0

我正在集羣模式下運行。 – user1745995

回答

1

..maybe導致所有數據是一個節點

這應該使你認爲你的RDD只有一個分區,而不是3,或者更多上,最終將利用所有執行者。

因此,在Hokam的回答延伸,這裏是我會做什麼:

rdd.getNumPartitions 

現在,如果是1,然後重新分區您的RDD,像這樣:

rdd = rdd.repartition(3) 

將分區您的RDD分成3個分區。

嘗試再次執行您的代碼。

2

看起來你的代碼最終只有一個RDD分區。你應該把RDD的分區增加到至少3,以利用所有3個執行者。

+1

美好的預感,+1以及跟隨你的回答。 :) – gsamaras