Spark 2.0的大多数代码比Spark 1.6的快5-10倍(所谓的大多数代码指的是hashjoin,filter等等,可是全局的排序在2.0版本并无作太多的努力),若是在Spark 1.6比较耗CPU的话,在2.0上有很大的改进架构
其实特别大的改进指的就是数据规模特别大且特别耗CPU的状况下,性能获得了很大的提高函数
Spark 2.0采用了whole stage code generation性能
在Spark 2.0中,若是物理计划中有*,则都会启用 whole-stage code generation的机制,Range,Filter等等都有这个*优化
其实从这个名字能够看出来,是针对一个stage的,Exchange does not have whole-stage code generation because it is sending data accross the data(Shuffle)翻译
从这里能够看出Spark 2.0的精髓所在:
Spark 1.6 一个Stage 内部之间的多个算子是经过Iterator的next next 来实现的(多个Function)code
而Spark 2.0是经过一个Function 来完成的排序
Spark 2.0中之因此能比1.6快,是由于:hash
1.减小了虚函数的调用,极大地减小了CPU无用的指令的消耗(不须要经过next,next的调用)it
2.数据直接放在寄存器中,至少提高了一个数量级的提高速度(例如咱们写一个Spark SQL,只是翻译成了普通的循环,不须要方法调用,数据能够直接放在寄存器中)io
3.如今的CPU等硬件架构对基本的条件语句,循环语句等进行了极大的优化,而且可使用硬件加速
4.对于复杂的数据操做,采用Vectorzation的方式,列的方式读写数据(一次next就是整列的数据),也就是一行实际上是原来的一列
优势:擅长CPU密集型的计算
弱点:对IO没有进行太多优化
概括总结:1.Spark 2.0比Spark 1.6.x快,什么代码会快?适用于什么状况?
2.Spark 采用了什么策略,是由于什么会快,优势和弱点?