前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >什么是Apache Spark?这篇文章带你从零基础学起

什么是Apache Spark?这篇文章带你从零基础学起

作者头像
IT阅读排行榜
发布2019-05-16 11:41:27
1.3K0
发布2019-05-16 11:41:27
举报
文章被收录于专栏:华章科技

导读:Apache Spark是一个强大的开源处理引擎,最初由Matei Zaharia开发,是他在加州大学伯克利分校的博士论文的一部分。Spark的第一个版本于2012年发布。

Apache Spark是快速、易于使用的框架,允许你解决各种复杂的数据问题,无论是半结构化、结构化、流式,或机器学习、数据科学。它也已经成为大数据方面最大的开源社区之一,拥有来自250多个组织的超过1000个贡献者,以及遍布全球570多个地方的超过30万个Spark Meetup社区成员。

在本文中,我们将提供一个了解Apache Spark的切入点。我们将解释Spark Job和API背后的概念。

作者:托马兹·卓巴斯(Tomasz Drabas),丹尼·李(Denny Lee)

如需转载请联系大数据(ID:hzdashuju)

01 什么是Apache Spark

Apache Spark是一个开源的、强大的分布式查询和处理引擎。它提供MapReduce的灵活性和可扩展性,但速度明显更高:当数据存储在内存中时,它比Apache Hadoop快100倍,访问磁盘时高达10倍。

Apache Spark允许用户读取、转换、聚合数据,还可以轻松地训练和部署复杂的统计模型。Java、Scala、Python、R和SQL都可以访问 Spark API。

Apache Spark可用于构建应用程序,或将其打包成为要部署在集群上的库,或通过笔记本(notebook)(例如Jupyter、Spark-Notebook、Databricks notebooks和Apache Zeppelin)交互式执行快速的分析。

Apache Spark提供的很多库会让那些使用过Python的pandas或R语言的data.frame 或者data.tables的数据分析师、数据科学家或研究人员觉得熟悉。非常重要的一点是,虽然Spark DataFrame会让pandas或data.frame、data.tables用户感到熟悉,但是仍有一些差异,所以不要期望过高。具有更多SQL使用背景的用户也可以用该语言来塑造其数据。

此外,Apache Spark还提供了几个已经实现并调优过的算法、统计模型和框架:为机器学习提供的MLlib和ML,为图形处理提供的GraphX和GraphFrames,以及Spark Streaming(DStream和Structured)。Spark允许用户在同一个应用程序中随意地组合使用这些库。

Apache Spark可以方便地在本地笔记本电脑上运行,而且还可以轻松地在独立模式下通过YARN或Apache Mesos于本地集群或云中进行部署。它可以从不同的数据源读取和写入,包括(但不限于)HDFS、Apache Cassandra、Apache HBase和S3:

▲资料来源:Apache Spark is the smartphone of Big Data

http://bit.ly/1QsgaNj

02 Spark作业和API

在本节中,我们将简要介绍Apache Spark作业(job)和API

1. 执行过程

任何Spark应用程序都会分离主节点上的单个驱动进程(可以包含多个作业),然后将执行进程(包含多个任务)分配给多个工作节点,如下图所示:

驱动进程会确定任务进程的数量和组成,这些任务进程是根据为指定作业生成的图形分配给执行节点的。注意,任何工作节点都可以执行来自多个不同作业的多个任务。

Spark作业与一系列对象依赖相关联,这些依赖关系是以有向无环图(DAG)的方式组织的,例如从Spark UI生成的以下示例。基于这些,Spark可以优化调度(例如确定所需的任务和工作节点的数量)并执行这些任务。

▲有关DAG调度器的更多信息,请参考:

http://bit.ly/29WTiK8

2. 弹性分布式数据集

弹性分布式数据集(简称RDD)是不可变Java虚拟机(JVM)对象的分布式集合,Apache Spark就是围绕着RDD而构建的。我们使用Python时,尤为重要的是要注意Python数据是存储在这些JVM对象中的。

这些对象允许作业非常快速地执行计算。对RDD的计算依据缓存和存储在内存中的模式进行:与其他传统分布式框架(如Apache Hadoop)相比,该模式使得计算速度快了一个数量级。

同时,RDD会给出一些粗粒度的数据转换(例如map(...)、reduce(...)和filter(...)),保持Hadoop平台的灵活性和可扩展性,以执行各种各样的计算。RDD以并行方式应用和记录数据转换,从而提高了速度和容错能力。

通过注册这些转换,RDD提供数据沿袭——以图形形式给出的每个中间步骤的祖先树。这实际上保护RDD免于数据丢失——如果一个RDD的分区丢失,它仍然具有足够的信息来重新创建该分区,而不是简单地依赖复制。

更多数据沿袭信息参见:

http://ibm.co/2ao9B1t

RDD有两组并行操作:转换(返回指向新RDD的指针)和动作(在运行计算后向驱动程序返回值)。

请参阅Spark编程指南,获取最新的转换和动作列表:

http://spark.apache.org/docs/latest/programming-guide.html#rdd-operations

某种意义上来说,RDD转换操作是惰性的,因为它们不立即计算其结果。只有动作执行了并且需要将结果返回给驱动程序时,才会计算转换。该延迟执行会产生更多精细查询:针对性能进行优化的查询。

这种优化始于Apache Spark的DAGScheduler——面向阶段的调度器,使用如上面截图中所示的阶段进行转换。由于具有单独的RDD转换和动作,DAGScheduler可以在查询中执行优化,包括能够避免shuffle数据(最耗费资源的任务)。

有关DAGScheduler和优化(特别是窄或宽依赖关系)的更多信息,有一个很好的参考是《Effective Transformations》第5章:

https://smile.amazon.com/High-Performance-Spark-Practices-Optimizing/dp/1491943203

3. DataFrame

DataFrame像RDD一样,是分布在集群的节点中的不可变的数据集合。然而,与RDD不同的是,在DataFrame中,数据是以命名列的方式组织的。

如果你熟悉Python的pandas或者R的data.frames,这是一个类似的概念。

DataFrame旨在使大型数据集的处理更加容易。它们允许开发人员对数据结构进行形式化,允许更高级的抽象。在这个意义上来说,DataFrame与关系数据库中的表类似。DataFrame提供了一个特定领域的语言API来操作分布式数据,使Spark可以被更广泛的受众使用,而不只是专门的数据工程师。

DataFrame的一个主要优点是,Spark引擎一开始就构建了一个逻辑执行计划,而且执行生成的代码是基于成本优化程序确定的物理计划。与Java或者Scala相比,Python中的RDD是非常慢的,而DataFrame的引入则使性能在各种语言中都保持稳定。

4. Catalyst优化器

Spark SQL是Apache Spark最具技术性的组件之一,因为它支持SQL查询和DataFrame API。Spark SQL的核心是Catalyst优化器。优化器基于函数式编程结构,并且旨在实现两个目的:简化向Spark SQL添加新的优化技术和特性的条件,并允许外部开发人员扩展优化器(例如,添加数据源特定规则,支持新的数据类型等等):

详细信息,请查看Deep Dive into Spark SQL’s Catalyst Optimizer :

http://bit.ly/271I7Dk

和Apache Spark DataFrames:

Simple and Fast Analysis of Structured Data

http://bit.ly/29QbcOV

6. 钨丝计划

Tungsten(钨丝)是Apache Spark执行引擎项目的代号。该项目的重点是改进Spark算法,使它们更有效地使用内存和CPU,使现代硬件的性能发挥到极致。

该项目的工作重点包括:

  • 显式管理内存,以消除JVM对象模型和垃圾回收的开销。
  • 设计利用内存层次结构的算法和数据结构。
  • 在运行时生成代码,以便应用程序可以利用现代编译器并优化CPU。
  • 消除虚拟函数调度,以减少多个CPU调用。
  • 利用初级编程(例如,将即时数据加载到CPU寄存器),以加速内存访问并优化Spark的引擎,以有效地编译和执行简单循环。

更多详细信息,请参考Project Tungsten:

Bringing Apache Spark Closer to Bare Metal

https://databricks.com/blog/2015/04/28/project-tungstenbringing-spark-closer-to-bare-metal.html

Deep Dive into Project Tungsten: Bringing Spark Closer to Bare Metal [SSE 2015 Video and Slides

https://spark-summit.org/2015/events/deep-dive-into-project-tungsten-bringing-spark-closerto-bare-metal/

Apache Spark as a Compiler: Joining a Billion Rows per Second on a Laptop

https://databricks.com/blog/2016/05/23/apache-sparkas-a-compiler-joining-a-billion-rows-per-second-on-alaptop.html

本文摘编自《PySpark实战指南:利用Python和Spark构建数据密集型应用并规模化部署》,经出版方授权发布。

延伸阅读《PySpark实战指南》

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-05-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大数据DT 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据保险箱
数据保险箱(Cloud Data Coffer Service,CDCS)为您提供更高安全系数的企业核心数据存储服务。您可以通过自定义过期天数的方法删除数据,避免误删带来的损害,还可以将数据跨地域存储,防止一些不可抗因素导致的数据丢失。数据保险箱支持通过控制台、API 等多样化方式快速简单接入,实现海量数据的存储管理。您可以使用数据保险箱对文件数据进行上传、下载,最终实现数据的安全存储和提取。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档