web-dev-qa-db-ja.com

ブースティングspark.yarn.executor.memoryOverhead

大量のデータを処理する(py)SparkジョブをEMRで実行しようとしています。現在、次のエラーメッセージが表示されてジョブが失敗します。

Reason: Container killed by YARN for exceeding memory limits.
5.5 GB of 5.5 GB physical memory used.
Consider boosting spark.yarn.executor.memoryOverhead.

だから私はこれをどのように行うかグーグルで調べたところ、spark.yarn.executor.memoryOverheadパラメータを--confフラグとともに渡す必要があることがわかりました。私はそれをこのようにしています:

aws emr add-steps\
--cluster-id %s\
--profile EMR\
--region us-west-2\
--steps Name=Spark,Jar=command-runner.jar,\
Args=[\
/usr/lib/spark/bin/spark-submit,\
--deploy-mode,client,\
/home/hadoop/%s,\
--executor-memory,100g,\
--num-executors,3,\
--total-executor-cores,1,\
--conf,'spark.python.worker.memory=1200m',\
--conf,'spark.yarn.executor.memoryOverhead=15300',\
],ActionOnFailure=CONTINUE" % (cluster_id,script_name)\

しかし、ジョブを再実行すると、同じエラーメッセージが5.5 GB of 5.5 GB physical memory usedとともに表示され続けます。これは、メモリが増加しなかったことを意味します。何が間違っているのかについてのヒントはありますか?

[〜#〜]編集[〜#〜]

最初にクラスターを作成する方法の詳細を次に示します。

aws emr create-cluster\
--name "Spark"\
--release-label emr-4.7.0\
--applications Name=Spark\
--bootstrap-action Path=s3://emr-code-matgreen/bootstraps/install_python_modules.sh\
--ec2-attributes KeyName=EMR2,InstanceProfile=EMR_EC2_DefaultRole\
--log-uri s3://emr-logs-zerex\
--instance-type r3.xlarge\
--instance-count 4\
--profile EMR\
--service-role EMR_DefaultRole\
--region us-west-2'

ありがとう。

10
masta-g3

数時間後、私はこの問題の解決策を見つけました。クラスターを作成するとき、次のフラグをパラメーターとして渡す必要がありました。

--configurations file://./sparkConfig.json\

以下を含むJSONファイルを使用:

[
    {
      "Classification": "spark-defaults",
      "Properties": {
        "spark.executor.memory": "10G"
      }
    }
  ]

これにより、最初にポストしたパラメーターを使用して、次のステップでmemoryOverheadを増やすことができます。

9
masta-g3

EMRノードにログインしていて、AWSCLIツールを使用せずにSparkのデフォルト設定をさらに変更したい場合は、spark-defaults.confファイルに行を追加できます。 SparkはEMRの/ etcディレクトリにあります。ユーザーは/etc/spark/conf/spark-defaults.confに移動または編集することでファイルに直接アクセスできます

したがって、この場合、spark-defaultsファイルの末尾にspark.yarn.executor.memoryOverheadを追加します。ファイルの最後は、この例と非常によく似ています。

spark.driver.memory              1024M
spark.executor.memory            4305M
spark.default.parallelism        8
spark.logConf                    true
spark.executorEnv.PYTHONPATH     /usr/lib/spark/python
spark.driver.maxResultSize       0
spark.worker.timeout             600
spark.storage.blockManagerSlaveTimeoutMs 600000
spark.executorEnv.PYTHONHASHSEED 0
spark.akka.timeout               600
spark.sql.shuffle.partitions     300
spark.yarn.executor.memoryOverhead 1000M

同様に、ヒープサイズは--executor-memory=xgフラグまたはspark.executor.memory propertyで制御できます。

お役に立てれば...

9
Pat