2016-07-03 6 views
0

Amazon EMRのクラスタで動作するApache Sparkを使用してDecisionTreeClassifierを「トレーニング」しようとしています。約50名のエグゼキュータが追加されており、その機能はSparkSQLを使用してPostgresデータベースにクエリを作成し、DataFrameに保存することで作成されることがわかります。 データセットがそれほど大きくなくても、DesceedTree fitメソッドは何時間もかかります(10.000dbのエントリで、各行は数百バイトになります)。

これには1つのタスクしかないことがわかりましたので、これが非常に遅いという理由があると思います。

このタスクが1つのタスクで実行されている理由はどこですか? データを取得する方法ですか? これは少しばかり残念ですが、データを取得するコードが関連しているのか、それともアルゴリズムのパラメータなのかわかりません(オンラインでは見つかりませんでしたが)チューニング? 私はどんな方向にも感謝します!

ありがとうございます。スパークデシジョンツリーのフィットが1つのタスクで実行される

+0

クラスタ構成について聞かれますか?あなたのアプリケーションをどのように提出しますか?どんなタイプのインスタンスを使用しますか? – eliasah

+0

はい... 'sbt assembly'(これはスカラプロジェクトです)を使ってfat jarを作成し、' spark-submit 'を使って実行します。私はr3.2xlargeサイズの10個のコアインスタンス、executor-memory 15G、driver-memory 40G、executorごとに2つのコアと 'num-executor 1600'を使用して糸クラスタモードで実行します(これはあまり良くありませんが、エグゼキュータの最大数によって上書きされるもの) –

+1

EMRにはYARNに1つの問題があります。ノードごとに1つのエグゼキュータを起動します。私は正直であることをまだ調べていませんでした。しかし、AWS EMRのサポートチームは、私がそれらに連絡したときに私に言ったのです。私はそれが実際にリードかもしれないと思う。 20 r3.xlarge 10 r3.2x以上を起動する方が良いようです...クラスタで起こっていることをよりよく理解するためには、gangliaをプラグインする必要があります。 – eliasah

答えて

1

スパークはデータの局所性に依存します。すべてのデータが1か所に配置されているようです。したがって、sparkは単一のパーティションを使用してそれを処理します。再分割を適用したり、ロード時に使用したいパーティションの数を指定することができます。また、意思決定ツリーApiを調べ、具体的にパーティション数を設定できるかどうかを確認します。 基本的に、パーティションはあなたの並列処理のレベルです。

+0

あなたの答えをありがとう。私の調査から、これが最も可能性の高い原因だと思う...私は今検証するためにチェックしている! –

+0

私はもう少しテストを実行します...良いことは、ジョブが複数のタスクで実行されていることがわかりました。しかし、それは実行が決定木のフィットの最後のタスクに詰まっているとしてもまだかなり遅いです...どのように私はボトルネックを理解することができますどのようなアイデア?私はGangliaもインストールしましたが、特定のコアは全くスロットルをしていないようです:/あなたの答えを受け入れる場合は、あなたの助けをありがとう! –

+0

ゆっくりとはどういう意味ですか?それは固まっているか遅いですか?いくつかのデータサイズ、パーティション、時間を共有できますか? –

関連する問題