我在AWS EMR上运行了2份Spark Streaming应用程序(Spark 2.2.1,EMR 5.11,Scala)(3个节点* m4.4xlarge集群 - 每个节点16vCPU和64G RAM)。
在内置的EMR集群监控(Ganglia)中,我看到集群的CPU利用率低于30%,内存使用量不超过32GB,可用~200GB,网络也远不是100%。但是应用程序几乎不能在批处理间隔内完成批处理。
以下是我使用客户端模式将应用程序的每个副本提交给Master的代码:
--master yarn
--num-executors 2
--executor-cores 20
--executor-memory 20G
--conf spark.driver.memory=4G
--conf spark.driver.cores=3
如何才能更好地利用资源(应用性能)?
答案 0 :(得分:2)
您可以通过使用spark配置分类将
maximizeResourceAllocation
选项设置为true
,将执行程序配置为利用群集中每个节点上可能的最大资源。此 EMR特定选项计算核心实例组中某个实例上的执行者可用的最大计算和内存资源。然后根据此信息设置相应的spark-defaults设置。[ { "Classification": "spark", "Properties": { "maximizeResourceAllocation": "true" } } ]
进一步阅读
答案 1 :(得分:0)
你的火花执行者有多个vcores吗?
如果是,那么在aws emr上存在配置问题,用于分配正确的cpu量
yarn is not honouring yarn.nodemanager.resource.cpu-vcores
在这里看到这个答案,启用显性容量允许更多的vcores运行,我看到在监控使用情况时增加了cpu的使用。
至于内存,你的数据集有多大,你有多少内存? - 你能看到任何会影响从内存到磁盘的数据的磁盘写操作吗?