前言

前言

随着并行数据分析变得越来越流行,各行各业的工作者都迫切需要更好的数据分析工具。Spark 应运而生,并且迅速火了起来。作为 MapReduce 的继承者,Spark 主要有三个优点。首先,Spark 非常好用。由于高级 API 剥离了对集群本身的关注,你可以专注于你所要做的计算本身,只需在自己的笔记本电脑上就可以开发 Spark 应用。其次,Spark 很快,支持交互式使用和复杂算法。最后,Spark 是一个通用引擎,可用它来完成各种各样的运算,包括 SQL 查询、文本处理、机器学习等,而在 Spark 出现之前,我们一般需要学习各种各样的引擎来分别处理这些需求。这三大优点也使得 Spark 可以作为学习大数据的一个很好的起点。

本书主要介绍 Spark,让读者能够轻松入门并玩转 Spark。你能从本书中学到如何让 Spark 在你的电脑上运行起来,并且通过交互式操作来学习 Spark 的 API。我们也会讲解一些用 Spark 作数据操作和分布式执行时的细节。最后,本书会带你畅游 Spark 上一些高级的程序库,包括机器学习、流处理、图计算和 SQL 查询。我们希望本书能够让你了解 Spark。不论你只有一台电脑还是有一个庞大的集群,Spark 都能成为令你运筹帷幄的数据分析工具。

读者对象

本书的目标读者是数据科学家和工程师。我们选择这两个群体的原因,在于他们能够利用 Spark 去解决一些可能会遇到但是没有办法解决的问题。Spark 提供了功能丰富的数据操作库(例如 MLlib),可以帮助数据科学家利用他们自己的统计学背景知识,研究数据集大小超过单机所能处理极限的数据问题。与此同时,工程师们则可以从本书中学习和利用 Spark 编写通用的分布式程序并运维这些应用。工程师和数据科学家都不仅能从本书中学到各自需要的具体技能,而且还能够在各自领域中利用 Spark 解决大型分布式问题。

数据科学家关注如何从数据中发现关联以及建立模型。数据科学家通常有着统计学或者数学背景,他们中的大多数也熟悉 Python 语言、R 语言、SQL 等传统数据分析工具。在本书中,我们不仅会讲到 Spark 中一些机器学习和高级数据分析的程序库,也会把一些 Python 或者 SQL 的应用作为 Spark 使用示例进行展示。如果你是一位数据科学家,我们希望你读完本书之后,能够在获得更快速度和更大数据规模支持的同时,使用早已熟悉的方式来解决问题。

本书的第二类目标读者是软件工程师。对于工程师,不管你擅长的是 Java 还是 Python,抑或是别的编程语言,我们希望这本书能够教会你如何搭建一个 Spark 集群,如何使用 Spark shell,以及如何编写 Spark 应用程序来解决需要并行处理的问题。如果你熟悉 Hadoop,你就已经在如何与 HDFS 进行交互以及如何管理集群的领域中领先了一小步。即使你没有 Hadoop 经验也不用担心,我们会在本书中讲解一些基本的分布式执行的概念。

不论你是数据分析师还是工程师,如果想读透这本书,就应当对 Python、Java、Scala 或者一门类似的编程语言有一些基本了解。另外,我们假设你已经有了关于数据存储的解决方案,所以不会讲到如何搭建一个数据存储系统,不过我们会介绍如何在常见的数据存储系统上读取和保存数据。即使你没用过这些编程语言也不必担心,有很多优秀的学习资源可以帮助你理解这些语言,我们在下文的相关书籍中列举了一些。

本书结构

本书结构清晰,章节是按照从前到后依次阅读的顺序组织的。在每一章的开头,我们会说明本章中的哪些小节对于数据科学家们更重要,而哪些小节则对于工程师们更为有用。话虽如此,我们还是希望书中的所有内容对两类读者都能有一定的帮助。

前两章将会带你入门,让你在自己的电脑上搭好一个基础的 Spark,并且让你对于用 Spark 能做什么有一个基本的概念。等我们弄明白了 Spark 的目标和 Spark 的安装之后,就会着重介绍 Spark shell。Spark shell 是开发 Spark 应用原型时非常有用的工具。后续几章则会详细介绍 Spark API、如何将 Spark 应用运行在集群上,以及 Spark 所提供的更高层的程序库支持,例如 SQL(数据库支持)和 MLlib(机器学习库)。

相关书籍

如果你是一个没有太多 Python 经验的数据科学家,那么我们向你推荐 Learning Python(O'Reilly)和 Head First Python(O'Reilly)。如果你已经有了一定的 Python 经验,那么 Dive Into Pythonhttp://www.diveintopython.net/)可以进一步加深你对 Python 的理解。

如果你是个工程师,读完本书之后还希望提高自己的数据分析技能,O'Reilly 出版的 Machine Learning for HackersDoing Data Science 是不错的参考书。

本书主要为初学者而写,但我们也正在计划为那些渴望全面理解 Spark 内部原理的人写一本更加深入的书。

排版约定

本书使用了下列排版约定。

  • 楷体

    表示新术语。

  • 等宽字体(Constant width

    表示程序片段,以及正文中出现的变量、函数名、数据库、数据类型、环境变量、语句和关键字等。

  • 加粗等宽字体(Constant width bold

    表示应该由用户输入的命令或其他文本。

 该图标表示提示或建议。

 该图标表示警告或警示。

使用代码示例

本书中所有的示例代码都可以在 GitHub 上找到。你可以从 https://github.com/databricks/learning-spark 中查看和检出这些代码。示例代码包含 Java、Scala 和 Python 的版本。

 Java 版本的示例代码兼容 Java 6 以及更高版本。Java 8 引入了支持 lambda 的新语法,可以更方便地编写内联函数而简化 Spark 代码。由于许多机构还没有开始使用 Java 8,我们决定在我们的大多数示例中不使用这一新语法。如果你对 Java 8 的语法很感兴趣,可以查阅 Databricks 关于 Java 8 语法的博文(http://databricks.com/blog/2014/04/14/spark-with-java-8.html)。有一些示例程序也会移植到 Java 8 上,并且发布在本书的 GitHub 代码仓库中。

本书是要帮你完成工作的。一般来说,如果本书提供了示例代码,你可以把它用在你的程序或文档中。除非你使用了很大一部分代码,否则无需联系我们获得许可。比如,用本书的几个代码片段写一个程序就无需获得许可,销售或分发 O'Reilly 图书的示例光盘则需要获得许可;引用本书中的示例代码回答问题无需获得许可,将书中大量的代码放到你的产品文档中则需要获得许可。

我们很希望但并不强制要求你在引用本书内容时加上引用说明。引用说明一般包括书名、作者、出版社和 ISBN。比如:“Web Development with Node and Express by Ethan Brown (O'Reilly). Copyright 2014 Ethan Brown, 978-1-491-94930-6.”

如果你觉得自己对示例代码的用法超出了上述许可的范围,欢迎你通过 permissions@oreilly.com 与我们联系。

Safari® Books Online

Safari Books Online(http://www.safaribooksonline.com)是应运而生的数字图书馆。它同时以图书和视频的形式出版世界顶级技术和商务作家的专业作品。技术专家、软件开发人员、Web 设计师、商务人士和创意专家等,在开展调研、解决问题、学习和认证培训时,都将 Safari Books Online 视作获取资料的首选渠道。

对于组织团体、政府机构和个人,Safari Books Online 提供各种产品组合和灵活的定价策略。用户可通过一个功能完备的数据库检索系统访问 O'Reilly Media、Prentice Hall Professional、Addison-Wesley Professional、Microsoft Press、Sams、Que、Peachpit Press、Focal Press、Cisco Press、John Wiley & Sons、Syngress、Morgan Kaufmann、IBM Redbooks、Packt、Adobe Press、FT Press、Apress、Manning、New Riders、McGraw-Hill、Jones & Bartlett、Course Technology 以及其他几十家出版社的上千种图书、培训视频和正式出版之前的书稿。要了解 Safari Books Online 的更多信息,我们网上见。

联系我们

请把对本书的评价和问题发给出版社。

美国:

  O'Reilly Media, Inc.

  1005 Gravenstein Highway North

  Sebastopol, CA 95472

中国:

  北京市西城区西直门南大街 2 号成铭大厦 C 座 807 室(100035)

  奥莱利技术咨询(北京)有限公司

O'Reilly 的每一本书都有专属网页,你可以在那儿找到本书的相关信息,包括勘误表、示例代码以及其他信息。本书的网站地址是:

http://bit.ly/web_dev_node_express

对于本书的评论和技术性问题,请发送电子邮件到:bookquestions@oreilly.com。

要了解更多 O'Reilly 图书、培训课程、会议和新闻的信息,请访问以下网站:

http://www.oreilly.com

我们在 Facebook 的地址如下:http://facebook.com/oreilly

请关注我们的 Twitter 动态:http://twitter.com/oreillymedia

我们的 YouTube 视频地址如下:http://www.youtube.com/oreillymedia

致谢

感谢 Joseph Bradley、Dave Bridgeland、Chaz Chandler、Mick Davies、Sam DeHority、Vida Ha、Andrew Gal、Michael Gregson、Jan Joeppen、Stephan Jou、Jeff Martinez、Josh Mahonin、Andrew Or、Mike Patterson、Josh Rosen、Bruce Szalwinski、Xiangrui Meng、Reza Zadeh 等审阅者,他们为本书的写作提出了宝贵的意见。

特别感谢 David Andrzejewski、David Buttler、Juliet Hougland、Marek Kolodziej、Taka Shinagawa、Deborah Siegel、Normen Müller 博士、Ali Ghodsi、Sameer Farooqui 等人,他们为大部分章节提供了详细的反馈,并且帮助指出了许多至关重要的改进之处。

我们还要感谢参与编辑和编写部分章节的主题专家。第 10 章是在我们与 Tathagata Das 的紧密合作下共同完成的。Tathagata 给了我们巨大的帮助,他的工作包括且不限于阐明示例、回答疑问、改进排版以及相关技术的贡献。Michael Armbrust 帮助我们审校了 Spark SQL 相关章节。在第 11 章中,Joseph Bradley 为 MLlib 模块提供了介绍性示例。Reza Zadeh 为关于降维的部分提供了图文描述和代码示例。Xiangrui Meng、Joseph Bradley 和 Reza Zadeh 也为 MLlib 章节提供了编审和关于技术细节的反馈。

目录