1. Spark 2.0 !

还记得我们的第七篇 Spark 博文里吗?里面我用三点来总结 spark dataframe 的好处:

当时是主要介绍 spark 里的 dataframe,今天是想总结一下 spark 2.0 的一些重大更新,准备过段时间[等到 2.0.1 或者 2.1 出来了就]切换到 spark 2.x 来。当我看官方的一些介绍和一些相关文章的时候,我发现 spark 2.0 的特点,也可以用第七篇里总结的 dataframe 的特点来说明,那就是:

write less : 写更少的代码

do more : 做更多的事情

faster : 以更快的速度

真心觉得 spark 做得很不错,databricks 做得太赞了,现在 databricks 的社区版 [DCE : Databricks Community Edition] 也开放注册了,大家还没有注册的赶紧去体验这个产品吧,so amazing,注册链接:community.cloud.databricks.com。

言归正传,下面从几个亮点来总结一下 spark 2.0 的更新,基本上都是看官方文档,相关的 video,slide 和一些技术博文来的,参考的文章都会在后文列出来的。

2. Spark 版本号说明

如图是 spark 版本号的三个不同数字的介绍,以 1.6.0 版本举例:

1 : major version : 代表大版本更新,一般都会有一些 api 的变化,以及大的优化或是一些结构的改变;

6 : minor version : 代表小版本更新,一般会新加 api,或者是对当前的 api 就行优化,或者是其他内容的更新,比如说 WEB UI 的更新等等;

0 : patch version : 代表修复当前小版本存在的一些 bug,基本不会有任何 api 的改变和功能更新;记得有一个大神曾经说过,如果要切换 spark 版本的话,最好选 patch version 非 0 的版本,因为一般类似于 1.2.0, … 1.6.0 这样的版本是属于大更新的,有可能会有一些隐藏的 bug 或是不稳定性存在,所以最好选择 1.2.1, … 1.6.1 这样的版本。

3. 特性 1 - 官方文档

spark 2.0 似乎对官方文档做了比较大的改变,赞,这里是 2.0 预览版的文档链接,等不及的小伙伴们可以先看了:

2.0.0-preview

master-docs

2.0.0 docs

4. 特性 2 - 支持标准 SQL 语句

On the SQL side, we have significantly expanded the SQL capabilities of Spark, with the introduction of a new ANSI SQL parser and support for subqueries. Spark 2.0 can run all the 99 TPC-DS queries, which require many of the SQL:2003 features.

上面提到的 TPC-DS 这个概念没有必要去了解了,我是 google 了之后才知道的,如果感兴趣的话可以看这个链接:TPC-DS。

总结下来:

  • Spark 2.0 中, SQL:2003 语法全部支持了,下面是 sql 语法的发展历程,可以说,虽然 sql 2003 之后又更新了两个版本的语法,但在实际使用情况中,sql 2003 已经完全能 handle 99% 的场景了。

    • 1986年,ANSI X3.135-1986,ISO/IEC 9075:1986,SQL-86

    • 1989年,ANSI X3.135-1989,ISO/IEC 9075:1989,SQL-89

    • 1992年,ANSI X3.135-1992,ISO/IEC 9075:1992,SQL-92(SQL2)

    • 1999年,ISO/IEC 9075:1999,SQL:1999(SQL3)

    • 2003年,ISO/IEC 9075:2003,SQL:2003

    • 2008年,ISO/IEC 9075:2008,SQL:2008

    • 2011年,ISO/IEC 9075:2011,SQL:2011

  • Spark 2.0 中,更新了新的 SQL 解析器,可以支持子查询了,特地重复一下,因为基本上所有复杂的 sql 语句都会用到子查询,官方有例子: Subqueries in Apache Spark 2.0

5. 特性 3 - 统一 DataFrames and Datasets API

在 spark 2.0 中,把 dataframes 当作是一种特殊的 datasets,dataframes = datasets[row],把两者统一为 datasets。但是需要注意的是,目前只更新了 scala 和 java 的api,python中尚未更新。而且 spark 2.0 中引入了 structured streaming 的概念,需要 dataframe 的支持,其中的 dataframe 也已经用 datasets[row] 来实现了。

官方的关于 DataSets API 的使用说明:Dataset API

6. 特性 4 - SparkSession

在 spark 2.0 之前,sparkContext 是 Spark应用的入口。除了 sparkContext,还有 sqlContext,StreamingContext,HiveContext 等其他入口。然而到了 spark 2.0 后,因为逐渐要采用 DataFrame 和 DataSets 作为 API 使用,需要一个统一的入口点,所以就诞生了 SparkSession。本质上,可以简单的把 SparkSession 理解成 sparkContext, sqlContext, StreamingContext, HiveContext 的统一封装。

下面是一个来自官方的 demo:

import org.apache.spark.sql.SparkSession

val sparkSession = SparkSession.builder

.master("local")

.appName("my-spark-app")

.config("spark.some.config.option", "config-value")

.getOrCreate()

值得注意的一个点是,在 2.0 之前,启动 spark repl 时,会自动给你创建一个 sparkContext,叫做 sc,但在 2.0 之后,启动 spark repl 时会自动给你创建一个 SparkSession,叫做 spark。

这里有一个 databricks 出的关于 SparkSession 的说明文档和使用方法:SparkSession - a new entry point

7. 特性 5 - 新的 Accumulator API

spark 2.0 设计了新的 Accumulator API,用户可以基于默认的 Accumulator 实现自己定义的 Accumulator,当然老的 Accumulator 还是保留使用的。

下面是一个用户自定义 Accumulator 的例子:

class VectorAccumulatorParam(AccumulatorParam):

def zero(self, initialValue):

return Vector.zeros(initialValue.size)

def addInPlace(self, v1, v2):

v1 += v2

return v1

# Then, create an Accumulator of this type:

vecAccum = sc.accumulator(Vector(...), VectorAccumulatorParam())

而且 spark 2.0 里可以在 web ui 里查看 Accumulator 的数据了,非常方便[注明一下,这里我没有尝试过在 2.0 之前是否可以在 web ui 里查看 Accumulator 的数据,如果有写错了请大家指出哈,谢谢]

8. 特性 6 - DataFrame Based Machine Learning

在上篇文章里 『 Spark 』11. spark 机器学习,我们也提到过,从 2.0 开始,spark machine learning 开始采用基于 dataframe 开发的 ml package,基于 RDD API 的 mllib 将不再开发新 feature,只做维护。

9. 特性 7 - Machine learning pipeline persistence

spark 2.0 支持机器学习持久化了,虽然 2.0 之前也有类似的功能,但在这方面,2.0 有两大亮点:

  • 不仅可以 save & load 模型,还可以 save & load 模型的 pipeline;

  • 可以跨语言 save & load 模型,比如说你用 scala 实现了一个模型,并且 save 到磁盘上,之后可以用 python 来 load 这个模型;

这里有官方出的一个介绍文档和使用说明:Saving & loading Machine Learning (ML) models

10. 特性 8 - Distributed algorithms in R

也可以用 R 来实现一些机器学习算法了: Generalized Linear Models (GLM), Naive Bayes, Survival Regression, and K-Means.

11. 特性 9 - Whole-stage code generation

spark 2.0 性能上会有较大的提升,根据官方文档,2.0 会引入新的物理执行引擎 new Tungsten execution engine,相对于之前的执行引擎[之前也有 code generation],新的物理执行引擎会充分利用 内存,cpu,cpu 寄存器 三者,最大化的提升代码执行速度。

关于 new Tungsten execution engine 的原理,可以参考这篇官方博客:Apache Spark as a Compiler: Joining a Billion Rows per Second on a Laptop : Deep dive into the new Tungsten execution engine

这里有官方做的一个简单的测试:Performance of Spark 2.0’s Tungsten engine

下图是一个简要的性能对比截图:

12. 特性 10 - Structured Streaming

这个就不用说了,是 2.0 的三大更新之一。官方的这句话很有意思: the simplest way to compute answers on streams of data is to not having to reason about the fact that it is a stream.,中文翻译来说就是说:处理流式计算最简单的方法,就是不要特地去区分流式计算与非流式计算的区别[因为归根结底,他们都是数据,我们要区分的,并不是数据本身,而是我们处理数据的方式]

在 rxin 的这个 slide 里,Apache Spark 2.0: Faster, Easier, and Smarter,第 17 ~ 26 也专门有说 2.0 里的 structure streaming,非常值得借鉴。

下面是其中两张需要理解的 ppt 截图:

本文来自:http://mp.weixin.qq.com/s/g5oZ8m-Ac-ExAmIcIGG1Yg

spark2.0的10个特性介绍的更多相关文章

  1. C# 10 完整特性介绍

    前言 开头防杠:.NET 的基础库.语言.运行时团队从来都是相互独立各自更新的,.NET 6 在基础库.运行时上同样做了非常多的改进,不过本文仅仅介绍语言部分. 距离上次介绍 C# 10 的特性已经有 ...

  2. Android Studio 2.0 稳定版新特性介绍

    Android Studio 2.0 最终迎来了稳定版本号,喜大普奔. 以下这篇文章是2.0新特性的一些简介. 假设想看具体内容请看这里<Android Studio有用指南> 文章转自这 ...

  3. 微软SMB 3.0文件共享协议新特性介绍

    SMB(*nix平台和Win NT4.0又称CIFS)协议是Windows平台标准文件共享协议.Linux平台通过samba来支持.SMB最新版本v3.0,在v2.0基础上针对WAN和分布式有改进.详 ...

  4. Java 11 新特性介绍

    Java 11 已于 2018 年 9 月 25 日正式发布,之前在Java 10 新特性介绍中介绍过,为了加快的版本迭代.跟进社区反馈,Java 的版本发布周期调整为每六个月一次——即每半年发布一个 ...

  5. Java 12 新特性介绍,快来补一补

    Java 12 早在 2019 年 3 月 19 日发布,它不是一个长久支持(LTS)版本.在这之前我们已经介绍过其他版本的新特性,如果需要可以点击下面的链接进行阅读. Java 11 新特性介绍 J ...

  6. Hadoop3.0新特性介绍,比Spark快10倍的Hadoop3.0新特性

    Hadoop3.0新特性介绍,比Spark快10倍的Hadoop3.0新特性 Apache hadoop 项目组最新消息,hadoop3.x以后将会调整方案架构,将Mapreduce 基于内存+io+ ...

  7. .NET Standard 2.0 特性介绍和使用指南

    .NET Standard 2.0 发布日期:2017年8月14日 公告原文地址 前言 早上起来.NET社区沸腾了,期待已久的.NET Core 2.0终于发布!根据个人经验,微软的产品一般在2.0时 ...

  8. .Net Core 2.0生态(3):ASP.NET Core 2.0 特性介绍和使用指南

    ASP.NET Core 2.0 发布日期:2017年8月14日 ASP.NET团队宣布ASP.NET Core 2.0正式发布,发布Visual Studio 2017 15.3支持ASP.NET ...

  9. .Net Core 2.0 生态(1).NET Standard 2.0 特性介绍和使用指南

    .NET Standard 2.0 发布日期:2017年8月14日 公告原文地址 前言 早上起来.NET社区沸腾了,期待已久的.NET Core 2.0终于发布!根据个人经验,微软的产品一般在2.0时 ...

随机推荐

  1. java Annotation 注解的使用

    源码地址:https://github.com/yylxy/JavaAnnotationTest.git java Annotation 注解的使用 ,代码中有详细的注释.是用AndroidStudi ...

  2. otter安装、使用

    一.otter简介 otter是阿里开源的一个分布式数据库同步系统,尤其是在跨机房数据库同步方面,有很强大的功能.它是基于数据库增量日志解析,实时将数据同步到本机房或跨机房的mysql/oracle数 ...

  3. 3.1 Go语言基础之指针

    区别于C/C++中的指针,Go语言中的指针不能进行偏移和运算,是安全指针. 要搞明白Go语言中的指针需要先知道3个概念:指针地址.指针类型和指针取值. 一.Go语言中的指针 Go语言中的函数传参都是值 ...

  4. SD卡状态监听(无序广播)

    import android.content.BroadcastReceiver; import android.content.Context; import android.content.Int ...

  5. 思科常见的防病毒ACL

    SW(config-ext-nacl)# 10 deny tcp any any eq 27665 SW(config-ext-nacl)# 20 deny tcp any any eq 16660 ...

  6. 阶段5 3.微服务项目【学成在线】_day05 消息中间件RabbitMQ_2.RabbitMQ研究-RabbitMQ介绍

    开发中消息队列通常有如下应用场景: 1.任务异步处理. 将不需要同步处理的并且耗时长的操作由消息队列通知消息接收方进行异步处理.提高了应用程序的响应时间. 2.应用程序解耦合 MQ相当于一个中介,生产 ...

  7. 解决Java中的HttpServletResponse中文乱码问题

    response.setHeader("Content-type", "textml;charset=UTF-8"); response.setCharacte ...

  8. Elasticsearch删除数据操作,你必须知道的一些坑

    前两天有同事打电话问我,说ES删除数据有没有什么坑? 我当时就问,是删索引还是删索引里的数据?她回答说是删数据,我说查出这些数据直接删除就好了,没有什么坑... 后来想想,关于ES数据的删除,之前确实 ...

  9. Unity Shader基础(1):基础

    一.Shaderlab语法 1.给Shader起名字 Shader "Custom/MyShader" 这个名称会出现在材质选择使用的下拉列表里 2. Properties (属性 ...

  10. jstack使用

    top -p 22072 -H  -p:查看某个进程 -H列出所有的线程 printf '%x' 22398 (16进制线程号) sudo -u tomcat jstack 22072 | grep ...