具体描述
编辑推荐
适读人群 :spark大数据开发者
大数据资深培训师、Spark大数据畅销书《大数据Spark企业级实战》作者王家林新作。
内容广度和深度兼顾,覆盖了Spark技术的核心知识点,全程注重从架构的底层到上层,由宏观到微观的讲解。
秉承“实战”类图书特色,解析大量案例和代码的编写操作,具有较强的可操作性,便于读者学习和理解。 内容简介
书中第1章首先通过介绍Spark的生态系统和RDD编程模型,使读者能够快速的对Spark技术的生态环境以及对Spark的RDD编程模型有个非常直观的了解。第2章,首先介绍了Spark应用的两种部署模式;然后在应用部署模式基础上,开始Spark实战的案例与解析,通过提供一个完整的基础案例,使读者了解一个Spark应用的大致处理流程;接着对实战中的重点部分,结合源码分析、监控日志分析等深入解析了Spark运行机制、DAG图等关键内容;后给出Spark开发者常用的应用程序构建案例与分析,以及调试环境搭建的案例与应用调试的案例。第3章重点针对SparkSQL子模块进行实战,首先概要分析了Spark1.3版本中引入的DataFrame,然后基于DataFrame编程模型给出一个完整的基础案例与解析,接着也是针对实战中的难度、重点部分,给予了更丰富的案例与深入地分析,后,重点关注Spark1.3版本中DataFrame当前支持的各种数据源,并给出各种数据源基础上的案例与分析,数据源包括各种结构化数据文件、Hive表、外部数据库或现有的RDD。第4章针对流处理进行实战,首先分析流处理中的关键点和难度,并通过实例进行深入解析。然后针对各种数据源的情景,给出由浅入深的实战案例与解析,并结合部分源码,分析流处理的性能调优等,并给出实例与分析。第5章针对著名的分布式内存存储系统Tachyon进行实战,并对实战案例进行分析,内容包括从Tachyon集群部署的案例与分析、Tachyon集群配置的案例与分析等,后关注Tachyon对Spark应用的性能调优的影响,给出实战案例及其深入解析。第6章通过大约30个动手实践的案例循序渐进地展示SparkGraphX框架方方面面的功能和使用方法,并对SparkGraphX的源码进行解析,并用综合实战案例巩固知识;第7章从快速入门机器学习开始,详细解析MLlib框架,通过对线性回归、聚类、协同过滤的算法解析、源码解析和案例实战,循序渐进地揭秘MLLib,后通过对MLlib中BasicStatics、朴素贝叶斯算法、决策树的解析和实战,进一步提升掌握Spark机器学习的技能。 目录
第1章Spark简介
1.1什么是Spark
1.2Spark生态圈
1.2.1伯克利数据分析协议栈
1.2.2Spark开源社区发展
1.3RDD编程模型
1.3.1RDD抽象概念
1.3.2RDD的操作
1.3.3RDD的依赖关系
1.3.4一个典型的DAG示意图
第2章Spark RDD实践案例与解析
2.1Spark应用程序部署
2.1.1Spark应用的基本概念
2.1.2应用程序的部署方式
2.2RDD数据的输入、处理、输出的基本案例与解析
2.2.1集群环境的搭建
2.2.2交互式工具的启动
2.2.3文本数据的ETL案例实践与解析
2.2.4文本数据的初步统计案例实践与解析
2.2.5文本数据统计结果的持久化案例实践与解析
2.2.6RDD的Lineage关系的案例与源码解析
2.2.7RDD的持久化案例与解析
2.2.8RDD的构建案例与解析
2.2.9分区数设置的案例与源码解析
2.3RDD API的应用案例与解析
2.3.1如何查找RDD API的隐式转换
2.3.2RDD[T]的分区相关的API
2.3.3RDD[T]常用的聚合API
2.3.4DoubleRDDFunctions(self:RDD[Double])常用的API
2.3.5PairRDDFunctions[K,V]聚合相关的API
2.3.6RDD相互间操作的API
2.3.7PairRDDFunctions[K,V]间的相关API
2.3.8OrderedRDDFunctions[K,V,P<:Product2[K,V]]常用的API
2.4Spark应用程序构建
2.4.1基于SBT构建Spark应用程序的实例
2.4.2基于IDEA构建Spark应用程序的实例
2.4.3Spark提交应用的调试实例
2.5移动互联网数据分析案例与解析
2.5.1移动互联网数据的准备
2.5.2移动互联网数据分析与解析
2.6Spark RDD实践中的常见问题与解答
第3章Spark SQL实践案例与解析
3.1Spark SQL概述
3.2DataFrame处理的案例与解析
3.2.1DataFrame编程模型
3.2.2DataFrame基本操作案例与解析
3.2.3DataFrame与RDD之间的转换案例与解析
3.2.4缓存表(列式存储)的案例与解析
3.2.5DataFrame API的应用案例与分析
3.3Spark SQL处理各种数据源的案例与解析
3.3.1通用的加载/保存功能的案例与解析
3.3.2Parquet文件处理的案例与解析
3.3.3JSON数据集操作的案例与解析
3.3.4操作Hive表的案例与解析
3.3.5使用JDBC 操作其他数据库的案例与解析
3.3.6集成Hive数据仓库的案例与解析
3.4基于Hive的人力资源系统数据处理案例与解析
3.4.1人力资源系统的数据库与表的构建
3.4.2人力资源系统的数据的加载
3.4.3人力资源系统的数据的查询
第4章Spark Streaming实践案例与解析
4.1Spark Streaming概述
4.2Spark Streaming基础概念
4.3企业信息实时处理的案例与解析
4.3.1处理TCP数据源的案例与解析
4.3.2处理HDFS文件数据源的案例与解析
4.3.3处理Kafka数据源的准备工作
4.3.4基于Receiver读取Kafka数据的案例与解析
4.3.5直接读取(无Receiver)Kafka数据的案例与解析
4.3.6处理Flume数据源的实践准备
4.3.7基于Flume风格的推送数据案例与解析
4.3.8定制FlumeSink的拉取数据案例与解析
4.4性能调优
4.4.1减少批处理的时间
4.4.2设置正确的批间隔
4.4.3内存调优
第5章Tachyon实践案例与解析
5.1Tachyon概述
5.2重新编译部署包
5.2.1重新编译Tachyon的部署包
5.2.2重新编译Spark的部署包
5.3Tachyon部署的案例与解析
5.3.1单机模式部署的案例与解析
5.3.2集群模式部署的案例与解析
5.3.3集群Master容错部署的案例与解析
5.4Tachyon配置的案例与解析
5.4.1底层存储系统的配置案例与解析
5.4.2配置属性与解析
5.5命令行接口的案例与解析
5.5.1命令行接口的说明
5.5.2命令行接口的案例实践与解析
5.6同步底层文件系统的案例与解析
5.6.1同步HDFS底层文件系统的案例与解析
5.6.2同步本地底层文件系统的案例与解析
5.7基于Tachyon运行的案例与解析
5.7.1基于Tachyon运行Spark的案例与解析
5.7.2基于Tachyon运行Hadoop MR的案例与解析
附录Spark 1.4版本新特性
前言/序言
Spark起源于2009年,是美国加州大学伯克利分校AMP实验室的一个研究性项目。Spark于2010年开源,是当今大数据领域最活跃、最热门、最高效的大数据通用计算平台,是Apache软件基金会所有开源项目中三大顶级开源项目之一。
Spark是用Scala语言写成的一套分布式内存迭代计算系统,它的核心抽象概念是弹性分布式数据集(Resilient Distributed Dataset,RDD),在“One Stack to rule them all”(一个技术堆栈容纳各种数据处理技术)理念的指引下,Spark基于RDD成功地构建起了大数据处理的一体化解决方案,将MapReduce、Streaming、SQL、Machine Learning、Graph Processing等大数据计算模型统一到一个技术堆栈中,开发者可以使用同样的API操作Spark中的所有功能。更为重要的是,Spark的Spark SQL、MLLib、GraphX、Spark Streaming等四大子框架(在Spark 1.4版本中,加入了新的SparkR子框架)之间可以在内存中完美的无缝集成并可以互相操作彼此的数据,这不仅打造了Spark在当今大数据计算领域相比其他任何计算框架具备的无可匹敌的优势,更使得Spark正在加速成为大数据处理中心首选的和唯一的计算平台。
目前,Spark已经发展成为包含众多子项目的大数据计算平台。Spark的整个生态系统称为伯克利数据分析栈(BDAS)。其核心框架是Spark,同时BDAS涵盖支持结构化数据SQL查询与分析的查询引擎Spark SQL,提供具有机器学习功能的系统MLbase及底层的分布式机器学习库MLlib、并行图计算框架GraphX、流计算框架Spark Streaming、采样近似计算查询引擎BlinkDB、内存分布式文件系统Tachyon、资源管理框架Mesos等子项目。这些子项目在Spark上提供了更高层、更丰富的计算范式。
随着Spark社区的不断成熟,它已被广泛应用于阿里巴巴、百度、网易、英特尔等各大公司的生产环境中。
关于Spark及其开发案例的中文资料比较匮乏,相关书籍也比较少,社区内开发者们主要的学习方式仍然限于阅读有限的官方文档、源码、AMPLab发表的论文,以及社区讨论等。
为了让Spark初学者能快速进入开发阶段,本书针对Spark内核、Spark SQL以及Spark Streaming等内容,提供了一系列的开发案例,基于这些开发案例,详细记录并解析了这几个子框架开发过程的各个步骤。
Spark的发展日新月异,在本书撰写时,Spark 1.3版本刚刚发布,因此,本书全部的开发案例都是基于该版本进行的。同时,鉴于Spark是用Scala语言编写的,本书的开发案例也采用Scala语言作为开发语言。
本书共5章,内容包括:
第1章:Spark简介,内容包括介绍Spark的基本概念、Spark生态圈以及RDD编程模型等内容;
第2章:Spark RDD实践案例与解析,内容包括Spark应用程序的部署、RDD数据的输入、处理、输出的基本案例与解析、RDD API的应用案例与解析、Spark应用程序的构建,以及移动互联网数据分析案例与解析等内容;
第3章:Spark SQL实践案例与解析,内容包括Spark SQL概述、DataFrame处理的案例与解析、Spark SQL处理各种数据源的案例与解析,以及基于Hive的人力资源系统数据处理案例与解析等内容;
第4章:Spark Streaming实践案例与解析,内容包括Spark Streaming概述、Spark Streaming基础概念、企业信息实时处理的案例与解析,以及性能调优等内容;
第5章:Tachyon实践案例与解析,内容包括Tachyon概述、Tachyon部署的案例与解析、Tachyon配置的案例与解析、命令行接口的案例与解析、同步底层文件系统的案例与解析,以及基于Tachyon运行Spark和Hadoop的案例与解析等内容。
在全书最后,特别介绍了Spark 1.4版本的新特性。
预备知识
熟悉Linux/UNIX类操作系统的基本命令操作以及Java或Scala语言对理解本书内容大有裨益。建议构建3台及以上服务器的集群环境,以更好地实践并理解分布式环境中的Spark运行框架与计算。
本书的目标读者
作为Spark入门的开发案例,本书适合刚接触Spark或对Spark分布式计算的开发不熟悉的初学者。对于熟悉函数式开发或面向对象开发,并有一定经验的开发者,本书也可以作为开发案例的参考书籍。
本书由王家林,徐香玉编著,参与编写的还有:王家虎、王家俊、王燕军。限于作者水平,书中疏漏之处在所难免,欢迎广大读者批评指正。
编者
《数据洪流中的探索与构建:实战驱动的大数据应用开发》 在信息爆炸的时代,数据如同奔腾不息的洪流,蕴藏着巨大的价值。如何驾驭这股洪流,从中提炼洞见,构建出强大而高效的数据应用,是当下乃至未来技术领域的核心挑战。本书旨在为有志于深入大数据应用开发的读者提供一套系统、全面且极具实践性的指导,帮助您从理论的海洋驶向实战的疆场,成为数据洪流中的弄潮儿。 本书内容聚焦于当前最活跃、最具影响力的大数据处理与分析框架,例如Apache Spark。我们不局限于某个单一工具的使用,而是从数据处理生命周期的整体视角出发,涵盖从数据采集、存储、处理、分析到最终应用落地的全过程。我们相信,真正掌握大数据应用开发,需要的是一种系统性的思维和跨越式的技能。 第一部分:大数据基础与架构透视 在正式进入技术实战之前,我们首先需要构建起坚实的大数据理论基石。本部分将深入剖析大数据产生的根源、其核心特征(Volume, Velocity, Variety, Veracity, Value)以及在大数据时代所面临的机遇与挑战。我们将对大数据生态系统进行一次全面的扫描,介绍Kafka、HDFS、YARN、Hive、HBase等关键组件的演进、设计理念及其在整个大数据流水线中的定位。 数据驱动的业务价值: 探讨大数据如何赋能传统业务,催生新的商业模式,以及在金融、电商、医疗、制造业等领域的实际应用案例,让读者深刻理解大数据开发的最终目的——创造价值。 分布式系统的原理与挑战: 深入理解分布式系统在处理海量数据时的原理,包括数据分区、容错机制、一致性模型等。我们将探讨在分布式环境下可能遇到的挑战,如网络延迟、节点故障、数据同步等,为后续的开发打下理论基础。 Hadoop生态系统的演进: 回顾Hadoop的起源与发展,重点讲解HDFS(Hadoop Distributed File System)如何实现海量数据的存储与高可用性,以及YARN(Yet Another Resource Negotiator)如何有效地管理集群资源,为上层应用提供计算支持。 NoSQL数据库的崛起: 介绍不同类型的NoSQL数据库(键值存储、文档数据库、列族数据库、图数据库)的设计哲学、适用场景及其在大数据存储架构中的作用,例如HBase如何提供低延迟、高吞吐量的实时数据访问。 数据采集与流式处理的入口: 聚焦于Apache Kafka这一事实上的消息队列标准,解析其高吞吐量、持久化、分区容错的设计,理解其在构建实时数据管道中的核心地位。 第二部分:核心数据处理引擎的精通 在掌握了大数据的基础概念和生态概览后,本部分将是本书的重头戏,集中火力攻克核心数据处理引擎,特别是Apache Spark。我们将从Spark的设计理念出发,逐一解析其核心组件与工作机制,并带领读者进行一系列由浅入深的实战演练。 Spark架构与RDD(Resilient Distributed Datasets): 深入理解Spark的Driver-Executor架构,掌握RDD这一Spark中最基本的数据抽象,学习RDD的创建、转换(Transformation)与行动(Action)操作,理解RDD的容错性与惰性求值机制。我们将通过大量代码示例,演示如何高效地操作RDD进行数据过滤、映射、聚合等。 Spark SQL与DataFrame/Dataset API: 转向Spark SQL,学习如何使用DataFrame和Dataset API来处理结构化和半结构化数据。我们将讲解SQL查询在Spark中的执行计划优化、Catalyst Optimizer的工作原理,并演示如何利用DataFrame API进行数据清洗、转换、特征工程等。 Spark Streaming与Structured Streaming: 应对实时数据处理的需求,我们将详细讲解Spark Streaming,理解微批处理(Micro-batch Processing)的模型,并重点介绍Spark的下一代流处理引擎——Structured Streaming。我们将演示如何构建端到端的流式数据处理管道,实现实时数据分析与响应。 Spark MLlib与机器学习实战: 拥抱大数据与人工智能的融合,本部分将介绍Spark的机器学习库MLlib。我们将讲解MLlib提供的常用算法,如分类、回归、聚类、降维等,并通过实际数据集,带领读者完成特征提取、模型训练、参数调优、模型评估等完整的机器学习流程。 Spark GraphX与图计算: 探索大数据在图结构数据分析中的应用,介绍Spark的图计算引擎GraphX。我们将讲解图的表示方法(VertexRDD、EdgeRDD),掌握Pregel API,并演示如何在社交网络、推荐系统、知识图谱等场景下进行图算法的实现。 性能调优与内存管理: 任何大数据应用的关键都在于性能。本部分将深入探讨Spark的性能调优策略,包括Shuffle优化、数据序列化、内存调优(Driver Memory, Executor Memory)、垃圾回收(GC)调优、任务并行度控制等。我们将通过实际案例,演示如何诊断和解决常见的性能瓶颈。 第三部分:大数据应用开发与部署实践 理论与技术引擎的掌握是基础,将这些能力转化为实际应用并部署上线,才是大数据开发的最终目的。本部分将引导读者完成从原型开发到生产部署的全过程。 数据仓库与数据湖构建: 探讨如何利用大数据技术构建现代化的数据仓库和数据湖。我们将介绍数据建模的最佳实践,数据治理的重要性,以及如何利用Hive、Spark SQL等工具进行数据集成和查询。 ETL/ELT流程设计与实现: 深入讲解ETL(Extract, Transform, Load)和ELT(Extract, Load, Transform)流程的设计原则,以及如何使用Spark等工具高效地实现数据的抽取、清洗、转换和加载。我们将关注数据质量、数据一致性等关键问题。 大数据应用的架构设计: 学习如何设计健壮、可扩展、高可用的大数据应用架构。我们将讨论微服务架构在数据平台中的应用,如何进行API设计,以及如何考虑系统的容错性和伸缩性。 容器化与集群部署: 了解Docker等容器化技术如何简化大数据应用的部署和管理。我们将介绍如何在Kubernetes等容器编排平台上部署Spark应用,以及如何配置和管理大数据集群。 监控、告警与日志分析: 对于生产环境下的任何应用,监控是必不可少的。本部分将介绍常用的监控工具(如Prometheus, Grafana),如何设置性能指标和告警规则,以及如何进行日志分析以快速定位和解决问题。 安全性与合规性: 在处理海量敏感数据时,安全性和合规性至关重要。我们将讨论数据加密、访问控制、身份认证等安全措施,以及如何满足GDPR等相关法规的要求。 第四部分:前沿探索与未来展望 大数据技术日新月异,本部分将带领读者展望大数据领域的最新发展趋势,为持续学习和技术创新提供方向。 云原生大数据: 探讨AWS, Azure, GCP等云平台如何提供托管式大数据服务,以及云原生技术(如Kubernetes, Serverless)如何重塑大数据架构。 湖仓一体(Lakehouse): 深入理解Delta Lake, Apache Hudi, Apache Iceberg等数据湖管理技术,探讨它们如何结合数据仓库的ACID事务特性和数据湖的灵活性。 AI与大数据深度融合: 关注AI技术(如深度学习、图神经网络)在大数据分析中的更广泛应用,以及如何构建端到端、自动化的智能数据处理流水线。 流批一体(Stream-Batch Unification): 进一步探讨Structured Streaming等技术如何真正实现流式和批处理的统一,简化开发和运维。 下一代计算引擎的探索: 简要介绍正在兴起的新型计算引擎,以及它们可能带来的性能突破与应用场景。 本书特色: 理论与实践并重: 每一章都围绕核心概念,通过大量的代码示例和完整的实战项目,帮助读者将理论知识转化为实际技能。 循序渐进的学习路径: 从基础概念到高级特性,再到实际部署,本书设计了清晰的学习曲线,适合不同经验水平的读者。 贴近实际生产环境: 案例设计力求贴近真实世界的大数据开发场景,帮助读者应对实际工作中的挑战。 前沿技术视野: 紧跟大数据技术发展的最新动向,为读者提供未来学习的方向。 本书的目标是培养读者成为能够独立设计、开发、部署和优化复杂大数据应用的技术人才。无论您是刚刚踏入大数据领域的新手,还是希望深化技能的资深开发者,亦或是寻求系统化知识体系的技术管理者,本书都将是您在大数据洪流中探索与构建的得力助手。让我们一起,用数据驱动未来!