我们很荣幸地宣布,自7月26日起Databricks开始提供Apache Spark 2.0的下载,这个版本是基于社区在过去两年的经验总结而成,不但加入了用户喜爱的功能,也修复了之前的痛点。

本文总结了Spark 2.0的三大主题:更简单、更快速、更智能,另有Spark 2.0内容的文章汇总介绍了更多细节。

两个月前,Databricks发布了Apache Spark 2.0的技术预览版,如下表所见,目前我们有10%的集群都在使用这个版本,根据客户使用新版的经验及反馈意见,新版得以发布,Databricks很开心能成为Spark 2.0的首个商业供应商。

随着时间推移,各版本Apache Spark的使用率

现在,我们来深入了解一下Apache Spark 2.0的新特性。

一、更简单:ANSI SQL与更合理的API

Spark让我们引以为豪的一点就是所创建的API简单、直观、便于使用,Spark 2.0延续了这一传统,并在两个方面凸显了优势:

  1. 标准的SQL支持;
  2. 数据框(DataFrame)/Dataset (数据集)API的统一。

在SQL方面,我们已经对Spark的SQL功能做了重大拓展,引入了新的ANSI SQL解析器,并支持子查询功能。Spark 2.0可以运行所有99个TPC-DS查询(需求SQL:2003中的很多功能支持)。由于SQL是Spark应用所使用的主要接口之一,对SQL功能的拓展大幅削减了将遗留应用移植到Spark时所需的工作。

在编程API方面,我们合理化了API:

  • 在Scala/Java中统一了DataFrames与Dataset:从Spark 2.0开始,DataFrames只是行(row)数据集的typealias了。无论是映射、筛选、groupByKey之类的类型方法,还是select、groupBy之类的无类型方法都可用于Dataset的类。此外,这个新加入的Dataset接口是用作Structured Streaming的抽象,由于Python和R语言中编译时类型安全(compile-time type-safety)不属于语言特性,数据集的概念无法应用于这些语言API中。而DataFrame仍是主要的编程抽象,在这些语言中类似于单节点DataFrames的概念,想要了解这些API的相关信息,请参见相关笔记文章
  • SparkSession:这是一个新入口,取代了原本的SQLContext与HiveContext。对于DataFrame API的用户来说,Spark常见的混乱源头来自于使用哪个“context”。现在你可以使用SparkSession了,它作为单个入口可以兼容两者,点击这里来查看演示。注意原本的SQLContext与HiveContext仍然保留,以支持向下兼容。
  • 更简单、性能更佳的Accumulator API:我们设计了一个新的Accumulator API,不但在类型层次上更简洁,同时还专门支持基本类型。原本的Accumulator API已不再使用,但为了向下兼容仍然保留。
  • 基于DataFrame的机器学习API将作为主ML API出现:在Spark 2.0中,spark.ml包及其“管道”API会作为机器学习的主要API出现,尽管原本的spark.mllib包仍然保留,但以后的开发重点会集中在基于DataFrame的API上。
  • 机器学习管道持久化:现在用户可以保留与载入机器学习的管道与模型了,Spark对所有语言提供支持。查看这篇博文以了解更多细节,这篇笔记中也有相关样例。
  • R语言的分布式算法:增加对广义线性模型(GLM)、朴素贝叶斯算法(NB算法)、存活回归分析(Survival Regression)与聚类算法(K-Means)的支持。

二、速度更快:用Spark作为编译器

根据我们2015年对Spark的调查,91%的用户认为对Spark来说,性能是最为重要的。因此,性能优化一直是我们在开发Spark时所考虑的重点。在开始Spark 2.0的规划前,我们思考过这个问题:Spark的速度已经很快了,但能否突破极限,让Spark达到原本速度的10倍呢?

带着这个问题,我们切实考虑了在构建Spark物理执行层面时的方式。如果深入调查现代的数据引擎,比如Spark或者其他MPP数据库,我们会发现:CPU循环大多都做了无用功,比如执行虚拟函数调用,或者向CPU缓存或内存读取/写入中间数据;通过减少CPU循环中的浪费来优化性能,一直是我们在现代编译器上长时间以来的工作重点。

Spark 2.0搭载了第二代Tungsten引擎,该引擎是根据现代编译器与MPP数据库的理念来构建的,它将这些理念用于数据处理中,其主要思想就是在运行时使用优化后的字节码,将整体查询合成为单个函数,不再使用虚拟函数调用,而是利用CPU来注册中间数据。我们将这一技术称为“whole-stage code generation”。

在测试、对比Spark 1.6与Spark 2.0时,我们列出了在单核中处理单行数据所花费的时间(以十亿分之一秒为单位),下面的表格列出了Spark 2.0的优化内容。Spark 1.6包含代码生成技术(code generation)的使用,这一技术如今在一些顶尖的商业数据库中也有运用,正如我们看到的那样,使用了新whole-stage code generation技术后,速度比之前快了一个数量级。

这篇笔记中可以查看其运用:我们在单台机器上对10亿记录执行了aggregations和joins操作。

每行耗费(单线程)

这个新的引擎在执行端对端查询时是如何运作的?我们使用TPC-DS查询做了些初步分析,以对比Spark 1.6与Spark 2.0:

除此之外,为了改进Catalyst optimizer优化器对诸如nullability propagation之类常见查询的效果,我们还做了许多工作;另外还改进了矢量化Parquet解码器,新解码器的吞吐量增加了三倍。点击这里查看Spark 2.0优化的更多细节。

三、更智能:Structured Streaming

作为首个尝试统一批处理与流处理计算的工具,Spark Streaming一直是大数据处理的领导者。首个流处理API叫做DStream,在Spark 0.7中初次引入,它为开发者提供了一些强大的特性,包括:只有一次语义,大规模容错,以及高吞吐。

然而,在处理了数百个真实世界的Spark Streaming部署之后,我们发现需要在真实世界做决策的应用经常需要不止一个流处理引擎。他们需要深度整合批处理堆栈与流处理堆栈,整合内部存储系统,并且要有处理业务逻辑变更的能力。因此,各大公司需要不止一个流处理引擎,并且需要能让他们开发端对端“持续化应用”的全栈系统。

Spark 2.0使用一个新的API:Structured Streaming模块来处理这些用例,与现有流系统相比,Structured Streaming有三个主要的改进:

  1. 与批处理作业集成的API:想要运行流数据计算,开发者可针对DataFrame/Dataset API编写批处理计算,过程非常简单,而Spark会自动在流数据模式中执行计算,也就是说在数据输入时实时更新结果。强大的设计令开发者无需费心管理状态与故障,也无需确保应用与批处理作业的同步,这些都由系统自动解决。此外,针对相同的数据,批处理任务总能给出相同的结果。
  2. 与存储系统的事务交互: Structured Streaming会在整个引擎及存储系统中处理容错与持久化的问题,使得程序员得以很容易地编写应用,令实时更新的数据库可靠地提供、加入静态数据或者移动数据。
  3. 与Spark的其它组件的深入集成: Structured Streaming支持通过Spark SQL进行流数据的互动查询,可以添加静态数据以及很多已经使用DataFrames的库,还能让开发者得以构建完整的应用,而不只是数据流管道。未来,我们希望能有更多与MLlib及其它libraries的集成出现。

Spark 2.0搭载了初始alpha版的Strutured Streaming API,这是一个附在DataFrame/Dataset API上的(超小)扩展包。统一之后,对现有的Spark用户来说使用起来非常简单,他们能够利用在Spark 批处理API方面的知识来回答实时的新问题。这里关键的功能包括:支持基于事件时间的处理,无序/延迟数据,sessionization以及非流式数据源与Sink的紧密集成。

我们还更新了Databricks workspace以支持Structured Streaming。例如,在启动streaming查询时,notebook UI会自动显示其状态。

结论

Spark的用户最初使用Spark是因为它的易用性与高性能。Spark 2.0在这些方面达到了之前的两倍,并增加了对多种工作负载的支持,请尝试一下新版本吧。

文章转载自:http://geek.csdn.net/news/detail/91745?utm_source=tuicool&utm_medium=referral

英文原文地址:https://databricks.com/blog/2016/07/26/introducing-apache-spark-2-0.html

千呼万唤始出来:Apache Spark2.0正式发布的更多相关文章

  1. Apache Spark2.0正式发布

    Apache Spark2.0正式发布 7月26日起Databricks开始提供Apache Spark 2.0的下载,这个版本是基于社区在过去两年的经验总结而成,不但加入了用户喜爱的功能,也修复了之 ...

  2. Apache Kafka 1.0.0正式发布!

    千呼万唤始出来,经过7年的发展与完善,Apache Kafka 1.0.0正式发布!在笔者看来,比起1.0.0引入的新功能,此版本最大的意义在于标识Kafka各种组件功能的稳定性.不过我们还是来看下1 ...

  3. Apache Spark 2.2.0 正式发布

    本章内容: 待整理 参考文献: Apache Spark 2.2.0正式发布 Spark Release 2.2.0

  4. 官宣 | Apache Flink 1.12.0 正式发布,流批一体真正统一运行!

    官宣 | Apache Flink 1.12.0 正式发布,流批一体真正统一运行! 原创 Apache 博客 [Flink 中文社区](javascript:void(0) 翻译 | 付典 Revie ...

  5. Apache Flink 1.12.0 正式发布,DataSet API 将被弃用,真正的流批一体

    Apache Flink 1.12.0 正式发布 Apache Flink 社区很荣幸地宣布 Flink 1.12.0 版本正式发布!近 300 位贡献者参与了 Flink 1.12.0 的开发,提交 ...

  6. 特性速览| Apache Hudi 0.5.3版本正式发布

    1. 下载连接 源代码下载:Apache Hudi 0.5.3 Source Release (asc, sha512) 0.5.3版本相关jar包地址:https://repository.apac ...

  7. Spark2.0编译

    Spark2.0编译 1 前言 Spark2.0正式版于今天正式发布,本文基于CDH5.0.2的Spark编译. 2 编译步骤 #2.1 下载源码 wget https://github.com/ap ...

  8. 初识Spark2.0之Spark SQL

    内存计算平台spark在今年6月份的时候正式发布了spark2.0,相比上一版本的spark1.6版本,在内存优化,数据组织,流计算等方面都做出了较大的改变,同时更加注重基于DataFrame数据组织 ...

  9. 图文解析Spark2.0核心技术(转载)

    导语 Spark2.0于2016-07-27正式发布,伴随着更简单.更快速.更智慧的新特性,spark 已经逐步替代 hadoop 在大数据中的地位,成为大数据处理的主流标准.本文主要以代码和绘图的方 ...

随机推荐

  1. webform 上传

    要使用控件 - FileUpload 1.如何判断是否选中文件? FileUpload.FileName - 选中文件的文件名,如果长度不大于0,那么说明没选中任何文件 js - f.value.le ...

  2. Hive_配置远程Metastore

    注 : 待测试 一.准备两三台linux机器,最好是hadoop集群环境 机器A:10.0.0.2 机器B:10.0.0.3 机器C:10.0.0.4 二.个机器安装信息 机器A安装mysql(用于存 ...

  3. HDU--洗衣服

    洗衣服 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  4. yii笔一----基础,安装,结构,增删改查基本操作

    从yii中文站开始http://www.yiichina.com/ Yii 是一个高性能,基于组件的 PHP 框架 一. 1.安装yii方式 composer安装或者下载一份应用程序模板.刚开始学习, ...

  5. 基于 Asp.Net的 Comet 技术解析

    Comet技术原理 来自维基百科:Comet是一种用于web的技术,能使服务器能实时地将更新的信息传送到客户端,而无须客户端发出请求,目前有两种实现方式,长轮询和iframe流. 简单的说是一种基于现 ...

  6. 企业IT管理员IE11升级指南【4】—— IE企业模式介绍

    企业IT管理员IE11升级指南 系列: [1]—— Internet Explorer 11增强保护模式 (EPM) 介绍 [2]—— Internet Explorer 11 对Adobe Flas ...

  7. Win7&Ubuntu12.04 双系统引导问题

    周末的时候手贱,重装系统,导致原来的ubuntu12.04和win7双系统的引导不见了,所以在此进行一下说明,如何修复. 1. win7和ubuntu12.04双系统引导修复 问题描述:    在重装 ...

  8. Outlook HTML渲染引擎

    OutLook始终不离不弃 是不是很讨厌为Email代码兼容Outlook? 太遗憾了!虽然光都有尽头,但Outlook始终存在. 为了应付Email的怪癖,我们花了很多时间测试,确保我们搞定了所有O ...

  9. Azure PowerShell (10) 使用PowerShell导出订阅下所有的Azure VM和Cloud Service的高可用情况

    <Windows Azure Platform 系列文章目录> 本文介绍的是国内由世纪互联运维的Azure China服务. 该脚本下载地址在http://files.cnblogs.co ...

  10. 《Entity Framework 6 Recipes》中文翻译系列 (35) ------ 第六章 继承与建模高级应用之TPH继承映射中使用复合条件

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 6-11  TPH继承映射中使用复合条件 问题 你想使用TPH为一张表建模,建模中使 ...