2017-05-16 6 views
1

私はスパーク1.6.1を使用します。「WARN TaskSetManager:ステージ4には非常に大きなサイズのタスクが含まれていますか?」

私のsparkアプリケーションは、s3に格納されている10000を超える寄木細工ファイルを読み込みます。

val df = sqlContext.read.option("mergeSchema", "true").parquet(myPaths: _*) 

myPathsは10000個の寄木細工のファイルのパスが含まれArray[String]です。各パスは次のようなものですs3n://bucketname/blahblah.parquet

スパークは以下のようなメッセージを表示します。

WARN TaskSetManager:ステージ4には、非常に大きなサイズのタスク (108KB)が含まれています。推奨されるタスクの最大サイズは100KBです。

スパークが実行して、とにかく仕事を終了しましたが、これはスパーク処理の仕事を遅くすることができると思います。

誰かがこの問題についての良い提案をしていますか?

+0

あなたのコードを共有してください、現在、私たちはより少ない情報で助けてください –

+0

こんにちは!わかりません。小さなデータセットであっても、最小のパーティションは、しばしば〜32Moの100KBよりはるかに大きくなります。だからどのように再パーティション化が助けになるのでしょうか? – Boris

+0

https://github.com/jaceklaskowski/mastering-apache-spark-book/blob/master/spark-TaskSetManager.adocを参照してください。 – Boris

答えて

0

問題は、データセットが複数のパーティションに均等に分散されていないため、一部のパーティションで他のパーティションよりもデータが多くなることです。デフォルトのスパークSQLによって

は(Other Configuration Optionsを参照)spark.sql.shuffle.partitionsプロパティを使用して200個のパーティションを前提としています

spark.sql.shuffle.partitions(デフォルト:200)のためにシャッフルデータを使用するパーティションの数を設定します結合または集約あなたは寄木細工のファイルを読んで(とアクションを実行する前に)した後

ソリューションは、​​3210またはrepartitionあなたのデータセットにあります。

explainまたはWeb UIを使用して実行計画を確認してください。


警告があなたをより効果的な結果が使用されているフェッチので(TaskSetManagerを参照してください)あなたのクエリを最適化するためのヒントを提供します。

(ドライバで実行される)警告TaskSchedulerは、IndirectTaskResultthe codeのように)の効果の低いアプローチを使用して結果値を取得します。

関連する問題