Spark大数据处理:技术、应用与性能优化.html.pdf
《Spark大数据处理:技术、应用与性能优化.html.pdf》由会员分享,可在线阅读,更多相关《Spark大数据处理:技术、应用与性能优化.html.pdf(181页珍藏版)》请在三一文库上搜索。
1、前言 Spark是发源于美国加州大学伯克利分校AMPLab的大数据分析平台,它立足于内存计算,从多迭代批量处理出发,兼顾数据仓库、流处理和图计算等多种计算范式,是大数据系统领域的全栈计算平 台。Spark当下已成为Apache基金会的顶级开源项目,拥有庞大的社区支持,技术也逐渐走向成熟。 为什么要写这本书 大数据还在如火如荼地发展着,突然之间,Spark就火了。还记得最开始接触Spark技术时资料匮乏,只有官方文档和源码可以作为研究学习的资料。写一本Spark系统方面的技术书籍,是我持续了很 久的一个想法。由于学习和工作较为紧张,最初只是通过几篇笔记在博客中分享自己学习Spark过程的点滴,但
2、是随着时间的推移,笔记不断增多,最终还是打算将笔记整理成书,也算是一个总结和分 享。 在国外Yahoo!、Intel、Amazon、Cloudera等公司率先应用并推广Spark技术,在国内淘宝、腾讯、网易、星环等公司敢为人先,并乐于分享。在随后的发展中,IBM、MapR、Hortonworks、微 策略等公司纷纷将Spark融进现有解决方案,并加入Spark阵营。Spark在工业界的应用也呈星火燎原之势。 随着Spark技术在国内的大范围落地、Spark中国峰会的召开,及各地meetup的火爆举行,开源软件Spark也因此水涨船高。随着大数据相关技术和产业的逐渐成熟,公司生产环境往往需要同时
3、进行 多种类型的大数据分析作业:批处理、各种机器学习、流式计算、图计算、SQL查询等。在Spark出现前,要在一个平台内同时完成以上数种大数据分析任务,就不得不与多套独立的系统打交道,这需要系 统间进行代价较大的数据转储,但是这无疑会增加运维负担。 在1年之前,关注Spark的人和公司不多,由于它包含的软件种类多,版本升级较快,技术较为新颖,初学者难以在有限的时间内快速掌握Spark蕴含的价值。同时国内缺少一本实践与理论相结合的 Spark书籍,很多Spark初学者和开发人员只能参考网络上零星的Spark技术相关博客,自己一点一滴地阅读源码和文档,缓慢地学习Spark。本书也正是为了解决上面的
4、问题而编写的。 本书从一个系统化的视角,秉承大道至简的主导思想,介绍Spark中最值得关注的内容,讲解Spark部署、开发实战,并结合Spark的运行机制及拓展,帮读者开启Spark技术之旅。 本书特色 本书是国内首本系统讲解Spark编程实战的书籍,涵盖Spark技术的方方面面。 1)对Spark的架构、运行机制、系统环境搭建、测试和调优进行深入讲解,以期让读者知其所以然。讲述Spark最核心的技术内容,以激发读者的联想,进而衍化至繁。 2)实战部分不但给出编程示例,还给出可拓展的应用场景。 3)剖析BDAS生态系统的主要组件的原理和应用,让读者充分了解Spark生态系统。 本书的理论和实战
5、安排得当,突破传统讲解方式,使读者读而不厌。 本书中一些讲解实操部署和示例的章节,比较适合作为运维和开发人员工作时手边的书;运行机制深入分析方面的章节,比较适合架构师和Spark研究人员,可帮他们拓展解决问题的思路。 读者对象 Spark初学者 Spark二次开发人员 Spark应用开发人员 Spark运维工程师 开源软件爱好者 其他对大数据技术感兴趣的人员 如何阅读本书 本书分为两大部分,共计9章内容。 第1章 从Spark概念出发,介绍了Spark的来龙去脉,阐述Spark生态系统全貌。 第2章 详细介绍了Spark在Linux集群和Windows上如何进行部署和安装。 第3章 详细介绍了
6、Spark的计算模型,RDD的概念与原理,RDD上的函数算子的原理和使用,广播和累加变量。 第4章 详细介绍了Spark应用执行机制、Spark调度与任务分配、Spark I/O机制、Spark通信模块、容错机制、Shuffle机制,并对Spark机制原理进行了深入剖析。 第5章 从实际出发,详细介绍了如何在Intellij、Eclipse中配置开发环境,如何使用SBT构建项目,如何使用SparkShell进行交互式分析、远程调试和编译Spark源码,以及如何构建Spark源码阅读环 境。 第6章 由浅入深,详细介绍了Spark的编程案例,通过WordCount、Top K到倾斜连接等,以帮助
7、读者快速掌握开发Spark程序的技巧。 第7章 展开介绍了主流的大数据Benchmark的原理,并对比了Benchmark优劣势,指导Spark系统性能测试和性能问题诊断。 第8章 围绕Spark生态系统,介绍了Spark之上的SQL on Spark、Spark Streaming、GraphX、MLlib的原理和应用。 第9章 详细介绍了如何对Spark进行性能调优,以及调优方法的原理。 如果您是一位有着一定经验的资深开发人员,能够理解Spark的相关基础知识和使用技巧,那么可以直接阅读4章、7章、8章、9章。如果你是一名初学者,请一定从第1章的基础知识开始学起。 勘误和支持 由于笔者的水
8、平有限,编写时间仓促,书中难免会出现一些错误或者不准确的地方,恳请读者批评指正。如果您有更多的宝贵意见,欢迎访问我的个人Github上的Spark大数据处理专版: https:/ 客http:/ 致谢 感谢中国人民大学的杜小勇老师、何军老师、陈跃国老师,是老师们将我带进大数据技术领域,教授我专业知识与学习方法,并在每一次迷茫时给予我鼓励与支持。 感谢微软亚洲研究院的闫莺老师和其他老师及同事,在实习工作中给予我的帮助和指导。 感谢IBM中国研究院的陈冠诚老师和其他老师及同事,在实习工作中给予我的帮助和指导。 感谢连城、明风、Daoyuan Wang等大牛以及Michael Armbrust、Re
9、ynold Xin、Sean Owen等多位社区大牛,在开发和技术学习中对我的点拨和指导,以及社区的各位技术专家们的博客文章。本 书多处引用了他们的观点和思想。 感谢机械工业出版社华章公司的首席策划杨福川和编辑高婧雅,在近半年的时间中始终支持我的写作,给我鼓励和帮助,引导我顺利完成全部书稿。 特别致谢 最后,我要特别感谢我的女友蒋丹彤对我的支持,我为写作这本书,牺牲了很多陪伴你的时间。同时也要感谢你花了很大的精力帮助我进行书稿校对。正因为有了你的付出与支持,我才能坚持写下 去。 感谢我的父母、姐姐,有了你们的帮助和支持,我才有时间和精力去完成全部写作。 谨以此书献给我最亲爱的家人,以及众多热爱
10、大数据技术的朋友们! 第1章 Spark简介 本章主要介绍Spark大数据计算框架、架构、计算模型和数据管理策略及Spark在工业界的应用。围绕Spark的BDAS项目及其子项目进行了简要介绍。目前,Spark生态系统已经发展成为一个包含多个 子项目的集合,其中包含SparkSQL、Spark Streaming、GraphX、MLlib等子项目,本章只进行简要介绍,后续章节再详细阐述。 1.1 Spark是什么 Spark是基于内存计算的大数据并行计算框架。Spark基于内存计算,提高了在大数据环境下数据处理的实时性,同时保证了高容错性和高可伸缩性,允许用户将Spark部署在大量廉价硬件之上
11、,形成 集群。 Spark于2009年诞生于加州大学伯克利分校AMPLab。目前,已经成为Apache软件基金会旗下的顶级开源项目。下面是Spark的发展历程。 1.Spark的历史与发展 2009年:Spark诞生于AMPLab。 2010年:开源。 2013年6月:Apache孵化器项目。 2014年2月:Apache顶级项目。 2014年2月:大数据公司Cloudera宣称加大Spark框架的投入来取代MapReduce。 2014年4月:大数据公司MapR投入Spark阵营,Apache Mahout放弃MapReduce,将使用Spark作为计算引擎。 2014年5月:Pivotal
12、 Hadoop集成Spark全栈。 2014年5月30日:Spark 1.0.0发布。 2014年6月:Spark 2014峰会在旧金山召开。 2014年7月:Hive on Spark项目启动。 目前AMPLab和Databricks负责整个项目的开发维护,很多公司,如Yahoo!、Intel等参与到Spark的开发中,同时很多开源爱好者积极参与Spark的更新与维护。 AMPLab开发以Spark为核心的BDAS时提出的目标是:one stack to rule them all,也就是说在一套软件栈内完成各种大数据分析任务。相对于MapReduce上的批量计算、迭代型计算以及基于Hive
13、 的SQL查询,Spark可以带来上百倍的性能提升。目前Spark的生态系统日趋完善,Spark SQL的发布、Hive on Spark项目的启动以及大量大数据公司对Spark全栈的支持,让Spark的数据分析范式更加丰 富。 2.Spark之于Hadoop 更准确地说,Spark是一个计算框架,而Hadoop中包含计算框架MapReduce和分布式文件系统HDFS,Hadoop更广泛地说还包括在其生态系统上的其他系统,如Hbase、Hive等。 Spark是MapReduce的替代方案,而且兼容HDFS、Hive等分布式存储层,可融入Hadoop的生态系统,以弥补缺失MapReduce的不
14、足。 Spark相比Hadoop MapReduce的优势1如下。 (1)中间结果输出 基于MapReduce的计算引擎通常会将中间结果输出到磁盘上,进行存储和容错。出于任务管道承接的考虑,当一些查询翻译到MapReduce任务时,往往会产生多个Stage,而这些串联的Stage又依 赖于底层文件系统(如HDFS)来存储每一个Stage的输出结果。 Spark将执行模型抽象为通用的有向无环图执行计划(DAG),这可以将多Stage的任务串联或者并行执行,而无须将Stage中间结果输出到HDFS中。类似的引擎包括Dryad、Tez。 (2)数据格式和内存布局 由于MapReduce Schema
15、 on Read处理方式会引起较大的处理开销。Spark抽象出分布式内存存储结构弹性分布式数据集RDD,进行数据的存储。RDD能支持粗粒度写操作,但对于读取操作,RDD 可以精确到每条记录,这使得RDD可以用来作为分布式索引。Spark的特性是能够控制数据在不同节点上的分区,用户可以自定义分区策略,如Hash分区等。Shark和Spark SQL在Spark的基础之上实现了 列存储和列存储压缩。 (3)执行策略 MapReduce在数据Shuffle之前花费了大量的时间来排序,Spark则可减轻上述问题带来的开销。因为Spark任务在Shuffle中不是所有情景都需要排序,所以支持基于Hash
16、的分布式聚合,调度中采用 更为通用的任务执行计划图(DAG),每一轮次的输出结果在内存缓存。 (4)任务调度的开销 传统的MapReduce系统,如Hadoop,是为了运行长达数小时的批量作业而设计的,在某些极端情况下,提交一个任务的延迟非常高。 Spark采用了事件驱动的类库AKKA来启动任务,通过线程池复用线程来避免进程或线程启动和切换开销。 3.Spark能带来什么 Spark的一站式解决方案有很多的优势,具体如下。 (1)打造全栈多计算范式的高效数据流水线 Spark支持复杂查询。在简单的“map”及“reduce”操作之外,Spark还支持SQL查询、流式计算、机器学习和图算法。同时
17、,用户可以在同一个工作流中无缝搭配这些计算范式。 (2)轻量级快速处理 Spark 1.0核心代码只有4万行。这是由于Scala语言的简洁和丰富的表达力,以及Spark充分利用和集成Hadoop等其他第三方组件,同时着眼于大数据处理,数据处理速度是至关重要的,Spark通过将 中间结果缓存在内存减少磁盘I/O来达到性能的提升。 (3)易于使用,Spark支持多语言 Spark支持通过Scala、Java及Python编写程序,这允许开发者在自己熟悉的语言环境下进行工作。它自带了80多个算子,同时允许在Shell中进行交互式计算。用户可以利用Spark像书写单机程序一样 书写分布式程序,轻松利用
18、Spark搭建大数据内存计算平台并充分利用内存计算,实现海量数据的实时处理。 (4)与HDFS等存储层兼容 Spark可以独立运行,除了可以运行在当下的YARN等集群管理系统之外,它还可以读取已有的任何Hadoop数据。这是个非常大的优势,它可以运行在任何Hadoop数据源上,如Hive、HBase、 HDFS等。这个特性让用户可以轻易迁移已有的持久化层数据。 (5)社区活跃度高 Spark起源于2009年,当下已有超过50个机构、260个工程师贡献过代码。开源系统的发展不应只看一时之快,更重要的是支持一个活跃的社区和强大的生态系统。 同时我们也应该看到Spark并不是完美的,RDD模型适合的
19、是粗粒度的全局数据并行计算。不适合细粒度的、需要异步更新的计算。对于一些计算需求,如果要针对特定工作负载达到最优性能,还是 需要使用一些其他的大数据系统。例如,图计算领域的GraphLab在特定计算负载性能上优于GraphX,流计算中的Storm在实时性要求很高的场合要比Spark Streaming更胜一筹。 随着Spark发展势头日趋迅猛,它已被广泛应用于Yahoo!、Twitter、阿里巴巴、百度、网易、英特尔等各大公司的生产环境中。 1 参见论文:Reynold Shi Xin,Joshua Rosen,Matei Zaharia,Michael Franklin,Scott Shen
20、ker,Ion Stoica Shark:SQL and Rich Analytics at Scale。 1.2 Spark生态系统BDAS 目前,Spark已经发展成为包含众多子项目的大数据计算平台。伯克利将Spark的整个生态系统称为伯克利数据分析栈(BDAS)。其核心框架是Spark,同时BDAS涵盖支持结构化数据SQL查询与分析 的查询引擎Spark SQL和Shark,提供机器学习功能的系统MLbase及底层的分布式机器学习库MLlib、并行图计算框架GraphX、流计算框架Spark Streaming、采样近似计算查询引擎BlinkDB、内存分布 式文件系统Tachyon、资源
21、管理框架Mesos等子项目。这些子项目在Spark上层提供了更高层、更丰富的计算范式。 图1-1为BDAS的项目结构图。 图1-1 伯克利数据分析栈(BDAS)项目结构图 下面对BDAS的各个子项目进行更详细的介绍。 (1)Spark Spark是整个BDAS的核心组件,是一个大数据分布式编程框架,不仅实现了MapReduce的算子map函数和reduce函数及计算模型,还提供更为丰富的算子,如filter、join、groupByKey等。Spark 将分布式数据抽象为弹性分布式数据集(RDD),实现了应用任务调度、RPC、序列化和压缩,并为运行在其上的上层组件提供API。其底层采用Scal
22、a这种函数式语言书写而成,并且所提供的API深度借 鉴Scala函数式的编程思想,提供与Scala类似的编程接口。 图1-2为Spark的处理流程(主要对象为RDD)。 图1-2 Spark的任务处理流程图 Spark将数据在分布式环境下分区,然后将作业转化为有向无环图(DAG),并分阶段进行DAG的调度和任务的分布式并行处理。 (2)Shark Shark是构建在Spark和Hive基础之上的数据仓库。目前,Shark已经完成学术使命,终止开发,但其架构和原理仍具有借鉴意义。它提供了能够查询Hive中所存储数据的一套SQL接口,兼容现有的 Hive QL语法。这样,熟悉Hive QL或者SQ
23、L的用户可以基于Shark进行快速的Ad-Hoc、Reporting等类型的SQL查询。Shark底层复用Hive的解析器、优化器以及元数据存储和序列化接口。Shark会将Hive QL编译转化为一组Spark任务,进行分布式运算。 (3)Spark SQL Spark SQL提供在大数据上的SQL查询功能,类似于Shark在整个生态系统的角色,它们可以统称为SQL on Spark。之前,Shark的查询编译和优化器依赖于Hive,使得Shark不得不维护一套Hive分 支,而Spark SQL使用Catalyst做查询解析和优化器,并在底层使用Spark作为执行引擎实现SQL的Operat
24、or。用户可以在Spark上直接书写SQL,相当于为Spark扩充了一套SQL算子,这无疑更加丰富了 Spark的算子和功能,同时Spark SQL不断兼容不同的持久化存储(如HDFS、Hive等),为其发展奠定广阔的空间。 (4)Spark Streaming Spark Streaming通过将流数据按指定时间片累积为RDD,然后将每个RDD进行批处理,进而实现大规模的流数据处理。其吞吐量能够超越现有主流流处理框架Storm,并提供丰富的API用于流数据计 算。 (5)GraphX GraphX基于BSP模型,在Spark之上封装类似Pregel的接口,进行大规模同步全局的图计算,尤其是当
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Spark 数据处理 技术 应用 性能 优化 html
链接地址:https://www.31doc.com/p-5514596.html