2016-08-28 9 views
1

私はYarnクラスターで1000ジョブをスケジュールしようとしています。私は毎日1000以上のジョブを同時に実行し、リソースを管理するために糸を使いたい。 hdfsから別のカテゴリの1000のファイルのために私はpythonからsparkの送信コマンドを作成して実行しようとしています。しかし、私はドライバメモリを使用して送信するスパークのためにメモリエラーから抜け出しています。スパークヤーンで1000ジョブが実行中

スパークヤーンクラスターで1000ジョブをスケジュールするにはどうすればよいですか?私は、火花とともにオージー・ジョブ・スケジューリング・フレームワークを試してみましたが、HDPで期待通りに動作しませんでした。

+0

私たちが使用したコマンドは、以下に示すpythonスクリプトから生成します。 /usr/hdp/2.4.2.0-258/spark/bin/spark-submit --class xxx.xxx.xxx - マスター糸クラスター - 合計 - 実行プログラムコア6 - 実行ファイル - メモリ2G --driver-メモリ1G - キューのデフォルトxxx-1.0.0.jar velmurugan

答えて

0

実際には、HDFSの1000個のファイルから1000個のジョブを読み込む必要はありません。 1つのRDDにすべてをロードしようとすることもできます(APIはパス内の複数のファイルとワイルドカードの読み取りをサポートしています)。 1つのRDD内のすべてのファイルを読み込んだら、十分なメモリやコアなどが割り当てられているかどうかを確認し、シャッフルなどのコストのかかる操作を避けるビジネスロジックの検討に集中する必要があります。

しかし、ファイルごとに1つずつ1000ジョブを生成する必要があると主張する場合は、--executor-memory--executor-cores(並列の場合はnum-executors)を参照する必要があります。これらは、メモリ/ CPU占有面積を最適化するのに役立ちます。

また興味があるのは、スパーク送信中(ドライバメモリを使用)にOOMを取得するということです。 collectや大きなセットのtakeを実行しないと、エグゼキュータからのデータがドライバに送られない限り、ドライバは実際にはメモリをまったく使用しません。また、yarn-clientモードでジョブを発射していますか?もう一つの勘違いは、spark sparkジョブを生成するボックスが、最初の場所でジョブを生成するだけの十分なメモリを持っているかどうかをチェックすることです。

いくつかのログをここに貼り付けることができれば簡単になります。

+0

複数のファイルを1つのRDDで読むことがわかっていますが、ファイルサイズが大きいため、アプリケーション内で処理する代わりにリソースをスケジュールする必要があります。複数のジョブを並行してトリガーするとシステムパフォーマンスが向上し、エグゼキューターや将来のタスクをアプリケーションレベルから実行したくない場合もあります。 – velmurugan

+0

以下に示すpythonスクリプトからgenerateコマンドを使用しました。 /usr/hdp/2.4.2.0-258/spark/bin/spark-submit --class xxx.xxx.xxx - マスター糸クラスター - 合計 - 実行プログラムコア6 - 実行ファイル - メモリ2G --driver-メモリ1G - デフォルトのキューxxx-1.0.0.jar velmurugan

+0

あなたはドライバでOOM例外を取得していますか?エグゼキュータでそれを取得した場合は、より多くのメモリを割り当てるか、パーティションサイズを確認する必要があります。 –

関連する問題