2016-11-22 12 views
1

縮約データセットで複雑なクエリを有効にするためにspark-jobserverを設定しました。Spark JobServer、リリースのメモリ設定

ジョブサーバは、2つの操作を実行:メインリモートデータベースと

  • Syncを、それが、サーバーのテーブルのいくつかのダンプを行い削減し、データを集約し、寄木細工のファイルとして結果を保存し、それをキャッシュメモリ内のSQLテーブルとして。この操作は毎日行われます。
  • クエリは、同期操作が完了すると、集約されたデータセットでSQL複合クエリを実行し、結果をCSVファイルとしてエクスポートできます。すべてのユーザーは一度に1つのクエリしか実行できず、完了を待ちます。

最大のテーブル(縮小の前後に、いくつかの結合も含まれます)には、少なくとも30個のフィールドを持つほぼ30Mの行があります。

実際、私は仕事用サーバー専用の32GBのRAMを搭載したdevマシンに取り組んでいます。すべてがスムーズに動作します。問題は、本番環境では、PredictionIOサーバーと同じ量のRAMを共有していることです。

メモリリークやスパークのクラッシュを避けるためにメモリ構成を決定する方法をお伺いしています。

私はこれが初めてで、あらゆる参考文献や提案が受け入れられます。

を使用すると、32グラムのRAMを搭載したサーバーを持っている場合など、 を取るあなた

答えて

1

をありがとうございました。

spark.executor.memory = 32g 

は注意してください:

そうな最初の衝動は--num-執行6 --executor-コア15 --executorを使用することです は、次のパラメータを設定しますメモリ63G。ただし、これは間違ったアプローチです。

63GB +実行ファイルのメモリオーバーヘッドは、NodeManagersの63GBの容量 に収まらないためです。アプリケーションマスタは、ノードのうちの1つを に配置します。つまり、そのノードに15コアのエクセキュータ を入れる余地がありません。エグゼキュータごとに15コアを使用すると、HDFS I/O のスループットが低下する可能性があります。

より良いオプションは、--num-executors 17 --executor-core 5 --executor-memory 19Gを使用することです。どうして?

この設定では、AMを持つ を除き、すべてのノードに3つのエグゼキュータが作成されます。これには2つのエグゼキュータがあります。 --executor-memoryは (ノードあたり63/3エグゼキュータ)= 21 21 * 0.07 = 1.47として導かれました。 21から1.47 〜19

あなたが詳細をお知りになりたい場合は、これはここで説明されています http://blog.cloudera.com/blog/2015/03/how-to-tune-your-apache-spark-jobs-part-2/

関連する問題