购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.1 Spark简介

1.1.1 为什么要学习Spark

首先,Spark作为目前大数据计算领域必备计算引擎已经成为不争的事实。其次,Spark的批量计算在生产环境中基本上完全替代了传统的MapReduce计算,Spark的流式计算则取代了大部分以Storm为基础的流式计算。最后,随着人工智能的迅速发展,Spark近几年也持续在机器学习和AI方向发力,在机器学习的模型训练中起到至关重要的作用。基于以上事实,无论是数据研发工程师还是机器学习等算法工程师,Spark都是必须掌握的一门技术。

那么,为什么Spark会拥有如此重要的地位呢?这和Spark本身的特点有直接关系。Spark的特点是计算速度快、易于使用,此外,Spark还提供了一站式大数据解决方案,支持多种资源管理器,且Spark生态圈丰富,具体如图1-3所示。

图1-3 Spark的特点

1.计算速度快

Spark将每个任务构造成DAG(Directed Acyclic Graph,有向无环图)来执行,其内部计算过程是基于RDD(Resilient Distributed Dataset,弹性分布式数据集)在内存中对数据进行迭代计算的,因此运行效率很高。

Spark官网上的数据表明,当Spark计算所需的数据在磁盘上时,Spark的数据处理速度是Hadoop MapReduce的10倍以上;当Spark计算所需的数据在内存中时,Spark的数据处理速度是Hadoop MapReduce的100倍以上。

2.易于使用

首先,Spark的算子十分丰富。Spark支持80多个高级的运算操作,开发人员只需要按照Spark封装好的API实现即可,不需要关心Spark的底层架构,使用起来易于上手,十分方便。其次,Spark支持多种编程语言,包括Java、Scala、Python等,这使得具有不同编程语言背景的开发人员都能快速开展Spark应用的开发并相互协作,而不用担心因编程语言不同带来的困扰。最后,由于Spark SQL的支持,Spark开发门槛进一步降低了,开发人员只需要将数据加载到Spark中并映射为对应的表,就可以直接使用SQL语句对数据进行分析和处理,使用起来既简单又方便。综上所述,Spark是一个易于使用的大数据平台。

3.一站式大数据解决方案

Spark提供了多种类型的开发库,包括Spark Core API、即时查询(Spark SQL)、实时流处理(Spark Streaming)、机器学习(Spark MLlib)、图计算(GraphX),使得开发人员可以在同一个应用程序中按需使用各种类库,而不用像传统的大数据方案那样将离线任务放在Hadoop MapReduce上运行,也不需要将实时流式计算任务放在Flink上运行并维护多个计算平台。Spark提供了从实时流式计算、离线计算、SQL计算、图计算到机器学习的一站式解决方案,为多场景应用的开发带来了极大便利。

4.支持多种资源管理器

Spark支持Standalone、Hadoop YARN、Apache Mesos、Kubernetes等多种资源管理器,用户可以根据现有的大数据平台灵活地选择运行模式。

5.Spark生态圈丰富

Spark生态圈以Spark Core为核心,支持从HDFS、Amazon S3、HBase、ElasticSearch、MongoDB、MySQL、Kafka等多种数据源读取数据。同时,Spark支持以Standalone、Hadoop YARN、Apache Mesos、Kubernetes为资源管理器调度任务,从而完成Spark应用程序的计算任务。另外,Spark应用程序还可以基于不同的组件来实现,如Spark Shell、Spark Submit、Spark Streaming、Spark SQL、BlinkDB(权衡查询)、Spark MLlib(机器学习)、GraphX(图计算)和SparkR(数学计算)等组件。Spark生态圈已经从大数据计算和数据挖掘扩展到图计算、机器学习、数学计算等多个领域。

图1-4对Spark的特点做了全面总结。

图1-4 Spark的特点

1.1.2 学好Spark的关键点

Spark的诸多优势使得Spark成为目前最流行的计算引擎,那么学好Spark的关键点都有哪些呢?具体如图1-5所示。

图1-5 学好Spark的关键点

(1)只有充分理解Spark分布式计算引擎背后的原理,才能为后续基于不同场景快速实现不同的功能以及进行任务优化打下坚实的基础。

(2)只有充分了解算子背后的原理,才能在不同场景中游刃有余地使用它们。

(3)通常,基于Spark实现某个数据分析功能相对而言比较简单,可能只需要简单的几行SQL代码就能实现。但是,我们在实践中经常会遇到数据倾斜、长尾任务、部分任务超时等情况,此时就需要熟悉数据模型和Spark算子的优化逻辑,并根据数据模型的特点和各个任务上数据的分布对其进行调优,以消除数据倾斜等问题,保障任务稳定运行。

(4)在对Spark的原理和使用有了一定的了解后,我们便可以尝试阅读Spark源码,这对于在实践中遇到问题时快速定位和处理问题会有很大的帮助。尤其在遇到错误时,我们可以通过源码快速了解出错的日志处Spark源码上下文的执行逻辑,从而快速定位问题,避免花费大量精力和反复尝试解决问题。

(5)“实践是检验真理的唯一标准”这句话同样适用于大数据领域。同样的代码在不同规模的数据集上有时候能正常运行并计算出结果,但有时候会出现计算超时或任务失败等情况,这在日常的大数据开发中是很常见的事情。大数据计算首先需要有大量的数据才能更好地验证应用程序的稳定性和健壮性,因此基于真实数据的实战是掌握Spark的关键。

(6)除了基于真实数据进行实战之外,丰富的业务场景也是学好Spark的关键点之一。只有在具备丰富的应用场景后,我们才能更好地理解Spark模块在不同场景中的应用,如Spark流式计算、Spark机器学习、Spark图计算等模块。

1.1.3 Spark学习难点

在了解了学好Spark的关键点之后,我们再来看一看Spark都有哪些学习难点。

1.1.4 本书编写思路

本书由易到难,先深入剖析原理,再进行代码实战。本书会尽量避免介绍大量的原理,以免枯燥乏味;同时,本书也会尽量避免在读者不了解原理的情况下进行太多的源码实战,以免读者仅仅成为Spark API使用者。以上两种情况都不利于Spark的学习。

本书还将介绍 Spark 机器学习方面的内容。考虑到大部分读者可能未接触过机器学习,因此在介绍的时候,我们首先会对机器学习的基本原理进行介绍,以便读者在使用Spark提供的机器学习函数时,对背后的原理能有更清晰的认识。

在内容编排上,本书对基础概念的介绍力求简洁,对于高级特性,则尽可能详细介绍背后的原理。因此,无论是刚开始学习Spark,还是已有一定的Spark开发经验,本书都值得阅读。

阅读完本书后,您将全面掌握Spark内核原理、Spark资源调度、Spark离线计算、Spark流式计算、Spark任务调优、Spark机器学习等知识。本书最后还介绍了大数据的未来趋势及相关技术,比如数据湖和AI技术,为您未来决胜大数据计算打下坚实基础。 vVL36PcAjd6gubtx/JDDcTQQR/8PUGJBjk64us4HXk/zFajITIKMz0Wf513BYlhS

点击中间区域
呼出菜单
上一章
目录
下一章
×