あまりにも多くのメモリを使用しているPythonワーカー(PySparkアプリ)を実行しようとしていますが、メモリ制限を超過しているためにアプリがYARNを殺していますより多くの労働者を育てることができるようにするために)。Spark + PythonでGCメモリのしきい値を設定しました
私はPythonのGCは、私の頭の中でJVMよりも似ていますので...
はそれが持っている「使用可能なメモリ」の量は、何のPythonを伝える方法がありますが、Javaの/スカラ座から来ますか?つまり、ヒープサイズがほぼ満杯になったJava GCです。私はPython上で同じ操作をしたいので、糸が私のアプリケーションを殺すことはありません。なぜなら、そのメモリがガーベジであるときに多すぎるメモリを使うからです(私はPython3.3を使用しています。
私はリソースのハードとソフトの制限を見てきましたが、GCがトリガーしたかどうかを示すドキュメントはありません。 AFAIKはメモリ使用量によってGCをトリガするものではありませんが、any1はそうする方法を知っていますか?
おかげで、
ありがとう(もう一度)。はい、私はCythonを使用しています。私はこれらの閾値オプションを見ましたが、AFAIKは使用されるメモリの量をトリガーしません。いくつかのコピーの後で手動収集を実行しました(私は巨大なパンダメモリコピーを持っています。シリアライザをCompressedSerializer(PickleSerializer())をデフォルト(SparkContextコンストラクタのもの)に変更したため、JVMの問題は発生していません。私のCPUは私の他の懸念事項(基本的にはmem)と比較してvstrong/running lightであるため、圧縮はここではうまくいきます(私はそれがなくても高速です)。 – BiS
*私の前のコメントに追加するので、メモリサイズに基づいてそれを行うオプションはないと思います。私は、デフォルトのGCがそれぞれのX時間/割り当てをトリガーするのを読んだことがあります(GCのためにYARNが起こるのを待っていません)ので、今はあなたが言ったように手動で呼び出すつもりです。 私が困惑しているのは、no1がPySparkのCompressedSerializerについて言及していて、ブロードキャストのデフォルトとして使用していますが、Googleには何も見つかりませんでした(私はコードに潜んで見つけました)。少なくとも私のためにはそれは不思議に過ぎません。 – BiS