我有两个关于 Spark 性能调整的问题:
我理解在 Spark 作业中控制并行性的关键之一是正在处理的 RDD 中存在的分区数量,然后控制处理这些分区的执行器和核心。我可以假设这是真的吗:
- 执行器数量 * 执行器核心数量应 <= 分区数量。也就是说,一个分区始终在一个执行器的一个核心中处理。执行器*核心数多于分区数是没有意义的
我知道每个执行器拥有大量核心会对 HDFS 写入等内容产生影响,但这是我的第二个问题,纯粹从数据处理的角度来看,两者之间有什么区别?例如如果我有 10 个节点的集群,这两个作业之间有什么区别(假设每个节点有足够的内存来处理所有内容):
5 个执行器 * 2 个执行器核心
2 个执行器 * 5 个执行器核心
假设有无限的内存和 CPU,从性能的角度来看,我们是否应该期望上述两者执行相同的操作?
最佳答案
大多数时候,使用更大的执行器(更多内存、更多核心)会更好。一:具有大内存的更大执行器可以轻松支持广播连接并消除洗牌。其次:由于任务创建时并不相同,因此统计上较大的执行器更有可能避免 OOM 问题。 大型执行器的唯一问题是 GC 暂停。 G1GC 有帮助。
关于apache-spark - Spark 性能调优 - 执行器数量与核心数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39006025/