2016-05-03 8 views
0

AWS EC2でSpark 1.6.1を使用して、60GBのメモリと32個のコアを持つ1台のマシンを使用しています。私のデータは、多数のレコードを含んでいSPARK:1つの強力なマシン対。複数の小さなマシン

、私は次のような単純なスキーマを持つデータフレームを処理したいと思い、それが10億(10億)レコードがあります。私はいくつかの高価なチェーンをしています

userID: Long 
phrase: String 
timestamp: Timestamp 

をなどGROUPBY、ソート、フィルタ...のような操作

これらの操作が大シャッフルにリードしているが書き込み、読み込み、データフレームをキャッシュするか、それは多くを助けていない再パーティション。

私は、マシンがメモリに完全なデータをロードすることが可能であることを知って、なぜこれが起こっている理解するのに困難を発見しています。

私はスパークUI上のエグゼキュータ]タブをクリックすると、私は次を参照してください。

enter image description here

これは、私は、単一の強力なマシンを使用するときに参照するには、通常の図であり、あるいは私は私のスパークを設定して逃しましたクラスタ?

EC2上でスパークの最適な構成であるかについての推奨事項はありますか?

おかげ

+0

あなたの質問はスパークツェッペリンのノートよりも。あなたが質問を間違って読んだら、その編集を元に戻すことは大歓迎です。 –

+0

私は@ cricket_007に同意します、ありがとう – Rami

答えて

3

それは恩着せ聞こえるがメモリに収まるデータの負荷がほとんど巨大なデータセットではありません場合、私は申し訳ありません。私がこれを言っている理由は、Sparkは小さなデータの負荷に対して構築されておらず、大規模なデータセットや分散環境を処理するためにスパークに組み込まれたオーバーヘッドを支払っているからです。例えばグループは、通常、データをリモートマシンに送る必要があるため、フェーズをシャッフルしてデータを整理し、シャッフル後にパーティションを処理するリモートマシンが読み込むことを意味します。あなたの場合、すべてのことが1台のマシン上で起こっていることがわかります。

すべてが単一のマシンに収まるので、あなたは代替ソリューションをチェックすることもできますが - 、あなたが(メモリストレージが対20Gであるマシン上で、あなたが持っているすべてのメモリを利用していないようだと述べた

ため thisを読みます60Gを機械に取り付けます)。あなたがローカルモードでスパークを実行しているようだから、ドライバーのメモリをより高いものに設定する( --driver-memory 56Gまたはそのようなものも) local[32]を必ず使用してください。