2

次のコードでアプリケーションを実行しています。なぜ私は3つ持っているにもかかわらず1つのエグゼキュータが使用されている理解していません。私は範囲を増やそうとすると、私の仕事はタスクマネージャがexecutorを失う原因で失敗します。 要約では、シャッフル書き込みの値がわかりますが、シャッフル読み取りは0です(すべてのデータが1つのノードにあり、ジョブを完了するためにシャッフル読み取りが発生しない可能性があります)。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

すべてのデータは、あなたのRDDは、最終的に全てを利用することになる唯一のパーティションの代わりに、3、または以上を持っていることを考えさせるべきであるノード

にある原因..maybeエグゼクティブ。

ので、Hokamの答えに拡張、ここで私はどうなるのかだ。それが1であれば、このように、あなたのRDDを再パーティション今

rdd.getNumPartitions 

:あなたのRDDを分割します

rdd = rdd.repartition(3) 

3つのパーティションに分けられます。

もう一度コードを実行してみてください。

2

あなたのコードはRDDのパーティションが1つしかないようです。 3人のエグゼキュータをすべて利用するには、RDDのパーティションを3以上に増やす必要があります。

+1

素敵なハンチング、+1、あなたからの答えが私のものです。 :) – gsamaras

関連する問題