Spark实战第二版(涵盖Spark3.0)--第1章 Spark究竟是什么

关注公众号:登峰大数据,阅读Spark实战第二版(完整中文版),系统学习Spark3.0大数据框架!

如果您觉得作者翻译的内容有帮助,请分享给更多人。您的分享,是作者翻译的动力!

 

第一章 Spark究竟是什么

本章包括

  • Apache Spark是什么和Spark的应用场景

  • 分布式技术的基础知识

  • Spark的四大支柱

  • 存储和API:dataframe

上世纪80年代,当我还是个孩子的时候,学习了Basic编程,我无法理解为什么我们不能实现基本执法活动的自动化,比如速度控制、闯红灯和停车计时器。每一件事情似乎很简单:我曾经说过,成为一个优秀的程序员,你应该避免GOTO语句。这就是我所做的,从12岁开始,我就试图构造我的代码。然而,当我开发单机游戏的时候,遇到了无法想象的数据量(和蓬勃发展的物联网),因为我的游戏拥有64kb的内存,所以当我耐心地等待游戏被保存在Atari 1010录音机上时,我绝对不知道数据集会变得更大,也不知道数据会有这么快的增长速度。

短短35年之后,所有我想象中的用例似乎都是可访问的(而我的游戏则是无用的)。数据的增长速度已经超过了支持它的硬件技术。一组小型计算机集群的成本比一台大型计算机还要低。内存比2005年便宜了一半,而2005年的内存比2000年便宜了五倍。网络速度快了很多倍,现代数据中心提供高达100gigabits / s (Gbps)的速度,比五年前的家庭Wi-Fi快近2000倍。这就是促使人们问这个问题的一些因素:我如何使用分布式内存计算来分析大量数据?

当您阅读文献或在web上搜索关于Apache Spark的信息时,您可能会发现它是一个用于大数据的工具、Hadoop的继承者、分析平台、集群计算机框架等等。

本章实验

 

本章中的实验可以在GitHub上找到:https://github.com/jgperrin/net.jgp.books.spark.ch01 实验编号为#400。如果您不熟悉GitHub和Eclipse,附录A、B、C和D提供了指导。

1.1 概述:Spark是什么?Spark能做什么?

在本节中,您将通过几个用例场景,首先了解Spark是什么,然后了解Spark可以做什么。第一部分总结了如何将Spark集成为一个软件栈并由数据科学家使用。

1.1.1 Spark是什么

Spark不仅仅是一个数据科学家的软件栈。在构建应用程序时,需要在操作系统之上构建它们,如图1.1所示。操作系统提供的服务使你的应用程序开发更容易;换句话说,您并不需要为所开发的每个应用程序构建文件系统或网络驱动程序。

Spark实战第二版(涵盖Spark3.0)--第1章 Spark究竟是什么

图1.1 当您编写应用程序时,使用操作系统提供的服务。

随着对计算能力的需求增加,对分布式计算的需求也随之增加。随着分布式计算的出现,分布式应用程序必须包含这些分布式功能。图1.2显示了向应用程序添加更多组件所增加的复杂性。

Spark实战第二版(涵盖Spark3.0)--第1章 Spark究竟是什么

图1.2 编写分布式面向数据应用程序的一种方法是使用库或其他构件在应用程序级嵌入所有控件。结果,应用程序变得更胖,更难以维护。

说了这么多,Apache Spark看起来可能像一个复杂的系统,需要您有大量的先验知识。我相信您只需要Java和关系数据库管理系统(RDBMS)技能就可以理解、使用、构建应用程序并扩展Spark。

应用程序变得更加智能,可以生成报告和执行数据分析(包括数据聚合、线性回归或简单地显示甜甜圈图表)。因此,当您想要向应用程序添加这样的分析功能时,必须链接库或构建自己的库。所有这些都会使应用程序变得更大(或更胖,就像在胖客户机中一样)、更难维护、更复杂,并因此对企业来说更昂贵。

“那么,为什么不把这些功能放在操作系统级别上呢?”你可能会问。把这些功能放在一个较低的层次,比如操作系统,有很多好处,包括以下几点:

  • 提供一种处理数据的标准方法(有点像关系数据库的结构化查询语言或SQL)。

  • 降低应用程序的开发(和维护)成本。

  • 使您能够专注于理解如何使用工具,而不是工具如何工作。(例如,Spark执行分布式数据接入,可以了解如何从中获益,而不必完全掌握Spark完成任务的方式。)

对我来说,Spark已经变成了一个分析操作系统。图1.3显示了这个简化的堆栈。

Spark实战第二版(涵盖Spark3.0)--第1章 Spark究竟是什么

图1.3 Apache Spark通过向应用程序提供服务,简化了面向分析的应用程序的开发,就像操作系统一样。

在本章中,您将学习一些Apache Spark用于不同行业和不同项目规模的用例场景。这些场景将给你一个关于Spark能实现什么的概述。

我坚信,为了更好地理解我们所处的位置,我们应该回顾历史。这也适用于信息技术(IT):如果你想了解我的观点,请阅读附录E。

现在场景已经设置好,您将深入Spark。我们将从全局概述开始,了解存储和api,最后完成第一个示例。

1.1.2 Spark的四大支柱

在所有Spark文档中都可以找到如下图的经典图表,其中显示了用于Spark的四个支柱:Spark SQL、Spark Streaming、Spark MLlib(用于机器学习)和位于Spark Core之上的GraphX。尽管这是Spark堆栈的精确表示,但我发现这个精确表示有局限性。需要扩展堆栈以显示硬件、操作系统和应用程序,如图1.4所示。

Spark实战第二版(涵盖Spark3.0)--第1章 Spark究竟是什么

图1.4 应用程序以及其他应用程序正在通过统一的API与Spark的四个支柱(sql、流、机器学习和图计算)通信。Spark保护您不受操作系统和硬件约束:不必担心应用程序在哪里运行,或者它是否有正确的数据。Spark会处理的。但是,如果需要的话,您的应用程序仍然可以访问操作系统或硬件。

当然,运行Spark的集群可能不是您的应用程序专用的,但是您的工作将使用以下内容:

  • Spark SQL来运行数据操作,比如RDBMS中的传统SQL作业。Spark SQL提供了api和SQL来操作数据。您将在第11章中学习Spark SQL,并在之后的大部分章节中阅读更多关于它的内容。Spark SQL是Spark的基石。

  • Spark Streaming,特别是Spark结构化流,用于分析流数据。Spark的统一API将帮助您以类似的方式处理数据,无论它是流数据还是批处理数据。您将在第10章中学习流处理的细节。

  • 用于机器学习的Spark MLlib和最近在深度学习中的扩展。机器学习、深度学习和人工智能有专门的书籍。

  • 利用图数据结构。要了解更多关于GraphX的信息,可以阅读Michael Malak和Robin East合著的Spark GraphX in Action (Manning, 2016)。

1.2 如何使用Spark?

在本节中,通过关注典型的数据处理场景和数据科学场景,您将详细了解如何使用Apache Spark。无论您是数据工程师还是数据科学家,都能够在工作中使用Apache Spark。

1.2.1 数据处理/工程场景中的Spark

Spark可以用许多不同的方式处理数据。但是,当它在大数据场景中发挥作用时,它表现出色,在大数据场景中,可以接入数据、清理数据、转换数据并重新发布数据。

我喜欢把数据工程师看作数据准备人员和数据后勤人员。他们确保数据可用,数据质量规则成功应用,转换成功执行,数据对其他系统或部门可用,包括业务分析师和数据科学家。数据工程师也可以承担数据科学家的工作并将其产业化。

Spark是数据工程师的完美工具。数据工程在一个典型的Spark(大数据)场景中执行的四个步骤如下:

  1. 接入数据

  2. 数据质量(DQ)的提高

  3. 转换

  4. 发布数据

如图1.5所示

Spark实战第二版(涵盖Spark3.0)--第1章 Spark究竟是什么

图1.5典型数据处理场景中的Spark。第一步是获取数据。在这个阶段,数据是原始的;接下来可能需要应用一些数据质量(DQ)。现在可以转换数据了。一旦转换了数据,数据就更丰富了。现在是发布或共享它的时候了,这样组织中的人员就可以在它之上执行操作并基于它做出决策。

该过程包括四个步骤,每一步之后,数据到达一个区域:(未完待续