第二课: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)

而Spark 2.0是通过一个Function 来完成的

 

Spark 2.0中之所以能比1.6快,是因为:

1.减少了虚函数的调用,极大地减少了CPU无用的指令的消耗(不需要通过next,next的调用)

2.数据直接放在寄存器中,至少提升了一个数量级的提升速度(例如我们写一个Spark SQL,只是翻译成了普通的循环,不需要方法调用,数据可以直接放在寄存器中)

3.现在的CPU等硬件架构对基本的条件语句,循环语句等进行了极大的优化,并且可以使用硬件加速

4.对于复杂的数据操作,采用Vectorzation的方式,列的方式读写数据(一次next就是整列的数据),也就是一行其实是原来的一列

 

优点:擅长CPU密集型的计算

弱点:对IO没有进行太多优化

 

归纳总结:1.Spark 2.0比Spark 1.6.x快,什么代码会快?适用于什么情况?

2.Spark 采用了什么策略,是因为什么会快,优点和弱点?

 

转载于:https://my.oschina.net/u/1449867/blog/719776

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值