我在Spark中有两个关于性能调优的问题:
我理解在spark工作中控制并行性的关键之一是正在处理的RDD中存在的分区数,然后控制处理这些分区的执行程序和核心。我能否认为这是真的:
据我所知,每个执行程序拥有大量内核会对HDFS写入等事情产生影响,但这是我的第二个问题,纯粹从数据处理的角度来看是什么两者之间的区别?对于例如如果我有10个节点集群,这两个作业之间的区别是什么(假设每个节点有足够的内存来处理所有内容):
5个遗嘱执行人* 2执行人核心
2位遗嘱执行人* 5位执行人核心
假设存在无限的内存和CPU,从性能的角度来看,我们是否应该期望上述两者执行相同的操作?
答案 0 :(得分:0)
根据我的经验,如果我有一个包含10个节点的集群,我会选择20个spark执行器。工作的细节很重要,因此一些测试将有助于确定可选配置。
答案 1 :(得分:0)
大多数情况下使用更大的执行程序(更多内存,更多内核)更好。一:具有大内存的较大执行程序可以轻松支持广播连接并消除随机播放。第二:由于任务不是平等的,统计上较大的执行者有更好的机会幸存OOM问题。 大型执行程序的唯一问题是GC暂停。 G1GC帮助。