关注公众号:登峰大数据,阅读Spark实战第二版(完整中文版),系统学习Spark3.0大数据框架!
如果您觉得作者翻译的内容有帮助,请分享给更多人。您的分享,是作者翻译的动力!
关于这本书
当我开始写这本书的时候,也就是你们现在读的这本书,Spark实战(第二版),我的目标是:
-
帮助Java社区的朋友使用Apache Spark,并且说明使用Spark,不需要学习Scala或Python。
-
解释Apache Spark、(大)数据工程和数据科学背后的关键概念,除了关系数据库和一些SQL之外,您不需要了解其他任何东西。
-
宣传Spark是一个为分布式计算和分析而设计的操作系统。
我相信在教授任何计算机科学知识时,都应该有大量的例子。书中的例子是学习过程中必不可少的一部分。我把它们设计得尽可能接近真实场景。我的数据集来自有质量缺陷的现实生活;它们不是理想的教科书数据集:“总是可以正常工作”。这就是为什么,当结合这些例子和数据集时,您将以一种比消毒的方式更实用的方式工作和学习。我把这些例子称为实验,希望你们能从中得到启发,并用它们来进行实验。
插图无处不在。“一图胜千言”这句名言为您省去了额外阅读的183,000字。
谁该读本书
将工作头衔与一本书联系起来是一项困难的任务,所以如果你的头衔是数据工程师、数据科学家、软件工程师或数据/软件架构师,你肯定会很高兴。如果你是一个企业架构师,嗯,你可能知道所有这些,就像企业架构师知道关于一切的一切,不是吗?更重要的是,如果你想收集更多关于这些主题的知识,这本书会很有帮助:
-
使用Apache Spark构建分析和数据管道:接入、转换和导出/发布数据。
-
不需要学习Scala或Hadoop就可以使用Spark:用Java学习Spark。
-
理解关系数据库和Spark之间的区别。
-
关于大数据的基本概念,包括在Spark环境中可能遇到的关键Hadoop组件。
-
Spark在企业架构中的位置。
-
在大数据环境中使用您现有的Java和RDBMS技能。
-
理解dataframe API。
-
通过在Spark中接入数据来集成关系数据库。
-
通过流收集数据。
-
了解这个行业的发展,以及为什么Spark是一个很好的选择。
-
理解和使用核心角色:DAAataFrame。
-
了解什么是弹性分布式数据集(RDDs),以及为什么不应该(再)使用它们。
-
理解如何与Spark交互。
-
了解Spark的各个组成部分:driver, executors, master and workers, Catalyst, Tungsten。
-
学习关键hadoop派生技术(如YARN或HDFS)的作用。
-
理解资源管理器(如YARN、Mesos和内置管理器)的角色。
-
以批处理模式和流方式从各种文件中接入数据。
-
使用SQL和Spark。
-
操作Spark提供的静态函数。
-
理解什么是不可变性以及它为什么重要。
-
使用Java用户自定义函数(udf)扩展Spark。
-
使用新的数据源扩展Spark。
-
将数据从JSON线性化,这样就可以使用SQL了。
-
在dataframe上执行聚合和联合。
-
使用用户定义聚合函数(UDAFs)扩展聚合。
-
理解缓存和检查点之间的区别,并提高Spark应用程序的性能。
-
导出数据到文件和数据库。
-
了解AWS、Azure、IBM Cloud、GCP和本地集群上的部署。
-
从CSV、XML、JSON、文本、Parquet、ORC和Avro文件中获取数据。
-
扩展数据源,并举例说明如何使用EXIF获取照片元数据,重点介绍数据源API v1。
-
在构建管道时使用带Spark的Delta Lake。
你将从这本书中学到什么?这本书的目的是教你如何在应用程序中使用Spark,或者为Spark构建特定的应用程序。我为数据工程师和Java软件工程师设计了这本书。当我开始学习Spark时,所有东西都是用Scala编写的,几乎所有文档都在官方网站上,Stack Overflow每隔几个月就会显示一次Spark问题。当然,文档声称Spark有一个Java API,但是高级示例很少。当时,我的团队成员对学习Spark,还是学习Scala感到困惑,管理层希望得到结果。我的团队成员是我写这本书的动力。
我假设您具有基本的Java和RDBMS知识。我在所有示例中使用Java 8,即使Java 11已经存在。
阅读本书不需要具备Hadoop知识,但是因为您将需要一些Hadoop组件(非常少),所以我将介绍它们。如果你已经知道Hadoop,你肯定会发现这本书令人耳目一新。您不需要任何Scala知识,因为这是一本关于Spark和Java的书。当我还是个孩子的时候(我必须承认,现在仍然如此),我读了很多连环画,介于漫画书和漫画小说之间。因此,我喜欢插图,在这本书中我有很多插图。图1显示了一个带有几个组件、图标和图例的典型图表。
图1 在本书的一个典型插图中使用的图例
本书是如何组织的
本书共分四部分和十八个附录。
第1部分给出Spark的关键内容。你将学习理论和一般概念,但不要绝望(现在);我提供了许多示例和图表。它读起来就像一本漫画书。
-
第1章是一个简单例子的全面介绍。您将了解Spark为什么是分布式分析操作系统。
-
第2章介绍了一个简单的Spark过程。
-
第3章介绍了dataframe的强大功能,它结合了Spark的API和存储能力。
-
第4章介绍延迟执行,比较Spark和RDBMS,并介绍了有向无环图(DAG)。
-
第5章和第6章是相关的:将构建一个小型应用程序,构建一个集群,并部署您的应用程序。第5章是关于构建一个小应用程序,而第6章是部署应用程序。
在第2部分中,您将开始深入了解有关接入数据的实际示例。接入是将数据带入Spark的过程。它并不复杂,但有很多可能性和组合。
-
第7章描述了从文件中接入的数据:CSV、文本、JSON、XML、Avro、ORC和Parquet。每种文件格式都有自己的示例。
-
第8章介绍了从数据库中接入数据:数据将来自关系数据库和其他数据存储。
-
第9章是关于从自定义数据源接入任何东西。
-
第10章关注流数据。
第3部分是关于数据转换的:我将其称为重数据提升。您将了解已处理数据的数据质量、转换和发布。这部分的大部分内容讨论了使用SQL和它的API、聚合、缓存以及使用UDF扩展Spark。
-
第11章是关于众所周知的查询语言SQL。
-
第12章教你如何执行转换。
-
第13章将转换扩展到整个文档的层次。本章还解释了静态函数,这是Spark的许多重要方面之一。
-
第14章是关于使用用户定义函数扩展Spark的。
-
聚合也是一个众所周知的数据库概念,它可能是分析的关键。第15章介绍了聚合,包括Spark和自定义聚合。
最后,第4部分将更接近生产环境,并关注更高级的主题。您将学习分区和导出数据、部署约束(包括云计算)和优化
-
第16章着重于优化技术:缓存和检查点。
-
第17章是关于将数据导出到数据库和文件的。本章还解释了如何使用Delta Lake,这是一个接近Spark内核的数据库。
-
第18章详细介绍了部署所需的参考架构和安全性。这绝对是少动手,但充满了关键信息。
这些附录虽然不是必需的,但也提供了丰富的信息:安装、故障排除和上下文。其中很多都是在Java上下文中针对Apache Spark的精心策划的引用。
关于代码
正如我所说的,每一章(除了6章和18章)都有结合代码和数据的实验。源代码存在编号清单中,和与正常文本一致的行中。在这两种情况下,源代码都使用固定宽度的字体进行格式化,以便与普通文本分开。有时代码也用粗体显示,以突出显示代码块中更重要的代码。
在Apache 2.0许可下,所有代码都可以在GitHub上免费获得。数据可能有不同的许可证。每个章节都有自己的存储库:第1章将在https://github.com/jgperrin/net.jgp.books.spark.ch01,第15章的代码在https://github.com/jgperrin/net.jgp.books.spark.ch15,等等,以此类推。有两个例外:
-
第6章使用第5章的代码。
-
第18章详细讨论了部署,没有代码。
由于源代码控制工具允许分支,主分支包含针对最新产品版本的代码,而每个存储库都包含适用于特定版本的分支。实验的编号是三位数,从100开始。有两种实验:书中描述的实验和网上提供的额外实验:
-
书中所描述的实验是按章节编号的。因此,第12章的实验200在第12章第2节中有介绍。同样,第17章的第100号实验也在第17章的第1节中详细说明。
-
书中没有描述的实验以9开头,如900,910等等。900系列的实验正在增长:我还在不断增加。实验号不是连续的,就像基本代码中的行号一样。
在GitHub中,您将发现使用Python、Scala和Java编写的代码(除非它不适用)。然而,为了保持书中的清晰度,只使用了Java。
在许多情况下,原始的源代码被重新格式化;我们添加了换行符并修改了缩进以适应书中可用的页空间。在极少数情况下,这是不够的,清单包括续行标记(➥)。此外,当在文本中描述代码时,源代码中的注释经常从清单中删除。代码注释伴随着许多清单,突出了重要的概念。
第一部分 用实例来阐述晦涩的理论
与学习任何技术一样,在深入使用它之前,需要了解一些“晦涩”的理论。这一部分,我用了六章内容,来阐述这些理论,并通过实例来阐述。
第1章是一个详细介绍的简单例子。您将了解为什么Spark不仅仅是一组简单的工具,而是一个真正的分布式分析操作系统。在第一章之后,您将能够在Spark中运行一个简单的数据接入操作。
第2章将向您展示Spark是如何工作的。您将通过详细步骤,构建一个心智模型(表示您自己的思维过程)来构建Spark组件的表示。本章的实验向您展示了如何导出数据库中的数据。本章包含了大量的插图,这将使你的学习过程比仅仅从文字和代码中学习更容易!
第3章将带您进入一个全新的维度:发现强大的dataframe,它结合了Spark的API和存储功能。在本章的实验室中,你将加载两个数据集并将它们union在一起。
第4章介绍了Spark的延迟加载,并解释了Spark使用延迟加载优化的原因。您将了解有向无环图(DAG)并比较Spark和RDBMS。本章的实验教你如何开始使用dataframe API操作数据。
第5章和第6章是内容相关的:将构建一个小型应用程序,构建一个集群,并部署应用程序。这两章非常有实战性。