2016-06-12 6 views
0

私は4コアを持つ8つのエグゼキュータを持っていますが、32にrddパーティションを再分割します。私は再分割されたデータに対して次のアクションを実行すると思います。しかし、いつかは3人のエグゼクティブが参加しているようですが、時には4人以上ではありません。スパーク再分割ですべてのエグゼキュータにデータが分割されない

すべてのエグゼキュータでデータを分割するにはどうすればよいですか?

rdd.repartition(32).foreachPartition {一部=> updateMem(一部) }最後の部分はmemsqlにinser /更新を呼び出します。

+0

K/Vのペアのように、フォーマットの任意の並べ替えでRDDですか?あなたはキーの数が少ないかもしれないので、再分割は同じエグゼキュータ上に同じキーを置きます。あるいは、あなたのキーが32から数のハッシュ値を持つように信じられないほど不運になるかもしれません。 –

+0

RDDはケースクラスのタイプです。ケースクラス内のデータは非常にユニークで、ほぼ95%です。 – subhankar

+0

ここにはいくつのマシンがありますか?これらのマシンには、ほぼ同等のデータが存在しますか?データ地域がここでその部分を果たしているのかどうかは疑問です –

答えて

0

以下の回答は、AWS-EMRを使用している場合にのみ有効です。 私は4コアずつ8人のエグゼクティブがいると言っても間違いないと思います。ここにその説明があります。さて、私はm3.2xlargeマシン(EMR)を使用しています。

  • 各マシンが30ギガバイトのメモリ(合計)8 vcores
  • が含まれていますが、それ自身の使用のためにいくつかのメモリを必要とするマシンとして執行 のために全30 GBのメモリを使用することができます方法はありません。
  • (OS などのように)マシンが使用するのに十分なメモリを残して、システムに障害が発生しないようにします。
  • は私が6つの執行(3ギガバイトそれぞれ、6 * 3ギガバイト= 18ギガバイト)を持つことができ、あなたは20ギガバイトのメモリでは20ギガバイトのメモリ
  • で を残しているあなたはマシンの10ギガバイトのメモリを残したい、と言う、 は(4つのキュータを持つことができますそれぞれ5GB、4 * 5GB = 20GB)
  • したがって、実行者ごとにメモリ上に の必要性に応じてエグゼキュータの数を決めることができます。

それぞれのマシンで使用可能なメモリの合計と、これら2つのパラメータのspark-conf(/etc/spark/conf/spark-defaults.conf)を調べて、それに応じて調整してください。

  • spark.executor.memory
  • spark.executor.cores
関連する問題