Spark核心技术与高级应用.html.pdf

上传人:紫*** 文档编号:2916672 上传时间:2020-05-22 格式:PDF 页数:186 大小:23.47MB
返回 下载 相关 举报
Spark核心技术与高级应用.html.pdf_第1页
第1页 / 共186页
亲,该文档总共186页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《Spark核心技术与高级应用.html.pdf》由会员分享,可在线阅读,更多相关《Spark核心技术与高级应用.html.pdf(186页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、前言 上善若水,水善利万物而不争。 数据一如水,无色无味,非方非圆,以百态存于自然,于自然无违也。绵绵密密,微则无声,巨则汹涌;与人无争却又容纳万物。 生活离不开水,同样离不开数据,我们被数据包围,在数据中生活,在数据中入梦和清醒。 某夜入梦时分,趴桌而眠,偶遇庄周那只彩色翅膀的蝴蝶飞入梦中,在数据上翩翩起舞;清醒时分,蝴蝶化身数据,继续在眼前飞舞,顿悟大数据之哲学。本书从道德经和庄子各精选10句名 言,并结合大数据相关内容,对名言加以讲解,引导大家以老庄的思考方式来认识大数据的内涵,探求老子道之路和庄子智慧之路。 为什么要写这本书 2014年春天,我所在的知识云团队聚焦大数据,调研过程中,深

2、深感觉到国内资料匮乏,可供参考的资料仅是Spark官方文档。团队人员英文水平参差不齐,Spark官方文档门槛比较高,学习起来困难 重重。 当时和几个同事一起,对Spark官方文档进行了翻译,参考了机械工业出版社Spark快速数据处理的小册子,编了一本Spark数据处理内部文档,解决了一部分问题,并将Spark应用推向具体 业务。在实际业务中,相比传统的数据处理,尤其是实时处理和迭代计算,MapReduce在Spark面前显得苍白无力。随着Spark的应用越来越多,深深感觉到Spark数据处理内部文档的不足,遗憾的 是,一直没有时间进行补充和完善,俨然成了一块心病。 2014年9月,在机械工业出

3、版社华章公司福川兄的指导下,开始重点思索:Spark解决哪些问题、优势在哪里、从业人员遇到哪些困难、如何解决这些困难等问题,并得到了吴爱华、吕劲松、代其锋、 马海平、向海、陈明磊等几位同事的支持。怀着一颗“附庸风雅”之心,我决定和大家一起写一本具有一定实战价值的Spark方面的书籍。 当前大数据从业者,有数据科学家、算法专家、来自互联网的程序员、来自传统行业的工程师等,无论来自哪里,作为新一代轻量级计算框架,Spark集成Spark SQL、Spark Streaming、MLlib、 GraphX、SparkR等子框架,都提供了一种全新的大数据处理方式,让从业者的工作变得越来越便捷,也让机器

4、学习、数据挖掘等算法变得“接地气”。数据科学家和算法专家越来越了解社会,程序员和 工程师有了逆袭的机会。 本书写作过程中,Spark版本从1.0一直变化到1.5,秉承大道至简的主导思想,我们尽可能地按照1.5版本进行了统筹,希望能抛砖引玉,以个人的一些想法和见解,为读者拓展出更深入、更全面的思 路。 本书只是一个开始,大数据之漫漫雄关,还需要迈步从头越。 本书特色 本书虽是大数据相关书籍,但对传统文化进行了一次缅怀,吸收传统文化的精华,精选了道德经和庄子各10句名言,实现大数据和文学的有效统一。结合老子的“无为”和庄子的“天人合 一”思想,引导读者以辩证法思考方式来认识大数据的内涵,探求老子道

5、之路和庄子智慧之路,在大数据时代传承“老庄哲学”,让中国古代典籍中的瑰宝继续发扬下去。 从技术层面上,Spark作为一个快速、通用的大规模数据处理引擎,凭借其可伸缩、基于内存计算等特点,以及可以直接读写HDFS上数据的优势,实现了批处理时更加高效、延迟更低,已然成为轻量 级大数据快速处理的统一平台。Spark集成Spark SQL、Spark Streaming、MLlib、GraphX、SparkR等子框架,并且提供了全新的大数据处理方式,让从业者的工作变得越来越便捷。本书从基础讲起, 针对性地给出了实战场景;并围绕DataFrame,兼顾在Spark SQL和Spark ML的应用。 从适

6、合读者阅读和掌握知识的结构安排上讲,分为“基础篇”、“实战篇”、“高级篇”、“扩展篇”四个维度进行编写,从基础引出实战,从实战过渡高级,从高级进行扩展,层层推进,便于读者 展开讨论,深入理解分析,并提供相应的解决方案。 本书的案例都是实际业务中的抽象,都经过具体的实践。作为本书的延续,接下来会针对Spark机器学习部分进行拓展,期待和读者早点见面。 读者对象 (1)对大数据非常感兴趣的读者 伴随着大数据时代的到来,很多工作都变得和大数据息息相关,无论是传统行业、IT行业以及移动互联网行业,都必须要了解大数据的概念,对这部分人员来说,本书的内容能够帮助他们加深对大数 据生态环境和发展趋势的理解,

7、通过本书可以了解Spark使用场景和存在价值,充分体验和实践Spark所带来的乐趣,如果希望继续学习Spark相关知识,本书可以作为一个真正的开始。 (2)从事大数据开发的人员 Spark是类Hadoop MapReduce的通用并行计算框架,基于MapReduce算法实现的分布式计算,拥有Hadoop MapReduce所具有的优点,并且克服了MapReduce在实时查询和迭代计算上较大的 不足,对这部分开发人员,本书能够拓展开发思路,了解Spark的基本原理、编程思想、应用实现和优缺点,参考实际企业应用经验,减少自己的开发成本,对生产环境中遇到的技术问题和使用过程中的 性能优化有很好的指导

8、作用。 (3)从事大数据运维的人员 除了大数据相关的开发之外,如何对数据平台进行部署、保障运行环境的稳定、进行性能优化、合理利用资源,也是至关重要的,对于一名合格的大数据运维人员来说,适当了解Spark框架的编程思 想、运行环境、应用情况是十分有帮助的,不仅能够很快地排查出各种可能的故障,也能够让运维人员和开发人员进行有效的沟通,为推进企业级的运维管理提供参考依据。 (4)数据科学家和算法研究者 基于大数据的实时计算、机器学习、图计算等是互联网行业比较热门的研究方向,这些方向已经有一些探索成果,都是基于Spark实现的,这部分研究人员通过本书的阅读可以加深对Spark原理与应用 场景的理解,对

9、大数据实时计算、机器学习、图计算等技术框架研究和现有系统改进也有很好的参考价值,借此降低学习成本,往更高层次发展。 如何阅读本书 本书分为四篇,共计20章内容。 基础篇(第110章),详细说明什么是Spark、Spark的重要扩展、Spark的部署和运行、Spark程序开发、Spark编程模型以及Spark作业执行解析。 实战篇(第1114章),重点讲解Spark SQL与DataFrame、Spark Streaming、Spark MLlib与Spark ML、GraphX、SparkR,以及基于以上内容实现大数据分析、系统资源统计、LR模型、二级邻 居关系图获取等方面的实战案例。 高级篇

10、(第1518章),深入讲解Spark调度管理、存储管理、监控管理、性能调优。 扩展篇(第1920章),介绍Jobserver和Tachyon在Spark上的使用情况。 其中,第二部分实战篇为本书重点,如果你没有充足的时间完成全书的阅读,可以选择性地进行重点章节的阅读。如果你是一位有着一定经验的资深人员,本书有助于你加深基础概念和实战应用的理 解。如果你是一名初学者,请在从基础篇知识开始阅读。 勘误和支持 由于笔者的水平有限,编写时间仓促,书中难免会出现一些错误或者不准确的地方,恳请读者批评指正。如果你有更多的宝贵意见,可以通过Spark技术QQ交流群435263033,或者邮箱 ustcyuj

11、un联系到我,期待能够得到你们的真挚反馈,在技术之路上互勉共进。 致谢 感谢Spark官方文档,在写作期间提供给我们最全面、最深入、最准确的参考材料。 感谢我亲爱的搭档向海、代其锋、马海平三位大数据专家,在本书写作遭遇困惑的时候,一直互相鼓励,对本书写作坚持不放弃。 感谢知识云团队的范仲毅、杨志远、万文强、张东明、周熠晨、吴增锋、韩启红、吕劲松、张业胜,以及贡献智慧的陈明磊、林弘杰、王文庭、刘君、汪黎、王庆庆等小伙伴,由于你们的参与使本书 完成成为可能。 感谢机械工业出版社华章公司的首席策划杨福川和编辑高婧雅,在近一年的时间中始终支持我们的写作,你们的鼓励和帮助引导我们顺利完成全部书稿。 最后

12、,特别感谢我的老婆杨丽静,在宝宝出生期间,因为麻醉意外躺在病房一个月多的时间里,以微笑的生活态度鼓励我,时时刻刻给我信心和力量;还有我可爱的宝宝于潇杨,让我的努力变得有意 义。 谨以此书献给我亲爱的家人,知识云团队的小伙伴,以及众多热爱Spark技术的朋友们! 于俊 基础篇 第1章 Spark简介 第2章 Spark部署和运行 第3章 Spark程序开发 第4章 编程模型 第5章 作业执行解析 第6章 Spark SQL与DataFrame 第7章 深入了解Spark Streaming 第8章 Spark MLlib与机器学习 第9章 GraphX图计算框架与应用 第10章 SparkR(R

13、 on Spark) 第1章 Spark简介 上善若水,水善利万物而不争。 道德经第八章 数据一如水,无色无味,非方非圆,以百态存于自然,于自然无违也。绵绵密密,微则无声,巨则汹涌;与人无争却又容纳万物。 生活离不开水,同样离不开数据,我们被数据包围,在数据中生活。当数据越来越多时,就成了大数据。 想要理解大数据,就需要理解大数据相关的查询、处理、机器学习、图计算和统计分析等,Spark作为新一代轻量级大数据快速处理平台,集成了大数据相关的各种能力,是理解大数据的首选。 现在,让我们以向大师致敬的方式开始学习之旅,向Doug Cutting和Matei Zaharia两位大师致敬! 1.1 什

14、么是Spark 说起大数据,很多人会想起Doug Cutting以自己儿子玩具小象命名的开源项目Hadoop。Hadoop解决了大多数批处理工作负载问题,成为了大数据时代企业的首选技术。但随着大数据时代不可逆的 演进,人们发现,由于一些限制,Hadoop对一些工作负载并不是最优选择,比如: 缺少对迭代的支持; 中间数据需输出到硬盘存储,产生了较高的延迟。 探其究竟,MapReduce设计上的约束比较适合处理离线数据,在实时查询和迭代计算上存在较大的不足,而随着具体业务的发展,业界对实时查询和迭代计算有更多的需求。 2009年,美国加州大学伯克利分校实验室小伙伴们基于AMPLab的集群计算平台,

15、立足内存计算,从多迭代批量处理出发,兼顾数据仓库、流处理、机器学习和图计算等多种计算范式,正式将Spark 作为研究项目,并于2010年进行了开源。 什么是Spark?Spark作为Apache顶级的开源项目,是一个快速、通用的大规模数据处理引擎,和Hadoop的MapReduce计算框架类似,但是相对于MapReduce,Spark凭借其可伸缩、基于内存计 算等特点,以及可以直接读写Hadoop上任何格式数据的优势,进行批处理时更加高效,并有更低的延迟。相对于“one stack to rule them all”的目标,实际上,Spark已经成为轻量级大数据快速处理 的统一平台,各种不同的

16、应用,如实时流处理、机器学习、交互式查询等,都可以通过Spark建立在不同的存储和运行系统上,下面我们来具体认识一下Spark。 1.1.1 概述 随着互联网的高速发展,以大数据为核心的计算框架不断出现,从支持离线的MapReduce席卷全球,到支持在线处理的Storm异军突起,支持迭代计算的Spark攻城拔寨,支持高性能数据挖掘的MPI 深耕细作。各种框架诞生于不同的实验室或者公司,各有所长,各自解决了某一类问题,而在一些互联网公司中,百家争鸣,各种框架同时被使用,比如作者所在公司的大数据团队,模型训练和数据处理 采用MapReduce框架(包括基于Hive构建的数据仓库查询的底层实现),实

17、时性要求较高的线上业务采取Storm,日志处理以及个性化推荐采取Spark,这些框架都部署在统一的数据平台上,共享集群存 储资源和计算资源,形成统一的轻量级弹性计算平台。 1.1.2 Spark大数据处理框架 相较于国内外较多的大数据处理框架,Spark以其低延时的出色表现,正在成为继Hadoop的MapReduce之后,新的、最具影响的大数据框架之一,图1-1所示为以Spark为核心的整个生态圈,最底层 为分布式存储系统HDFS、Amazon S3、Hypertable,或者其他格式的存储系统(如HBase);资源管理采用Mesos、YARN等集群资源管理模式,或者Spark自带的独立运行模

18、式,以及本地运行模式。在 Spark大数据处理框架中,Spark为上层多种应用提供服务。例如,Spark SQL提供SQL查询服务,性能比Hive快350倍;MLlib提供机器学习服务;GraphX提供图计算服务;Spark Streaming将流式计 算分解成一系列短小的批处理计算,并且提供高可靠和吞吐量服务。值得说明的是,无论是Spark SQL、Spark Streaming、GraphX还是MLlib,都可以使用Spark核心API处理问题,它们的方法几乎是通 用的,处理的数据也可以共享,不仅减少了学习成本,而且其数据无缝集成大大提高了灵活性。 图1-1 以Spark为核心的轻量级大数

19、据处理框架 基于Hadoop的资源管理器YARN实际上是一个弹性计算平台,作为统一的计算资源管理框架,不仅仅服务于MapReduce计算框架,而且已经实现了多种计算框架进行统一管理。这种共享集群资源的 模式带来了很多好处。 资源利用率高。多种框架共享资源的模式有效解决了由于应用程序数量的不均衡性导致的高峰时段任务比较拥挤,空闲时段任务比较空闲的问题;同时均衡了内存和CPU等资源的利用。 实现了数据共享。随着数据量的增加,数据移动成本越来越高,网络带宽、磁盘空间、磁盘IO都会成为瓶颈,在分散数据的情况下,会造成任务执行的成本提高,获得结果的周期变长,而数据共享 模式可以让多种框架共享数据和硬件资

20、源,大幅度减少数据分散带来的成本。 有效降低运维和管理成本。相比较一种计算框架需要一批维护人员,而运维人员较多又会带来的管理成本的上升;共享模式只需要少数的运维人员和管理人员即可完成多个框架的统一运维管理,便 于运维优化和运维管理策略统一执行。 总之,Spark凭借其良好的伸缩性、快速的在线处理速度、具有Hadoop基因等一系列优势,迅速成为大数据处理领域的佼佼者。Apache Spark已经成为整合以下大数据应用的标准平台: 交互式查询,包括SQL; 实时流处理; 复杂的分析,包括机器学习、图计算; 批处理。 1.1.3 Spark的特点 作为新一代轻量级大数据快速处理平台,Spark具有以

21、下特点: 快速。Spark有先进的DAG执行引擎,支持循环数据流和内存计算;Spark程序在内存中的运行速度是Hadoop MapReduce运行速度的100倍,在磁盘上的运行速度是Hadoop MapReduce运行速度的10倍, 如图1-2所示。 易用。Spark支持使用Java、Scala、Python语言快速编写应用,提供超过80个高级运算符,使得编写并行应用程序变得容易。 通用。Spark可以与SQL、Streaming以及复杂的分析良好结合。基于Spark,有一系列高级工具,包括Spark SQL、MLlib(机器学习库)、GraphX和Spark Streaming,支持在一个应

22、用中同时使用这些架 构,如图1-3所示。 图1-2 Hadoop MapReduce和Spark在内存中的运行速度比较 图1-3 Spark高级工具架构 有效集成Hadoop。Spark可以指定Hadoop,YARN的版本来编译出合适的发行版本,Spark也能够很容易地运行在EC2、Mesos上,或以Standalone模式运行,并从HDFS、HBase、Cassandra和其他 Hadoop数据源读取数据。 1.1.4 Spark应用场景 Spark使用了内存分布式数据集,除了能够提供交互式查询外,还优化了迭代工作负载,在Spark SQL、Spark Streaming、MLlib、Gra

23、phX都有自己的子项目。在互联网领域,Spark在快速查询、实 时日志采集处理、业务推荐、定制广告、用户图计算等方面都有相应的应用。国内的一些大公司,比如阿里巴巴、腾讯、Intel、网易、科大讯飞、百分点科技等都有实际业务运行在Spark平台上。下面简 要说明Spark在各个领域中的用途。 快速查询系统,基于日志数据的快速查询系统业务构建于Spark之上,利用其快速查询以及内存表等优势,能够承担大部分日志数据的即时查询工作;在性能方面,普遍比Hive快210倍,如果使用内 存表的功能,性能将会比Hive快百倍。 实时日志采集处理,通过Spark Streaming实时进行业务日志采集,快速迭代

24、处理,并进行综合分析,能够满足线上系统分析要求。 业务推荐系统,使用Spark将业务推荐系统的小时和天级别的模型训练转变为分钟级别的模型训练,有效优化相关排名、个性化推荐以及热点点击分析等。 定制广告系统,在定制广告业务方面需要大数据做应用分析、效果分析、定向优化等,借助Spark快速迭代的优势,实现了在“数据实时采集、算法实时训练、系统实时预测”的全流程实时并行高维 算法,支持上亿的请求量处理;模拟广告投放计算效率高、延迟小,同MapReduce相比延迟至少降低一个数量级。 用户图计算。利用GraphX解决了许多生产问题,包括以下计算场景:基于度分布的中枢节点发现、基于最大连通图的社区发现、

25、基于三角形计数的关系衡量、基于随机游走的用户属性传播等。 1.2 Spark的重要扩展 大家知道,在Hadoop中完成即席查询(ad-hoc queries)、批处理(batch processing),流式处理(stream processing),需要构建不同的团队,每个团队需要不同的技术和经验,很难做到共 享。而Spark实现了平台融合,一个基础平台解决所有的问题,一个团队拥有相同的技术和经验完成所有的任务。 基于Spark的基础平台扩展了5个主要的Spark库,包括支持结构化数据的Spark SQL、处理实时数据的Spark Streaming、用于机器学习的MLlib、用于图计算的G

26、raphX、用于统计分析的SparkR,各 种程序库与Spark核心API高度整合在一起,并在持续不断改进。 1.2.1 Spark SQL和DataFrame Spark SQL是Spark的一个处理结构化数据的模块,提供一个DataFrame编程抽象。它可以看作是一个分布式SQL查询引擎,主要由Catalyst优化、Spark SQL内核、Hive支持三部分组成。 相对于传统的MapReduce API,Spark的RDD API有了数量级的飞跃,从Spark SQL 1.3.0开始,在原有SchemaRDD的基础上提供了与R风格类似的DataFrame API。 DataFrame是以指

27、定列(named columns)组织的分布式数据集合,在Spark SQL中,相当于关系数据库的一个表,或R/Python的一个数据框架,但后台更加优化。 DataFrames支持多种数据源构建,包括:结构化数据文件(Parquet、JSON)加载、Hive表读取、外部数据库读取、现有RDD转化,以及SQLContext运行SQL查询结果创建DataFrame,如图1-4所 示。 图1-4 DataFrame数据来源 新的DataFrame API一方面大幅度降低了开发者学习门槛,同时支持Scala、Java、Python和R语言,且支持通过Spark Shell、Pyspark Shell

28、和SparkR Shell提交任务。由于来源于 SchemaRDD,DataFrame天然适用于分布式大数据场景。 关于Spark SQL更具体的内容和案例会在后面第6章详细介绍。 1.2.2 Spark Streaming Spark Streaming属于核心Spark API的扩展,它支持高吞吐量和容错的实时流数据处理,它可以接受来自Kafka、Flume、Twitter、ZeroMQ或TCP Socket的数据源,使用复杂的算法表达和高级功 能来进行处理,如Map、Reduce、Join、Window等,处理的结果数据能够存入文件系统、数据库。还可以直接使用内置的机器学习算法、图形处理

29、算法来处理数据,数据输入/输出示意图如图1-5所示。 图1-5 基于Spark Streaming的数据输入/输出示意图 Spark Streaming的数据处理流程如图1-6所示,接收到实时数据后,首先对数据进行分批次处理,然后传给Spark Engine处理,最后生成该批次最后的结果。 图1-6 基于Spark Streaming的数据处理流程 Spark Streaming提供一种名为离散流(DStream)的高级抽象连续数据流。DStream直接支持Kafka、Flume的数据源创建,或者通过高级操作其他DStream创建,一个DStream是一个序列化的 RDD。 关于Spark S

30、treaming更具体的内容和案例会在第7章详细介绍。 1.2.3 Spark MLlib和ML MLlib是Spark对常用的机器学习算法的实现库,同时包括相关的测试和数据生成器。MLlib目前支持4种常见的机器学习问题:二元分类、回归、聚类和协同过滤,以及一个底层的梯度下降优化基础算 法。 MLlib基于RDD,天生就可以与Spark SQL、GraphX、Spark Streaming无缝集成,MLlib是MLBase的一部分,MLBase通过边界定义,力图将MLBase打造成一个机器学习平台,让机器学习开发的 门槛更低,让一些并不了解机器学习的用户也能方便地使用MLBase这个工具来处

31、理自己的数据。 MLlib支持将本地向量和矩阵存储在单个机器中,也包括有一个或更多的RDD支持的分布式矩阵。在目前的实现中,本地向量和矩阵都是为公共接口服务的简单数据模式,MLlib使用了线性代数包 Breeze。在监督学习中使用到的样本在MLlib中成为标记点。 Spark MLlib架构由底层基础、算法库和应用程序三部分构成。底层基础包括Spark的运行库、进行线性代数相关技术的矩阵库和向量库。算法库包括Spark MLlib实现的具体机器学习算法,以及为这 些算法提供的各类评估方法;主要实现算法包括建立在广义线性回归模型的分类和回归,以及协同过滤、聚类和决策树。在最新的Spark 1.5

32、.0版本中还新增了基于前馈神经网络的分类器算法 MultilayerPerceptronClassifier(MLPC),频繁项挖掘算法PrefixSpan、AssociationRules,实现Kolmogorov-Smirnov检验等等算法,随着版本的演进,算法库也会越来越强大。应用程序包括测试数 据的生成以及外部数据的加载等功能。 Spark的ML库基于DataFrame提供高性能API,帮助用户创建和优化实用的机器学习流水线(pipeline),包括特征转换独有的Pipelines API。相比较MLlib,变化主要体现在: 1)从机器学习的Library开始转向构建一个机器学习工作流

33、的系统,ML把整个机器学习的过程抽象成Pipeline,一个Pipeline是由多个Stage组成,每个Stage是Transformer或者Estimator。 2)ML框架下所有的数据源都是基于DataFrame,所有模型也尽量都基于Spark的数据类型表示,ML的API操作也从RDD向DataFrame全面转变。 关于MLlib和ML库更具体的内容和案例会在第8章详细介绍。 1.2.4 GraphX 从社交网络到语言建模,图数据规模和重要性的不断增长,推动了数不清的新型并行图系统(例如,Giraph和GraphLab)的发展。通过限制可以表达的计算类型和引入新的技术来分割和分发图,这 些

34、系统可以以高于普通的数据并行系统几个数量级的速度执行复杂的图算法,如图1-7所示。 图1-7 基于GraphX的并行图计算与其他方式的比较 GraphX是用于图和并行图计算的新Spark API。从上层来看,GraphX通过引入弹性分布式属性图(resilient distributed property graph)扩展了Spark RDD。这种图是一种伪图,图中的每个边和节 点都有对应的属性。 为了支持图计算,GraphX给出了一系列基础的操作(例如,subgraph、joinVertices、和MapReduceTriplets)以及基于Pregel API的优化变体。除此之外,Grap

35、hX还包含了一个不断扩展的图算法 和构建器集合,以便简化图分析的任务。 关于GraphX更具体的内容和案例会在第9章中详细介绍。 1.2.5 SparkR SparkR是AMPLab发布的一个R开发包,为Apache Spark提供了轻量的前端。SparkR提供了Spark中弹性分布式数据集(RDD)的API,用户可以在集群上通过R shell交互性地运行Job。例如,我们 可以在HDFS上读取或写入文件,也可以使用lapply函数进行方法调用,定义对应每一个RDD元素的运算。 Spark具有快速(fast)、可扩展(scalable)、交互(interactive)的特点,R具有统计(sta

36、tistics)、绘图(plots)的优势,R和Spark的有效结合,解决了R语言中无法级联扩展的难题,也极大地 丰富了Spark在机器学习方面能够使用的Lib库。 除了常见的RDD函数式算子Reduce、reduceByKey、groupByKey和Collect之外,SparkR也支持利用lapplyWithPartition对每个RDD的分区进行操作。SparkR也支持常见的闭包(closure)功能: 用户定义的函数中所引用到的变量会自动被发送到集群中的其他的机器上。 SparkR的工作原理如图1-8所示,首先加载R方法包和rJava包,然后通过SparkR初始化SparkContex

37、t。 图1-8 SparkR工作原理 关于SparkR处理数据挖掘更具体的内容和案例会在第10章详细介绍。 1.3 本章小结 大数据以及相关的概念、技术是业界和学界最近关注的热点,Spark在其中扮演了非常重要的角色。本书首先对Spark大数据框架进行了简单的介绍,展示了蓬勃发展的Spark大数据相关的特点和用 途,揭开了Spark整个生态环境的神秘面纱。并在此基础上,向读者介绍了基于Spark的重要扩展,包括Spark SQL和DataFrame、Spark Streaming、MLlib和ML、GraphX、SparkR,使读者对Spark能 做什么有个初步的了解。 第2章 Spark部署

38、和运行 合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下。 道德经第六十四章 合抱的粗木,是从细如针毫时长起来的;九层的高台,是一筐土一筐土筑起来的;千里的行程,是一步又一步迈出来的。那么,Spark高手之路,是从Spark部署和运行开始的,只要坚持,就一定会有收 获! 对于大部分想学习Spark的人而言,如何构建稳定的Spark集群是学习的重点之一,为了解决构建Spark集群的困难,本章内容从简入手,循序渐进,主要包括:部署准备工作、本地模式部署、独立模 式部署、YARN模式部署,以及基于各种模式的应用程序运行。 很多优秀的集成部署工具值得推荐,如cloudera manager,

39、但是本章重点讲解手动部署,借以加深对部署的理解。部署完毕,可以直接体验一下运行的快感,在自我陶醉的同时,细细品味过程中的 细节。 2.1 部署准备 部署准备工作包括下载Spark、编译Spark和集群部署,接下来会一一阐述。 2.1.1 下载Spark 无论如何部署Spark,首先必须下载合适的版本。Spark提供源码压缩包和编译好的二进制文件压缩包。本书的内容主要以Spark 1.5.0版本为基础,熟悉SBT和Maven编译的读者,建议尝试自己编译适 合的版本。 Spark下载路径:http:/spark.apache.org/downloads.html。 Spark下载步骤如下: 1)选

40、择Spark发行版本,截止到本书编写时最新版本为1.5.0; 2)选择发行包类型,可以选择Source Codecan build several Hadoop versions、Pre-built for Hadoop 2.6and later、Pre-built for Hadoop 2.4and later、Pre-built for Hadoop 2.3、Pre- built for Hadoop 1.X; 3)选择下载方式,包括Direct Download、Select Apache Mirror; 4)点击选定的版本Download Spark。 图2-1所示为Spark 1.5

41、.0版本的选择与下载过程。 图2-1 Spark选择与下载步骤图 2.1.2 编译Spark版本 Spark源码编译主要包括:使用SBT编译和使用Maven编译两种方式,编译的前置条件是配置Java环境变量。 1.配置Java环境变量 如果没有配置Java环境,需要先配置Java环境变量,从Oracle官网下载Java版本。 配置步骤如下: 第一步,安装Java程序,主要包括三种方式: 1)下载安装包进行安装; 2)通过软件源执行安装命令进行安装; 3)直接复制相同操作系统的安装文件目录(集群部署时一般采取这种模式)。 三种安装方式网上都有详细的参考资料。 第二步,配置Java环境,使用vim

42、命令在/etc/profile文件中增加变量,以Ubuntu 12.04操作系统为例,命令如下: sudo vim /etc/profile export JAVA_HOME=$YOUR_JAVA_HOME#$YOUR_JAVA_HOME为实际安装路径 export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib 如果想立即生效,可以通过运行source/etc/profile,否则只能在下次用户重新登录加载环境变量时生效。 第三

43、步,测试Java环境: 打开终端,输入java-version。如若有显示Java的版本信息,则表示安装成功。 注意 关于JDK的环境变量配置,一般包括四种方式: 1)在用户环境变量文件/etc/profile文件中添加变量,需要具有root权限才能进行配置,对Linux下所有用户长期有效。 2)在用户目录下的.profile文件中增加变量,对当前用户长期生效。 3)直接运行export命令定义变量,只对当前shell临时有效。在shell的命令行下直接使用export变量名=变量值定义变量,该变量只在当前的shell或其子shell下是有效的,若shell关闭,变量则失效,再打 开新shel

44、l时就没有这个变量,若需要使用,则还需要重新定义。 4)在系统环境变量/etc/environment中进行配置。 2.使用SBT编译 Spark使用SBT(simple build tool,简单编译工具)进行编译,编译源码时需要花费一些时间,如果没有安装sbt,Spark构建脚本将会为你下载正确的SBT版本。下载好Spark源码之后,在源码目录 (默认spark-1.5.0)执行打包命令: ./sbt/sbt package 如果底层存储采用HDFS,而其版本又和Spark默认的版本不一致,则需要修改Spark根目录所在的project/SparkBuild.scala文件中的HADOOP

45、_VERSION,然后重新编译。执行重新编译命令: ./sbt/sbt clean compile 从源码构建Spark将花费一些时间,当编译过程停顿很长时间没有反应之后,停止,然后重新执行./sbt/sbt package打包命令。 其中,Spark的SBT文件工程结构中包含以下文件: project工程定义文件; project/build/.scala主要的工程定义文件; project/build.properties工程,SBT以及Scala版本定义; src/main应用代码目录,不同的子目录名称表示不同的编程语言(例如,src/main/scala、src/main/java);

46、 src/main/resources你想添加到Jar包里的静态文件(如日志配置文件); lib_managed工程所依赖的Jar文件存放路径,在SBT更新时添加到该目录; target最终生成的文件存放的目录(例如,生成的thrift代码、class文件、Jar文件)。 3.使用Maven编译 Maven是一个采用纯Java编写的开源项目管理工具。Maven采用POM(Project Object Model,项目对象模型)概念来管理项目,所有的项目配置信息都被定义在一个叫做POM.xml的文件中,通过 该文件,Maven可以管理项目的整个声明周期,包括编译、构建、测试、发布、报告等。目前A

47、pache下绝大多数项目都已经采用Maven进行管理,Maven本身还支持多种插件,可以更加方便灵活地控制 项目。 使用Maven编译流程如下: 1)Maven下载:http:/maven.apache.org/; 2)Maven配置:export M2_HOME=$your_path;export PATH=$M2_HOME/bin:$PATH; 3)Maven编译Spark。 在任意目录下以命令行的形式设置Maven参数。其中,-Xmx为Java虚拟机堆内存最大允许值,-XX:MaxPermSize为最大允许的非堆内存大小,-XX:ReservedCodeCacheSize为缓存大小。 在

48、Spark源码目录(默认spark-1.5.0)下,编译参数hadoop.version可根据具体版本修改,编译Nexus依赖可以通过pom.xml文件修改,编译Spark运行环境命令如下: export MAVEN_OPTS=-Xmx2g -XX:MaxPermSize=512M -XX:ReservedCodeCacheSize=512m mvn -Pyarn -Phadoop-2.3 -Dhadoop.version=2.3.0 -DskipTests clean package 2.1.3 集群部署概述 在进行Spark编程之前,我们要进行Spark集群部署,目前与Spark相关的集群

49、环境,也就是集群管理器(cluster manager),主要包括:Spark自带的Standalone资源管理器、Mesos集群管理器和 Hadoop YARN资源管理器。 表2-1总结了集群部署和运行过程中,可能会使用到的集群相关基础概念,可以对集群部署和运行有个更深刻的理解。 表2-1 集群相关基础概念 2.2 Spark部署 Spark部署主要包括Local模式部署、Standalone模式部署、YARN模式部署、Mesos模式部署(参考官方文档)。 其中,集群部署模式如下: 独立部署模式:Spark自带的一种简单集群管理器,使用该集群管理器可以轻松地建立一个集群; Apache Mesos:一个通用的集群管理器,该集群管理器也可以运行MapReduce和服务应用(实际业务没有采取该种架构,本书没有对该模式进行专门讲解,如需要了解,请参考官方文档); Hadoop YARN:Hadoop 2中的资源管理器,是当前主要使用的资源管理器。 除此之外,Spark的EC2启动脚本使得在Amazon EC2上启动一个独立模式集群变得容易。 2.2.1 Local模式

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 技术方案

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁