Spark大数据处理:技术、应用与性能优化.html.pdf

上传人:紫竹语嫣 文档编号:5514596 上传时间:2020-05-27 格式:PDF 页数:181 大小:6.88MB
返回 下载 相关 举报
Spark大数据处理:技术、应用与性能优化.html.pdf_第1页
第1页 / 共181页
Spark大数据处理:技术、应用与性能优化.html.pdf_第2页
第2页 / 共181页
Spark大数据处理:技术、应用与性能优化.html.pdf_第3页
第3页 / 共181页
Spark大数据处理:技术、应用与性能优化.html.pdf_第4页
第4页 / 共181页
Spark大数据处理:技术、应用与性能优化.html.pdf_第5页
第5页 / 共181页
点击查看更多>>
资源描述

《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的接口,进行大规模同步全局的图计算,尤其是当

25、用户进行多轮迭代时,基于Spark内存计算的优势尤为明显。 (6)Tachyon Tachyon是一个分布式内存文件系统,可以理解为内存中的HDFS。为了提供更高的性能,将数据存储剥离Java Heap。用户可以基于Tachyon实现RDD或者文件的跨应用共享,并提供高容错机制,保 证数据的可靠性。 (7)Mesos Mesos是一个资源管理框架1,提供类似于YARN的功能。用户可以在其中插件式地运行Spark、MapReduce、Tez等计算框架的任务。Mesos会对资源和任务进行隔离,并实现高效的资源任务调 度。 (8)BlinkDB BlinkDB是一个用于在海量数据上进行交互式SQL的

26、近似查询引擎。它允许用户通过在查询准确性和查询响应时间之间做出权衡,完成近似查询。其数据的精度被控制在允许的误差范围内。为了达到这 个目标,BlinkDB的核心思想是:通过一个自适应优化框架,随着时间的推移,从原始数据建立并维护一组多维样本;通过一个动态样本选择策略,选择一个适当大小的示例,然后基于查询的准确性和响 应时间满足用户查询需求。 1 Spark自带的资源管理框架是Standalone。 1.3 Spark架构 从上文介绍可以看出,Spark是整个BDAS的核心。生态系统中的各个组件通过Spark来实现对分布式并行任务处理的程序支持。 1.Spark的代码结构 图1-3展示了Spar

27、k-1.0的代码结构和代码量(不包含Test和Sample代码),读者可以通过代码架构对Spark的整体组件有一个初步了解,正是这些代码模块构成了Spark架构中的各个组件,同时读者 可以通过代码模块的脉络阅读与剖析源码,这对于了解Spark的架构和实现细节都是很有帮助的。 下面对图1-3中的各模块进行简要介绍。 scheduler:文件夹中含有负责整体的Spark应用、任务调度的代码。 broadcast:含有Broadcast(广播变量)的实现代码,API中是Java和Python API的实现。 图1-3 Spark代码结构和代码量 deploy:含有Spark部署与启动运行的代码。 c

28、ommon:不是一个文件夹,而是代表Spark通用的类和逻辑实现,有5000行代码。 metrics:是运行时状态监控逻辑代码,Executor中含有Worker节点负责计算的逻辑代码。 partial:含有近似评估代码。 network:含有集群通信模块代码。 serializer:含有序列化模块的代码。 storage:含有存储模块的代码。 ui:含有监控界面的代码逻辑。其他的代码模块分别是对Spark生态系统中其他组件的实现。 streaming:是Spark Streaming的实现代码。 YARN:是Spark on YARN的部分实现代码。 graphx:含有GraphX实现代码。

29、 interpreter:代码交互式Shell的代码量为3300行。 mllib:代表MLlib算法实现的代码量。 sql代表Spark SQL的代码量。 2.Spark的架构 Spark架构采用了分布式计算中的Master-Slave模型。Master是对应集群中的含有Master进程的节点,Slave是集群中含有Worker进程的节点。Master作为整个集群的控制器,负责整个集群的正常 运行;Worker相当于是计算节点,接收主节点命令与进行状态汇报;Executor负责任务的执行;Client作为用户的客户端负责提交应用,Driver负责控制一个应用的执行,如图1-4所示。 图1-4

30、Spark架构图 Spark集群部署后,需要在主节点和从节点分别启动Master进程和Worker进程,对整个集群进行控制。在一个Spark应用的执行过程中,Driver和Worker是两个重要角色。Driver程序是应用逻辑执行 的起点,负责作业的调度,即Task任务的分发,而多个Worker用来管理计算节点和创建Executor并行处理任务。在执行阶段,Driver会将Task和Task所依赖的file和jar序列化后传递给对应的Worker机 器,同时Executor对相应数据分区的任务进行处理。 下面详细介绍Spark的架构中的基本组件。 ClusterManager:在Standal

31、one模式中即为Master(主节点),控制整个集群,监控Worker。在YARN模式中为资源管理器。 Worker:从节点,负责控制计算节点,启动Executor或Driver。在YARN模式中为NodeManager,负责计算节点的控制。 Driver:运行Application的main()函数并创建SparkContext。 Executor:执行器,在worker node上执行任务的组件、用于启动线程池运行任务。每个Application拥有独立的一组Executors。 SparkContext:整个应用的上下文,控制应用的生命周期。 RDD:Spark的基本计算单元,一组RDD

32、可形成执行的有向无环图RDD Graph。 DAG Scheduler:根据作业(Job)构建基于Stage的DAG,并提交Stage给TaskScheduler。 TaskScheduler:将任务(Task)分发给Executor执行。 SparkEnv:线程级别的上下文,存储运行时的重要组件的引用。 SparkEnv内创建并包含如下一些重要组件的引用。 MapOutPutTracker:负责Shuffle元信息的存储。 BroadcastManager:负责广播变量的控制与元信息的存储。 BlockManager:负责存储管理、创建和查找块。 MetricsSystem:监控运行时性能指

33、标信息。 SparkConf:负责存储配置信息。 Spark的整体流程为:Client提交应用,Master找到一个Worker启动Driver,Driver向Master或者资源管理器申请资源,之后将应用转化为RDD Graph,再由DAGScheduler将RDD Graph转化为 Stage的有向无环图提交给TaskScheduler,由TaskScheduler提交任务给Executor执行。在任务执行的过程中,其他组件协同工作,确保整个应用顺利执行。 3.Spark运行逻辑 如图1-5所示,在Spark应用中,整个执行流程在逻辑上会形成有向无环图(DAG)。Action算子触发之后,

34、将所有累积的算子形成一个有向无环图,然后由调度器调度该图上的任务进行运算。Spark 的调度方式与MapReduce有所不同。Spark根据RDD之间不同的依赖关系切分形成不同的阶段(Stage),一个阶段包含一系列函数执行流水线。图中的A、B、C、D、E、F分别代表不同的RDD,RDD内 的方框代表分区。数据从HDFS输入Spark,形成RDD A和RDD C,RDD C上执行map操作,转换为RDD D,RDD B和RDD E执行join操作,转换为F,而在B和E连接转化为F的过程中又会执行Shuffle,最 后RDD F通过函数saveAsSequenceFile输出并保存到HDFS中。

35、 图1-5 Spark执行有向无环图 1.4 Spark分布式架构与单机多核架构的异同 我们通常所说的分布式系统主要指的是分布式软件系统,它是在通信网络互连的多处理机的架构上执行任务的软件系统,包括分布式操作系统、分布式程序设计语言、分布式文件系统和分布式数据库 系统等。Spark是分布式软件系统中的分布式计算框架,基于Spark可以编写分布式计算程序和软件。为了整体宏观把握和理解分布式系统,可以将一个集群视为一台计算机。分布式计算框架的最终目的是 方便用户编程,最后达到像原来编写单机程序一样编写分布式程序。但是分布式编程与编写单机程序还是存在不同点的。由于分布式架构和单机的架构有所不同,存在

36、内存和磁盘的共享问题,这也是我们 在书写和优化程序的过程中需要注意的地方。分布式架构与单机架构的对比如图1-6所示。 图1-6 分布式体系结构与单机体系结构的对比 1)在单机多核环境下,多CPU共享内存和磁盘。当系统所需的计算和存储资源不够,需要扩展CPU和存储时,单机多核系统显得力不从心。 2)大规模分布式并行处理系统是由许多松耦合的处理单元组成的,要注意的是,这里指的是处理单元而非处理器。每个单元内的CPU都有自己私有的资源,如总线、内存、硬盘等。这种结构最大的特 点在于不共享资源。在不共享资源(Share Nothing)的分布式架构下,节点可以实现无限扩展,即计算能力和存储的扩展性可以

37、成倍增长。 在分布式运算下,数据尽量本地运算,减少网络I/O开销。由于大规模分布式系统要在不同处理单元之间传送信息,在网络传输少时,系统可以充分发挥资源的优势,达到高效率。也就是说,如果操作 相互之间没有什么关系,处理单元之间需要进行的通信比较少,则采用分布式系统更好。因此,分布式系统在决策支持(DSS)和数据挖掘(Data Mining)方面具有优势。 Spark正是基于大规模分布式并行架构开发,因此能够按需进行计算能力与存储能力的扩展,在应对大数据挑战时显得游刃有余,同时保证容错性,让用户放心地进行大数据分析。 1.5 Spark的企业级应用 随着企业数据量的增长,对大数据的处理和分析已经

38、成为企业的迫切需求。Spark作为Hadoop的替代者,引起学术界和工业界的普遍兴趣,大量应用在工业界落地,许多科研院校开始了对Spark的研 究。 在学术界,Spark得到各院校的关注。Spark源自学术界,最初是由加州大学伯克利分校的AMPLab设计开发。国内的中科院、中国人民大学、南京大学、华东师范大学等也开始对Spark展开相关研 究。涉及Benchmark、SQL、并行算法、性能优化、高可用性等多个方面。 在工业界,Spark已经在互联网领域得到广泛应用。互联网用户群体庞大,需要存储大数据并进行数据分析,Spark能够支持多范式的数据分析,解决了大数据分析中迫在眉睫的问题。例如,国外

39、 Cloudera、MapR等大数据厂商全面支持Spark,微策略等老牌BI厂商也和Databricks达成合作关系,Yahoo!使用Spark进行日志分析并积极回馈社区,Amazon在云端使用Spark进行分析。国内同样得 到很多公司的青睐,淘宝构建Spark on Yarn进行用户交易数据分析,使用GraphX进行图谱分析。网易用Spark和Shark对海量数据进行报表和查询。腾讯使用Spark进行精准广告推荐。 下面将选取代表性的Spark应用案例进行分析,以便于读者了解Spark在工业界的应用状况。 1.5.1 Spark在Amazon中的应用 亚马逊云计算服务AWS(Amazon W

40、eb Services)提供IaaS和PaaS服务。Heroku、Netflix等众多知名公司都将自己的服务托管其上。AWS以Web服务的形式向企业提供IT基础设施服务,现在通常 称为云计算。云计算的主要优势是能够根据业务发展扩展的较低可变成本替代前期资本基础设施费用。利用云,企业无须提前数周或数月来计划和采购服务器及其他IT基础设施,即可在几分钟内即时运行 成百上千台服务器,并更快达成结果。 1.亚马逊AWS云服务的内容 目前亚马逊在EMR中提供了弹性Spark服务,用户可以按需动态分配Spark集群计算节点,随着数据规模的增长,扩展自己的Spark数据分析集群,同时在云端的Spark集群可

41、以无缝集成亚马逊云端的 其他组件,一起构建数据分析流水线。 亚马逊云计算服务AWS提供的服务包括:亚马逊弹性计算云(Amazon EC2)、亚马逊简单存储服务(Amazon S3)、亚马逊弹性MapReduce(Amazon EMR)、亚马逊简单数据库(Amazon SimpleDB)、亚马逊简单队列服务(Amazon Simple Queue Service)、Amazon DynamoDB以及Amazon CloudFront等。基于以上的组件,亚马逊开始提供EMR上的弹性Spark服务。用户可以像之 前使用EMR一样在亚马逊动态申请计算节点,可随着数据量和计算需求来动态扩展计算资源,将计

42、算能力水平扩展,按需进行大数据分析。亚马逊提供的云服务中已经支持使用Spark集群进行大数据分 析。数据可以存储在S3或者Hadoop存储层,通过Spark将数据加载进计算集群进行复杂的数据分析。 亚马逊AWS架构如图1-7所示。 图1-7 亚马逊AWS架构 2.亚马逊的EMR中提供的3种主要组件 Master Node:主节点,负责整体的集群调度与元数据存储。 Core Node:Hadoop节点,负责数据的持久化存储,可以动态扩展资源,如更多的CPU Core、更大的内存、更大的HDFS存储空间。为了防止HDFS损坏,不能移除Core Node。 Task Node:Spark计算节点,负

43、责执行数据分析任务,不提供HDFS,只负责提供计算资源(CPU和内存),可以动态扩展资源,可以增加和移除Task Node。 3.使用Spark on Amazon EMR的优势 构建速度快:可以在几分钟内构建小规模或者大规模Spark集群,以进行数据分析。 运维成本低:EMR负责整个集群的管理与控制,EMR也会负责失效节点的恢复。 云生态系统数据处理组件丰富:Spark集群可以很好地与Amazon云服务上的其他组件无缝集成,利用其他组件构建数据分析管道。例如,Spark可以和EC2 Spot Market、Amazon Redshift、Amazon Data pipeline、Amazon

44、 CloudWatch等组合使用。 方便调试:Spark集群的日志可以直接存储到Amazon S3中,方便用户进行日志分析。 综合以上优势,用户可以真正按需弹性使用与分配计算资源,实现节省计算成本、减轻运维压力,在几分钟内构建自己的大数据分析平台。 4.Spark on Amazon EMR架构解析 通过图1-8可以看到整个Spark on Amazon EMR的集群架构。下面以图1-8为例,分析用户如何在应用场景使用服务。 图1-8 Amazon Spark on EMR 构建集群,首先创建一个Master Node作为集群的主节点。之后创建两个Core Node存储数据,两个Core No

45、de总共有32GB的内存。但是这些内存是不够Spark进行内存计算的。接下来动态申请16 个Task Node,总共256GB内存作为计算节点,进行Spark的数据分析。 当用户开始分析数据时,Spark RDD的输入既可以来自Core Node中的HDFS,也可以来自Amazon S3,还可以通过输入数据创建RDD。用户在RDD上进行各种计算范式的数据分析,最终可以将分析 结果输出到Core Node的HDFS中,也可以输出到Amazon S3中。 5.应用案例:构建1000个节点的Spark集群 读者可以通过下面的步骤,在Amazon EMR上构建自己的1000个节点的Spark数据分析平

46、台。 1)启动1000个节点的集群,这个过程将会花费1020分钟。 ./elas2c-mapreduce -create alive -name “Spark/Shark Cluster“ -bootstrap-ac2on s3:/elasBcmapreduce/samples/spark/0.8.1/install-spark-shark.sh -bootstrap-name “Spark/Shark“ -instance-type m1.xlarge -instance-count 1000 2)如果希望继续动态增加计算资源,可以输入下面命令增加Task Node。 -add-instan

47、ce-group TASK -instance-count INSTANCE_COUNT -instance-type INSTANCE_TYPE 执行完步骤1)或者1)、2)后,集群将会处于图1-9所示的等待状态。 图1-9 集群细节监控界面 进入管理界面http:/localhost:9091可以查看集群资源使用状况;进入http:/localhost:8080可以观察Spark集群的状况。Lynx界面如图1-10所示。 3)加载数据集。 示例数据集使用Wiki文章数据,总量为4.5TB,有1万亿左右记录。Wiki文章数据存储在S3中,下载地址为s3:/bigdata-spark-demo

48、/wikistats/。 下面创建wikistats表,将数据加载进表: create external table wikistats ( projectcode string, pagename string, pageviews int, pagesize int ) ROW FORMAT DELIMITED FIELDS TERMINTED BY“ LOCATION s3n:/bigdata-spark-demo/wikistats/; ALTER TABLE wikistats add partition(dt=2007-12)location s3n:/bigdata-spark-demo/wikistats/2007/2007-12; http:/

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/环境 > 建筑资料


经营许可证编号:宁ICP备18001539号-1