私は非常に大きな行列を扱うSparkアプリケーションを構築しています。Javaヒープがspark-submitで要求されたメモリを取得しない
がspark-submit --driver-memory 20g --executor-memory 20g --class "mycoordinates.App" --master local[7] my.jar args
設定私の問題は、私はOOMエラーを取得し、問題が解決しないドライバーのメモリを増やす開始し、特定のサイズのしきい値に達すると(私の理解がある:私は、次の呼び出しを使用して、単一のAWSインスタンス上でスパークを実行していますmaster = localの場合、エグゼキュータのメモリ設定は問題ではありません。確かにそれを増やしても効果はありませんでした)。私のアプリケーション内
私は、ヒープ(スカラ座でのプログラミング)を確認するには、次の文を置く:
println(" mem avail: " + java.lang.Runtime.getRuntime().totalMemory())
println(" max mem: " + java.lang.Runtime.getRuntime().maxMemory())
println(" free mem: " + java.lang.Runtime.getRuntime().freeMemory())
後は、一般的な出力です:20G
mem avail: 2075918336
max mem: 21099708416
free mem: 1720845616
に設定
ドライバのメモリ
ドライバメモリを8Gに設定
mem avail: 2075918336
max mem: 8303607808
free mem: 1720720376
ドライバメモリは、ドライバメモリが1G
maxMemory値が期待どおりに、コマンドラインからドライバ設定メモリを追跡するために思わmem avail: 1037959168
max mem: 1037959168
free mem: 1000899656
に設定3G
mem avail: 2075918336
max mem: 3113877504
free mem: 1720850720
に設定します。しかし、totalMemoryとfreeMemoryはそうではありません。 ドライバメモリの設定を2G未満にすると、totalMemoryとfreeMemoryが期待どおりに減少します。しかし、2G以上のドライバのメモリ設定については、変更されません。 totalMemoryの値は常に同じです。 freeMemoryの値は少し変わりますが、ランダムなバリエーションのように見えます。値は常に小さい範囲内です。
私はまた、アプリ内からspark設定を印刷しました。それらはすべてコマンドライン設定に一致しているようです。
私が今までに見つけたすべての情報--driver-memoryはヒープサイズを増やすことを示しています。しかし、ヒープサイズを2GBに制限する他のパラメータ設定があるようです。
ヒープが2GBを超えて成長するには、他にどのような設定が必要か教えてください。
より検索した後、私はJVMに至るまでの引数を渡すことができることを見つけることができました。今私は、これらの2つの異なる引数を調整する必要がないように、初期割り当てに最大メモリを使用するようにjvmをデフォルトにする方法があるかどうか疑問に思っています。 –