Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 增压火花、纱线、执行器、记忆头_Amazon Web Services_Apache Spark_Pyspark_Emr_Amazon Emr - Fatal编程技术网

Amazon web services 增压火花、纱线、执行器、记忆头

Amazon web services 增压火花、纱线、执行器、记忆头,amazon-web-services,apache-spark,pyspark,emr,amazon-emr,Amazon Web Services,Apache Spark,Pyspark,Emr,Amazon Emr,我正在尝试在EMR上运行一个(py)Spark作业,它将处理大量数据。当前我的作业失败,出现以下错误消息: 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. 因此,我在谷歌上搜索了如何实现这一点,并发现应该使用--conf标志传递spar

我正在尝试在EMR上运行一个(py)Spark作业,它将处理大量数据。当前我的作业失败,出现以下错误消息:

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.
因此,我在谷歌上搜索了如何实现这一点,并发现应该使用--conf标志传递
spark.Thread.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的5.5 GB物理内存
,这意味着我的内存没有增加。。有没有关于我做错了什么的线索

编辑

以下是我最初如何创建集群的详细信息:

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'

谢谢。

几个小时后,我找到了这个问题的解决方案。创建集群时,我需要将以下标志作为参数传递:

--configurations file://./sparkConfig.json\
JSON文件包含:

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

这允许我在下一步中使用最初发布的参数来增加memoryOverhead。

如果您登录到EMR节点,并且希望在不使用AWSCLI工具的情况下进一步更改Spark的默认设置,则可以在
Spark defaults.conf
文件中添加一行。Spark位于EMR的/etc目录中。用户可以通过导航到或编辑
/etc/spark/conf/spark defaults.conf

因此,在本例中,我们将把
spark.warn.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属性来控制堆大小


希望这有帮助……

你检查过作业日志了吗?是的@Koffee,这就是我收到错误消息的地方。当它尝试执行SparkSQL语句,该语句将数据按多个变量分组,然后聚合数据(即“按名称从表group中选择名称,min(编号)”)时,它失败。我在这里复制了日志中更详细的部分:您使用哪个实例?m3.xlarge?我认为,
——total executor cores
参数只能由Spark在独立模式下使用,不能超过Thread。@Koffee我使用的是r3.xlarge的4个实例。您对通过哪些参数=[]来添加步骤以增加
spark.Thread.executor.memoryOverhead
,有什么建议吗?我尝试删除--executor cores
,但输出是相同的……也许您可以尝试减少--executor内存,此选项对应于每个executor进程要使用的内存量。r3.xlarge只包含30,5g,因此当我使用类似“1000M”的格式设置spark.Thread.executor.memoryOverhead时,每个executor.fwiw不能有100g,我得到一个
java.lang.NumberFormatException:输入字符串:“1000M”
。spark文档称这是“堆外内存量(兆字节)”。。。所以我去掉了“M”,只把它设为“1000”,它似乎可以工作。