2016-06-29 8 views
4

大量のデータを処理する(py)SparkジョブをEMRで実行しようとしています。だから私はこれを行う方法をgoogle'd、と私は--confフラグでspark.yarn.executor.memoryOverheadパラメータに沿って通過しなければならないことがわかっブーストspark.yarn.executor.memoryOverhead

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. 

:現在、私の仕事は、次のエラーメッセージで失敗しています。私はそれをこのようにやっている:

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' 

ありがとう:

EDIT

は、ここで私が最初にクラスタを作成する方法についての詳細です。

+0

ジョブのログを確認しましたか? –

+0

はい@コーヒー、それはどこからエラーメッセージが出ましたか。いくつかの変数でデータをグループ化し、それを集約するSparkSQL文を実行しようとすると、失敗しています(つまり、「名前でテーブル名から最小値を選択」)。私はここでログのより詳細なセクションをコピーしました:http://pastebin.com/KVrbDkHu –

+0

どのインスタンスを使用していますか? m3.xlarge?私は、 '--total-executor-cores'引数は、Sparkがスタンドアローンモードでのみ使用でき、糸越しには使用できないと思います。 –

答えて

4

数時間後、私はこの問題を解決しました。これは私が使用して次のステップでmemoryOverheadを向上させることができます

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

:含むJSONファイルで

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

:クラスタを作成するときに、私は、パラメータとして次のフラグを渡すために必要な最初に投稿したパラメータ。

5

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

この場合、spark.yarn.executor.memoryOverheadをspark-defaultsファイルの末尾に追加します。ファイルの終わりには、この例に非常に似:

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で制御することができます。

希望します。