基本信息
- 原书名:Fast Data Processing with Spark
- 原出版社: Packt Publishing

【插图】

编辑推荐
从实用角度系统讲解Spark的数据处理工具及使用方法
手把手教你充分利用Spark提供的各种功能,快速编写高效分布式程序
内容简介
计算机书籍
Spark是一个开源的通用并行分布式计算框架,由加州大学伯克利分校的AMP实验室开发,支持内存计算、多迭代批量处理、即席查询、流处理和图计算等多种范式。Spark内存计算框架适合各种迭代算法和交互式数据分析,能够提升大数据处理的实时性和准确性,现已逐渐获得很多企业的支持,如阿里巴巴、百度、网易、英特尔等公司。
《Spark快速数据处理》系统讲解Spark的使用方法,包括如何在多种机器上安装Spark,如何配置一个Spark集群,如何在交互模式下运行第一个Spark作业,如何在Spark集群上构建一个生产级的脱机/独立作业,如何与Spark集群建立连接和使用SparkContext,如何创建和保存RDD(弹性分布式数据集),如何用Spark分布式处理数据,如何设置Shark,将Hive查询集成到你的Spark作业中来,如何测试Spark作业,以及如何提升Spark任务的性能。
作译者
余璜 阿里巴巴核心系统研发工程师,OceanBase核心开发人员,对分布式系统理论和工程实践有深刻理解,专注于分布式系统设计、大规模数据处理,乐于分享,在CSDN上分享了大量技术文章。
张磊 Spark爱好者,曾参与分布式OLAP数据库系统核心开发,热衷于大数据处理、分布式计算。
目录
译者序
作者简介
前言
第1章 安装Spark以及构建Spark集群 / 1
1.1 单机运行Spark / 4
1.2 在EC2上运行Spark / 5
1.3 在ElasticMapReduce上部署Spark / 11
1.4 用Chef(opscode)部署Spark / 12
1.5 在Mesos上部署Spark / 14
1.6 在Yarn上部署Spark / 15
1.7 通过SSH部署集群 / 16
1.8 链接和参考 / 21
1.9 小结 / 21
第2章 Spark shell的使用 / 23
2.1 加载一个简单的text文件 / 24
2.2 用Spark shell运行逻辑回归 / 26
2.3 交互式地从S3加载数据 / 28
2.4 小结 / 30
第3章 构建并运行Spark应用 / 31
译者序
Spark是用Scala语言写成的一套分布式内存计算系统,它的核心抽象模型是RDD(Resilient Distributed Dataset,弹性分布式数据集),围绕RDD构建了一系列分布式API,可以直接对数据集进行分布式处理。相对于MapReduce上的批量计算、迭代型计算,以及基于Hive的SQL查询,Spark可以带来一到两个数量级的效率提升。在Spark之上还有若干工具,它们一起构成了一个软件栈—BDAS(Berkeley Data Analytics Stack,伯克利数据分析栈),包括支持用SQL查询Spark的工具Shark、支持流式计算的Spark Streaming、专门针对机器学习的MLlib,以及专门针对图数据处理的GraphX。
Spark对于大多数人来说还是一个新生事物,中文资料十分匮乏,社区内开发者们主要的学习方式还限于阅读有限的官方文档、源码、AMPLab发表的论文,以及社区讨论。这也是译者翻译本书的初衷,希望借助这本小书让更多的国内读者有机会了解Spark,使用Spark,为Spark社区贡献力量。
Spark的发展日新月异,本书英文版撰写时,Spark版本为0.7,时隔半年,Spark 0.9.0已经发布。原书中的部分内容或链接已经失效,中文版都尽力进行了更新,但难免有所疏漏,欢迎指正。
本书第1章~第5章由张磊翻译,第6章~第9章由余璜翻译。在本书的翻译过程中还得到了连城、夏帆、杨雪、杨松鹤等人的帮助,在此一并致谢。
余璜
2014.4.1 北京
前言
本书内容
第1章介绍如何安装配置Spark集群,该章介绍如何在多种机器上安装Spark,以及如何配置一个Spark集群,包括从在本地机器上部署开发调试环境,到在EC2集群上部署用Chef管理的大规模集群。
第2章介绍如何使用Spark shell,在交互模式下运行你的第一个Spark作业(job)。Spark shell是一个有用的调试和快速开发工具,特别适合初学者。
第3章介绍如何构建和运行Spark应用,该章介绍了如何在Spark集群上构建一个生产级的脱机/独立作业。用Spark shell快速开发出应用原型后,剩下的大部分工作就是在Spark上构建独立作业了。
第4章介绍如何创建sparkContext,该章介绍如何与Spark集群建立连接。SparkContext是你的程序连接Spark集群的入口点。
第5章介绍如何加载和保存数据,介绍如何创建和保存RDD(弹性分布式数据集)。Spark支持从Hadoop加载数据。
第6章介绍如何操作RDD,介绍如何用Spark进行分布式数据处理,这一章会非常有趣。
第7章介绍如何Shark-Hive与Spark的综合运用,介绍如何设置Shark(一种基于Spark的HiveQL兼容系统),将Hive查询集成到你的Spark作业中来。
第8章介绍如何测试,介绍如何测试你的Spark作业。分布式任务调试困难,测试就显得更尤为重要。
第9章介绍技巧和窍门,介绍如何提升Spark任务的性能。
预备知识
熟悉Linux/UNIX以及C++、Java或Python语言对理解本书内容大有裨益。如果有一台以上机器或EC2来做实验,则有利于更深入地了解Spark的分布式特性,不过这并非必要,因为Spark也有非常出色的单机模式。
目标读者
任何希望学习用Spark编写高效分布式程序的开发者都适合阅读本书。
凡例
本书使用多种风格的文本来表示不同信息,下面举例说明这些风格及其含义。
代码、数据库表名、文件夹名、文件名、文件扩展名、路径名、示例URL、用户输入、Twitter内容如下所示:“打包文件中包含一个二进制文件目录,该目录需要添加到搜索路径中,SCALA_HOME必须指向包解压位置”。
命令行输入或输出风格如下:
./run spark.examples.GroupByTest local[4]
书摘
安装Spark以及构建
Spark集群
1.1单机运行Spark
1.2在EC2上运行Spark
1.3在ElasticMapReduce上部署Spark
1.4用Chef(opscode)部署Spark
1.5在Mesos上部署Spark
1.6在Yarn上部署Spark
1.7通过SSH部署集群
1.8链接和参考
1.9小结
本章将详细介绍搭建Spark的常用方法。Spark的单机版便于测试,同时本章也会提到通过SSH用Spark的内置部署脚本搭建Spark集群,使用Mesos、Yarn或者Chef来部署Spark。对于Spark在云环境中的部署,本章将介绍在EC2(基本环境和EC2MR)上的部署。如果你的机器或者集群中已经部署了Spark,可以跳过本章直接开始使用Spark编程。
不管如何部署Spark,首先得从http://spark-project.org/download获得Spark的一个版本,截止到写本书时,Spark的最新版本为0.7版。对于熟悉github的程序员,则可以从git://github.com/mesos/spark.git直接复制Spark项目。Spark提供基本源码压缩包,同时也提供已经编译好的压缩包。为了和Hadoop分布式文件系统(HDFS)交互,需要在编译源码前设定相应的集群中所使用的Hadoop版本。对于0.7版本的Spark,已经编译好的压缩包依赖的是1.0.4版本的Hadoop。如果想更深入地学习Spark,推荐自己编译基本源码,因为这样可以灵活地选择HDFS的版本,如果想对Spark源码有所贡献,比如提交补丁,自己编译源码是必须的。你需要安装合适版本的Scala和与之对应的JDK版本。对于Spark的0.7.1版本,需要Scala 2.9.2或者更高的Scala 2.9版本(如2.9.3版)。在写本书时,Linux发行版Ubuntu的LTS版本已经有Scala 2.9.1版,除此之外,最近的稳定版本已经有2.9.2版。Fedora 18已经有2.9.2版。软件包的更新信息可以在http://packages.ubuntu.com/search?keywords=scala查看到。Scala官网上的最新版在http://scala-lang.org/download。选择Spark支持的Scala版本十分重要,Spark对Scala的版本很敏感。
下载Scala的压缩包,解压后将SCALA_HOME设置为Scala的根目录,然后将Scala根目录下的bin目录路径加到PATH环境变量中。Scala设置如下:
也可以在.bashrc文件中加入:
Spark用sbt(即simple build tool,现在已经不是个简单工具了)构建,编译源码的时候会花点时间,如果没有安装sbt,Spark构建脚本将会为你下载正确的sbt版本。
一台双核且安装有SSD的笔记本性能不算高,在它之上安装Spark的最新版本花了大概7分钟。如果从源码开始构建0.7版的Spark,而不是直接下载编译好的压缩包。可以执行:
如果底层存储采用HDFS,而其版本又和Spark中的默认HDFS版本不一致,则需要修改Spark根目录下project/SparkBuild.scala文件中的HADOOP_VERSION,然后重新编译:
虽然sbt工具在依赖性解析方面已经做得非常好了,但是还是强烈推荐开发者去做一次clean,而不是增量编译。因为增量编译仍然不能保证每次完全正确。