计算的最终结果是为了使任务运行时CPU与内存尽量压满。
从测试经验来看,由于鲲鹏处理器的Numa特性与Yarn的NUMA感知功能实现,最好能让container的数量刚好均衡分配在CPU的所有NUMA Node上,同时考虑到计算节点的个数,进而可以给出Executor的个数。举例来说,本次测试有2个NUMA Node,3个计算节点,因此Executor的个数为6的倍数,初步取范围12~18。关于Executor Cores的分配,考虑到系统调度以及Spark计算中的driver均需要一定数量的核,例如本次测试虚拟核总数为288,所以Executor num取15,保证在3个节点均衡,Executor Cores取18,留了大约18个核给系统调度以及driver计算。
若不能满足同时压满,则优先压满CPU,然后根据实际GC的log判断是否需要增加内存;在内存需求较高的场景,最终逐步调整可能会趋向内存压满,CPU留有一定余量的情况(一般来说,Executor memory与Executor core的比例和总内存与总核数的比例相等)。