web-dev-qa-db-ja.com

Pyspark:TaskMemoryManager:ページの割り当てに失敗しました:エラー分析のヘルプが必要です

スタンドアロンクラスターモードでsparkジョブを実行しているときに、これらのエラーに直面しています。

私のspark仕事の目的:

  • いくつかのgroupbyを実行し、
  • count
  • そしてjoinsで最後のdfを取得し、次にdf.toPandas().to_csv()を取得します。

入力データセットは524Mbです。私が得るエラー:

警告TaskMemoryManager:ページ(33554432バイト)の割り当てに失敗しました。再試行してください。

上記を複数回繰り返した後、再び新しいエラー

  1. 警告NettyRpcEnv:無視された失敗:Java.util.concurrent.TimeoutException:10秒以内に応答を受信できません

  2. org.Apache.spark.rpc.RpcTimeoutException:[10秒]後に先物がタイムアウトしました。このタイムアウトはspark.executor.heartbeatIntervalによって制御されます

  3. org.Apache.spark.rpc.RpcTimeoutで。 org $ Apache $ spark $ rpc $ RpcTimeout $$ createRpcTimeoutException

  4. ExecutorLostFailure(実行中のタスクの1つが原因でエグゼキュータドライバが終了しました)理由:エグゼキュータのハートビートが158295ミリ秒後にタイムアウトしました

  5. ( '127.0.0.1'、49128)からの要求の処理中に例外が発生しましたトレースバック(最後の最後の呼び出し):

    ファイル "/home/stp/spark-2.0.0-bin-hadoop2.7/python/pyspark/accumulators.py"、235行目、ハンドルnum_updates = read_int(self.rfile)ファイル"/home/stp/spark- 2.0.0-bin-hadoop2.7/python/pyspark/serializers.py "、545行目、read_intでEOFErrorを発生させるEOFError

  6. やっと ###********##

    py4j.protocol.Py4JNetworkError:Javaサーバー(127.0.0.1:38073)に接続しようとしたときにエラーが発生しました

最初に考えたところ、エラーはメモリエラー(TaskMemoryManager)が原因である可能性があり、合計16 GBから、プロセスは最大6 GBを消費し、9GB以上を解放しました。また、ドライバメモリを10Gに設定しました。だから合格。

しかし、最終的なデータフレームでcount()またはshow()を実行すると、成功しました。しかし、toCsvを実行している間、上記のエラー/警告がスローされます。

問題の原因を実際に理解/推測しないでください。

上記のエラーの分析を手伝ってください。ヘルプ/コメントは大歓迎です。ありがとう。

6
Satya

私たちの場合、小さなテーブル(<10 MB)がたくさんありました。そこで、ブロードキャストを無効にすることにし、それに加えてガベージコレクションにG1GCを使用し始めました。これらのエントリを$ SPARK_HOME/confのspark-defaults.confファイルに追加します

spark.driver.extraJavaOptions -XX:+UseG1GC
spark.executor.extraJavaOptions  -XX:+UseG1GC
spark.sql.autoBroadcastJoinThreshold    -1

または、別の方法として、autoBroadcastのしきい値サイズを調整して、問題が解決することを確認することもできます。

11
user2608613