##Spark 2.0技术预览:更容易、更快速、更智能

Spark 2.0技术预览:更容易、更快速、更智能 http://mp.weixin.qq.com/s?src=3&timestamp=1489882744&ver=1&signature=-LS6H-vrac6i3XboPuWS7DIZbErZ1pZLNU4i22lYrINrlgg6LzhUj-bXJiqiI3kkEckGErxy0saUvLo9eKQuSJumzTaAM2SiMQwjqc7aEXn37-I8a0WkPpTeudXI*20Jz7usg941uTAq13I7wdXvyW7q1LTexteMcEMdQxUhg=

在过去的几个月时间里,我们一直忙于我们所爱的大数据开源软件的下一个主要版本开发工作:Apache Spark2.0。Spark 1.0已经出现了2年时间,在此期间,我们听到了赞美以及投诉。Spark 2.0的开发基于我们过去两年学到的:用户所喜爱的我们加倍投入;用户抱怨的我们努力提高。本文将总结Spark 2.0的三大主题:更容易、更快速、更智能。更深入的介绍将会在后面博客进行介绍。
  我们很高兴地宣布Apache Spark 2.0技术预览今天就可以在Databricks Community Edition中看到,该预览版本是构建在branch-2.0基础上。当启动了集群之后,我们可以简单地选择Spark 2.0 (branch preview)
来使用这个预览版,如下所示:


然而最终版的Apache Spark 2.0发行将会在几个星期之后,本技术预览版的目的是基于branch-2.0上提供可以访问Spark 2.0功能。通过这种方式,你可以满足你的好奇心;而且我们可以在发行最终版的Spark 2.0之前就可以获取到用户的反馈和Bug报告。
现在让我们来看看Spark 2.0最新的进展:



文章目录 [hide]
1 更容易的SQL和Streamlined APIs

2 更快:Spark作为编译器

3 更加智能:Structured Streaming

4 总结

1

更容易的SQL和Streamlined APIs

Spark 2.0主要聚焦于两个方面:(1)、对标准的SQL支持(2)、统一DataFrame和Dataset API。
  在SQL方面,Spark 2.0已经显著地扩大了它的SQL功能,比如引进了一个新的ANSI SQL解析器和对子查询的支持。现在Spark 2.0已经可以运行TPC-DS所有的99个查询,这99个查询需要SQL 2003的许多特性。因为SQL是Spark应用程序的主要接口之一,Spark 2.0 SQL的扩展大幅减少了应用程序往Spark迁移的代价。
  在编程API方面,我们对API进行了精简。
  1、统一Scala和Java中DataFrames和Datasets的API:从Spark 2.0开始,DataFrame仅仅是Dataset的一个别名。有类型的方法(typed methods)(比如:map, filter, groupByKey)和无类型的方法(untyped methods)(比如:select, groupBy)目前在Dataset类上可用。同样,新的Dataset接口也在Structured Streaming中使用。因为编译时类型安全(compile-time type-safety)在Python和R中并不是语言特性,所以Dataset的概念并不在这些语言中提供相应的API。而DataFrame仍然作为这些语言的主要编程抽象。
  2、SparkSession:一个新的切入点,用于替代旧的SQLContext和HiveContext。对于那些使用DataFrame API的用户,一个常见的困惑就是我们正在使用哪个context?现在我们可以使用SparkSession了,其涵括了SQLContext和HiveContext,仅仅提供一个切入点。需要注意的是为了向后兼容,旧的SQLContext和HiveContext目前仍然可以使用。
  3、简单以及性能更好的Accumulator API:Spark 2.0中设计出一种新的Accumulator API,它拥有更加简洁的类型层次,而且支持基本类型。为了向后兼容,旧的Accumulator API仍然可以使用。
  4、基于DataFrame的Machine Learning API可以作为主要的ML API了:在Spark 2.0中, spark.ml包以其pipeline API将会作为主要的机器学习API了,而之前的spark.mllib仍然会保存,将来的开发会聚集在基于DataFrame的API上。
  5、Machine learning pipeline持久化:现在用户可以保存和加载Spark支持所有语言的Machine learning pipeline和models。
  6、R的分布式算法:在R语言中添加支持了Generalized Linear Models (GLM), Naive Bayes, Survival Regression, and K-Means。

2

更快:Spark作为编译器

根据以往的调查,91%的用户认为Spark的最重要的方面就是性能,结果性能优化在Spark开发中都会看的比较重。
  Spark 2.0中附带了第二代Tungsten engine,这一代引擎是建立在现代编译器和MPP数据库的想法上,并且把它们应用于数据的处理过程中。主要想法是通过在运行期间优化那些拖慢整个查询的代码到一个单独的函数中,消除虚拟函数的调用以及利用CPU寄存器来存放那些中间数据。我们把这些技术称为"整段代码生成"(whole-stage code generation)。
  为了有个直观的感受,我们记录下在Spark 1.6和Spark 2.0中在一个核上处理一行的操作时间(单位是纳秒),下面的表格能够体现出新的Tungsten engine的威力。
primitive
Spark 1.6
Spark 2.0

filter
15ns
1.1ns

sum w/o group
14ns
0.9ns

sum w/ group
79ns
10.7ns

hash join
115ns
4.0ns

sort (8-bit entropy)
620ns
5.3ns

sort (64-bit entropy)
620ns
40ns

sort-merge join
750ns
700ns

那么在新的Tungsten engine在端至端的查询表现又会咋样?我们比较了Spark 1.6和Spark 2.0在使用TPC-DS的基本分析,如下图:



  除了whole-stage code generation可以提高性能,Catalyst方面也做了许多的工作,比如通用查询优化;还有一个新的矢量Parquet 解码器,它使得Parquet的扫描吞吐量提高了3x。

3

更加智能:Structured Streaming

Spark Streaming在大数据领域第一次尝试将批处理和流计算进行了统一。在Spark 0.7开始引入的第一个streaming API称为DStream,它为开发者提供了几个强大的特性:仅一次的语义,大规模容错和高吞吐量。
  然而,随着数百个真实的Spark Streaming部署后,我们发现,需要实时作出决策应用通常需要不止一个流引擎。他们需要深度地将批处理和流处理进行整合;需要和外部存储系统整合;以及需要应付业务逻辑变化的能力。其结果是,企业需要的不仅仅是一个流引擎;相反,他们需要一个完整的堆栈,使他们能够开发终端到终端的“持续的应用程序”。
  一些人认为我们可以把所有的东西看作流。也就是说,提供一个编程模型,将批处理数据和流数据进行整合。
  这个单一的模型有几个问题:首先,当数据到达时,对它进行操作将会变得非常难而且这会有许多限制性。其次,不同的数据分布,不断变化的业务逻辑和数据的延迟都增加了独特的挑战。第三、大多数现有系统中,例如MySQL或Amazon S3中,不表现得像一个流;而且许多算法在流数据上无法工作。
  Spark 2.0的Structured Streaming APIs是一种新颖的流处理方式。它的实现源于最简单地计算流数据的答案是不要想象它是一个流(这句话不太好翻译,自己看英文:the simplest way to compute answers on streams of data is to not having to reason about the fact that it is a stream)。这个真理来源于我们的经验。结构化数据流的愿景是利用Catalyst优化器来发现什么时候可以透明的将静态的程序转到增量执行的动态工作或者无限数据流中。当我们从这个数据结构的角度来看到我们的数据,这就简化了流数据。
  作为实现这一愿景的第一步,Spark 2.0附带了一个最初版本的Structured Streaming API(扩展自DataFrame/Dataset API),这个统一对现有的Spark用户比较容易适应,因为这让他们能够充分利用Spark batch API知识来解决实时中的问题。这里主要功能将包括支持基于event-time的处理、乱序/延时数据、sessionization以及非流数据sources和sinks的紧密集成。
  Streaming显然是一个非常宽泛的话题,所以敬请关注databricks的博客对于Spark 2.0的Structured Streaming介绍,其中将会包括那些将会在此版本实现,哪些将会在未来版本实现。

4

总结

Spark用户最初转向Spark的原因是因为它的易用性和性能。Spark 2.0将付出双倍的努力来扩展它以使得它支持更广泛的workloads,我们希望你喜欢我们已经做的工作,并期待着您的反馈。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342

推荐阅读更多精彩内容