1. ホーム
  2. memory

[解決済み] Apache Spark Executorのメモリを設定する方法

2022-03-07 12:02:42

質問

Apache sparkの実行ノードで利用可能なメモリを増やすにはどうしたらいいですか?

Apache Sparkに読み込むのに適した2GBのファイルを持っています。私は今のところ1台のマシンでApache Sparkを実行しているので、ドライバとエグゼキュータは同じマシンにあります。このマシンのメモリは8GBです。

ファイルをメモリにキャッシュする設定にしてからファイルの行数を数えてみると、以下のようなエラーが発生します。

2014-10-25 22:25:12 WARN  CacheManager:71 - Not enough space to cache partition rdd_1_1 in memory! Free memory is 278099801 bytes.

ドキュメントを見てみると ここで を設定し spark.executor.memory から 4g$SPARK_HOME/conf/spark-defaults.conf

UIでは、この変数がSpark Environmentに設定されていることがわかります。スクリーンショットをご覧ください。 ここで

しかし 実行者タブ というメッセージが表示され、1つのExecutorのメモリ制限が265.4MBに設定されたままになっています。 また、同じエラーが表示されます。

記載されていることをいろいろと試してみたところ ここで が、やはりエラーが出てしまい、どこの設定を変えればいいのかがよくわかりません。

私は自分のコードをspark-shellから対話的に実行しています。

どのように解決するのですか?

Sparkをローカルモードで実行しているので spark.executor.memory は、あなたが気づいたように、何の効果もありません。この理由は、Workerは、quot;lives" を起動するときに開始するドライバJVMプロセス内にあるからです。 スパークシェル で、そのために使われるデフォルトのメモリは 512M . を設定することで、それを増やすことができます。 spark.driver.memory をもっと高い値に設定します。 5g . のどちらかで行うことができます。

  • プロパティファイルで設定する(デフォルトは $SPARK_HOME/conf/spark-defaults.conf ),

    spark.driver.memory              5g
    
    
  • または、実行時にコンフィギュレーション設定を与えることで

    $ ./bin/spark-shell --driver-memory 5g
    
    

なお、アプリケーションで設定しても、その時にはすでに手遅れで、ある程度のメモリがある状態でプロセスが始まっているので、実現できません。

の理由は 265.4 MB は、Spark spark.storage.memoryFraction * spark.storage.safetyFraction を捧げます。 をストレージメモリの総量に割り当て、デフォルトでは0.6と0.9になっています。

512 MB * 0.6 * 0.9 ~ 265.4 MB

そのため、ドライバのメモリがすべてRDDの保存に使用できるわけではないことに注意してください。

しかし、これをクラスタ上で実行するようになると spark.executor.memory の設定は、Sparkのメモリキャッシュに充てる量を計算する際に、引き継がれます。