2016-06-29 27 views
4

我試圖在EMR上運行(py)Spark作業來處理大量數據。目前,我的工作與以下錯誤消息失敗:Boosting 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. 

所以我google'd如何做到這一點,並發現我應該沿着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' 

感謝。

+0

你檢查了工作的日誌? –

+0

是@Koffee,那是我從中得到錯誤信息的地方。當它試圖執行一個SparkSQL語句,它將數據按大量變量進行分組然後進行聚合(即「按名稱從表組中選擇名稱,最小(數字)」)時,它會失敗。我在這裏複製了更詳細的日誌部分:http://pastebin.com/KVrbDkHu –

+0

您使用哪個實例? m3.xlarge?我認爲'--total-executor-cores'參數只能在獨立模式下由Spark使用,而不能在Yarn中使用。 –

回答

4

幾個小時後,我找到了解決這個問題的辦法。創建集羣時,我需要對下列標誌傳遞作爲參數:

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

與含有JSON文件:

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

這使我通過使用以增加memoryOverhead在下一步驟我最初發布的參數。

5

如果您登錄到EMR節點並希望進一步更改Spark的默認設置而不處理AWSCLI工具,則可以將一行添加到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來控制。

希望這有助於...

相關問題