Spark性能调优 - 执行程序数与内核数

时间:2016-08-17 20:49:04

标签: apache-spark spark-streaming

我在Spark中有两个关于性能调优的问题:

  1. 我理解在spark工作中控制并行性的关键之一是正在处理的RDD中存在的分区数,然后控制处理这些分区的执行程序和核心。我能否认为这是真的:

    • 执行者的数量*执行者核心的数量应该是< =分区的数量。即,总是在一个执行器的一个核心中处理一个分区。没有必要有更多的执行程序*核心而不是分区数
  2. 据我所知,每个执行程序拥有大量内核会对HDFS写入等事情产生影响,但这是我的第二个问题,纯粹从数据处理的角度来看是什么两者之间的区别?对于例如如果我有10个节点集群,这两个作业之间的区别是什么(假设每个节点有足够的内存来处理所有内容):

    1. 5个遗嘱执行人* 2执行人核心

    2. 2位遗嘱执行人* 5位执行人核心

    3. 假设存在无限的内存和CPU,从性能的角度来看,我们是否应该期望上述两者执行相同的操作?

2 个答案:

答案 0 :(得分:0)

根据我的经验,如果我有一个包含10个节点的集群,我会选择20个spark执行器。工作的细节很重要,因此一些测试将有助于确定可选配置。

答案 1 :(得分:0)

大多数情况下使用更大的执行程序(更多内存,更多内核)更好。一:具有大内存的较大执行程序可以轻松支持广播连接并消除随机播放。第二:由于任务不是平等的,统计上较大的执行者有更好的机会幸存OOM问题。 大型执行程序的唯一问题是GC暂停。 G1GC帮助。