Amazon web services 调整AWS EMR中Spark的执行器编号和内存

Amazon web services 调整AWS EMR中Spark的执行器编号和内存,amazon-web-services,apache-spark,yarn,emr,executor,Amazon Web Services,Apache Spark,Yarn,Emr,Executor,我们有一个在AWS中运行的EMR集群,我们正在尝试调整性能。在阅读了许多文章和帖子(和)之后,我们陷入了困境,不知道如何使更改纱线配置参数更快 我们使用的机器: 3 x c5.5大容量(4个CPU,每个8GB内存) 此实例类型的Thread.nodemanager.resource.memory-mb的默认值为5,5GB 该任务基本上是从S3中的数千个CSV文件中读取数百万行,在许多作业中级联处理数据,并在S3中输出结果(似乎更多的是转换而不是操作) 我们正在使用aws emr create c

我们有一个在AWS中运行的EMR集群,我们正在尝试调整性能。在阅读了许多文章和帖子(和)之后,我们陷入了困境,不知道如何使更改纱线配置参数更快

我们使用的机器:

3 x c5.5大容量(4个CPU,每个8GB内存) 此实例类型的Thread.nodemanager.resource.memory-mb的默认值为5,5GB

该任务基本上是从S3中的数千个CSV文件中读取数百万行,在许多作业中级联处理数据,并在S3中输出结果(似乎更多的是转换而不是操作)

我们正在使用aws emr create cluster运行群集

每个作业的配置:

{"Args":["spark-submit","--deploy-mode","cluster","--class","com.xxx.IngestionDriver","--conf", "spark.num.executors=2","--conf", "spark.executor.memory=4G", "--conf", "spark.executor.cores=2", "--conf", "spark.driver.memory=2G"
,"s3://xxx-data-29-jan/jars/xxx-cdr-ingestor-assembly-0.1-SNAPSHOT.jar","--configFile","s3a://xxx-data-29-jan/config/xxx_client_csv.config","--postgres","false"],"Type":"CUSTOM_JAR","ActionOnFailure":"TERMINATE_CLUSTER","Jar":"command-runner.jar","Properties":"","Name":"xxx-client-csv"}
以及命令的其他配置:

]' --instance-groups '[{"InstanceCount":1,"EbsConfiguration":{"EbsBlockDeviceConfigs":[{"VolumeSpecification":{"SizeInGB":32,"VolumeType":"gp2"},"VolumesPerInstance":1}]},"InstanceGroupType":"MASTER","InstanceType":"c5.xlarge","Name":"Master Instance Group"},{"InstanceCount":2,"EbsConfiguration":{"EbsBlockDeviceConfigs":[{"VolumeSpecification":{"SizeInGB":32,"VolumeType":"gp2"},"VolumesPerInstance":1}]},"InstanceGroupType":"CORE","InstanceType":"c5.xlarge","Name":"Core Instance Group"}]' --configurations '[{"Classification":"spark","Properties":{"maximizeResourceAllocation":"true"},"Configurations":[]}]' --auto-terminate --service-role EMR_DefaultRole --enable-debugging --name 'CLUSTER-29-JAN' --region eu-west-3 
在做了一些计算之后,我们计算出我们的最佳选择是将num executors设置为2,每个executor使用4G内存,每个executor使用2个内核,驱动程序使用2G。这运行得很好,但在集群中运行所需的时间比我们在内部部署的较小集群中看到的用于测试的时间要长。此外,我们在Cloud Watch中看到的CPU使用率很低(0-40%),集群统计信息/IO中显示的总内存仅为8GB(当3台机器的集群总内存为24GB时)。这似乎表明我们没有使用硬件的所有容量


我们使用不同的内存组合进行了测试,没有指定执行器的数量,也没有为没有运气的执行器打开/关闭内存。任何建议都将不胜感激

你的目标或期望是什么?你试过只租一台更大的机器而不使用Spark吗?在这些尺寸下,这应该更划算。租一台更大的机器不是一个选择,因为我们有预算限制。不确定我们怎么会不使用Spark,你是什么意思?您还想到了什么其他分布式处理框架?我们的目标是基本上大大减少完成此任务所需的时间。您使用4个内核和8 GB RAM来运行您的任务。这不是一台很大的机器——一个庞大高效的Java/Python/Scala代码比使用Spark要快得多。即使这只是您的功能验证平台,您也无法从运行在如此小的“集群”上推断出有用的性能指标。所以说真的,除了功能验证之外,这个环境几乎没有其他用途。我同意@Rickmoritz的观点。谢谢你的反馈。