在真正的企业项目中:调优的第一步首先要考虑资源分配充足,因为在企业中,资源分配充足,一般是跟性能成正比,
那要分配哪些资源呢?
executor.num,executor.memory,executor.core,diver.memory,
这些参数是怎么影响性能的呢?我将为大家讲解,有不妥的地方,望大家及时提出意见
executor.num的数据量增加,在任务运行的时候,executor会启动相应数据量的task来执行任务,当executor数量增加的时候,task的数量也随着增加,从而增加了任务运行的并行度,提升了运行速度
executor.memory增加,1>在做缓存的时候,当内存不足的时候,就会将数据大量的写入磁盘,此时会存在大量的磁盘读写,使得磁盘io成为spark作业的瓶颈,当此内存增加的时候,就避免了磁盘的写入,减少磁盘io,增加性能
2>在做shuffle的时候,reduce会将数据拉去到自己的内存进去聚合,当内存不足的时候,会将存在磁盘读写,导致性能降低
3>在任务运行的时候,可能会频繁的创建对象在jvm中,当内存不足时,jvm堆内存爆满,会频繁的出现垃圾回收机制,导致任务的等待和停顿,性能明显降低,增加内存,会使得减少频繁的gc fc机制
,executor.core:也是从另一个角度来增加task的数量,增加并行度
diver.memory:经验之谈,增加此项,提升性能不明显,但是做为一个程序员应当从多角度来提升作业的性能