第二课:Spark 第二代Tungsten引擎测试数据和引擎实现内幕

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 采用了什么策略,是由于什么会快,优势和弱点?

 

相关文章
相关标签/搜索