谈谈spark2以及stream

本文探讨了Spark2中DataSet的引入原因及其相较于DataFrame的优势,同时对比了Spark Structured Streaming、Blink、Storm及Kafka Stream等主流流处理技术的发展趋势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

4月底去参加了qcon 2018北京站,新兴数据处理专场有机会听到了Spark StructedStreming/blink/kafka stream三场的分享,整个听下来有一些感想,刚好最近又在看spark2这块的一些源码设计,所以想着写点自己的理解。

注意:在此就不再赘述spark2相比1.x的更新项了,有一项应该是大家都知道的,那就是2推出了全新的DataSet

为什么会出现DataSet?

想要解释为什么会出现DataSet,那就不得不提到DataFrame了

DataFrame

DataFrame相比RDD而言,有一个优势那就是可以使用Spark catalyst optimized,如下图:

spark catalyst

可以看出DataFrame和Spark sql一样底层都可以经过catalyst的优化
主要有以下几个过程

1. 逻辑计划生成、优化
2. 物理计划生成、优化
3. 最后生成RDD操作

其他的类sql查询,比如hive sql的执行过程也大抵如此,包括了抽象语法树生成、逻辑计划、物理计划 等,尤其是语法树生成,hive更具备通用性,spark2当中也使用了和hive一样的Antlr来生成AST,大家有兴趣可以看一下。

DataSet做了什么?

DataSet在DataFrame的基础上做了更高级的封装,如增加静态变量、自定义函数等,在拥有DataFrame所有的优点的前提下,编程方式更灵活。spark2为了统一api,移除了DataFrame,将之变为DataSet[Row],也正是出于这点。

回到一开始的问题,为什么会出现DataSet,想必已经有了答案了。

谈谈流处理的方向

目前较为主流的实时这块的还是这几个

  • spark Stream
  • blink
  • storm
  • kafka stream

各家厂商都在大力发展通用性这块,从最早的spark streaming的编程方式到现在的只要几条sql就可以处理一些场景的blink

  • spark structed streaming底层全面接入sql优化引擎
  • blink sql通用处理层

sql天然具备的可优化性以及通用性决定了社区的活跃度。

后面会集中写一篇介绍sql优化和catalyst

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值