簡體   English   中英

Spark應用程序僅使用1個執行程序

[英]Spark application uses only 1 executor

我正在使用以下代碼運行應用程序。 我不明白為什么即使我有3個執行器也只使用1個執行器。當我嘗試增加范圍時,我的工作失敗,導致任務管理器丟失了執行器。 在摘要中,我看到隨機寫入的值,但是隨機讀取的值為0(可能是因為所有數據都在一個節點上,並且不需要隨機讀取就可以完成工作)。

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個。這似乎有所幫助。 現在,我在每個節點上看到隨機讀/寫。

看起來您的代碼最終只為RDD分配了一個分區。 您應該將RDD的分區增加到至少3個,以利用所有3個執行程序。

..可能是因為所有數據都在一個節點上

那應該使您認為您的RDD僅具有一個分區,而不是3個或更多分區,最終將利用所有執行程序。

因此,擴展Hokam的答案,這就是我要做的:

rdd.getNumPartitions

現在,如果是1,則重新分區RDD,如下所示:

rdd = rdd.repartition(3) 

這會將您的RDD分為3個分區。

現在嘗試再次執行代碼。

暫無
暫無

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

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