——8.16开始整理
Spark快速大数据分析
推荐序:
一套大数据解决方案通常包含多个组件,从存储、计算和网络硬件层,到数据处理引擎,再到利用改良的统计和计算算法、数据可视化来获得商业洞见的分析层,这其中数据处理引擎起到了十分重要的作用,毫不夸张的说数据处理引擎至于大数据就相当于CPU之于计算机
spark起源:
2009年加州大学伯克利分校AMPlab 创立spark大数据处理和计算框架。不同于传统数据处理框架,spark基于内存的基本类型,为一些应用程序带来了100倍的性能提升。spark允许允许应用将数据加载到集群内存中反复查询,非擦汗那个适合于大数据处理和机器学习
spark发展:
spark已超越spark核心,发展到了spark streaming、sql、MLlib、GraphX、sparkR等模块,企业、交通、医疗、零售,推进商业洞见,加速决策;
作为MapReduce的继承者,spark主要有三大优点:1.spark非常好用,由于高级API剥离了对集群本身的关注,只关注任务实现的逻辑。2.spark很快,支持交互使用和复杂算法。3.spark是通用引擎,可以用它来完成各种各样的运算,包括SQL查询、文本处理、机器学习
第一章:spark数据分析导论
1.1 spark是什么
快速通用集群计算平台
spark扩展了mapreduce计算模型,高效的支持更多的计算模式,包括交互式查询和流处理(在处理大规模数据集时,速度非常重要,速度快就意味着我们可以进行交互式的数据操作),能够在内存中进行计算(不过就算必须在磁盘中进行复杂计算,spark依然比mapreduce更加高效)
spark适用于各种各样原来需要多种不同分布式平台的场景,包括批处理、迭代算法、交互式查询、流处理。通过在这一个统一的框架下支持这些不同类型的计算,spark是我们可以简单而低耗地把各种处理流程整合到一起。而这样的组合在实际开发中很有意义,进而减轻原来需要对各种平台分别管理的负担
spark可以运行在hadoop集群上,访问hadoop上任意数据源
1.2一个大一统的软件栈
spark的核心是一个对有许多计算任务组成的、运行在多个工作机器或者是一个计算集群上的应用进行调度、分发以及监控的计算引擎。该引擎支持多种不同应用场景专门设计的高级组件,例如 spark streaming、saprk sql、MLlib、GraphX ,这些组件关系密切并且可以相互调用,这样就可像平常软件项目中使用程序库那样,组合使用这些组件
各组间密切集成于spark平台的优点:
都可以从下层改进中受益(当spark核心引擎引入一个优化,sql和机器学习程序库都能自动获得性能提升)
运行整个软件栈的代价变小了(不需要同时运行支持多种不同应用场景所需的多个软件系统,只需在spark上调用各种库)这些代价包括系统的部署、维护、测试、支持、升级
能够无缝整合不同处理模型的应用
spark软件栈:独立调度器/YARN/Mesos——>spark core ——> spark sql/spark streaming/MLlib/GraphX
1.2.1 Spark Core
Spark Core 上实现了Spark的基本功能,包含任务调度、内存管理、错误恢复、与存储系统交互等模块。Spark Core还包含了对弹性分布式数据集的API定义。RDD表示分布在多个节点可并并行操作的元素集合,是spark主要的编程对象。spark core提供了创建和操作这些集合的多个API
1.2.2 Spark SQL
Spark SQL 是spark用来操作结构化数据的程序包,可以使用HiveQL来查询数据。Spark SQL支持多种数据源,比如 Hive表、Parquest以及Json。saprk SQL还支持开发者将SQL和传统的RDD编程数据操作方式结合(python、java、scala皆有相应程序包)
1.2.3 Spark streaming
Spark提供的对流式数据进行流式计算的组件。比如网页服务器日志或者网络服务中用户提交的状态更新组成的消息队列,都是数据流 可操作磁盘、内存、实时数据流
1.2.4 MLlib
Spark还提供一个机器学习的程序库,MLlib,提供了许多种机器学习的算法,包括分类、回归、聚类、协同过滤以及模型评估和数据导入等功能
1.2.5 GraphX
操作图的程序库,例如 社交网络的朋友关系图,可以进行并行的图计算以及常用的图算法
1.2.6 集群管理器
底层而言,spark设计为高效的在一个计算节点到数千个计算节点伸缩计算,spark支持多种集群管理器(Hadoop YARN、Apache Mesos),以及spark自带的独立调度器
第二章:spark下载与入门
spark 可以通过Python、java或者Scala使用
spark 本身是scala编写的,运行在java虚拟机(为什么要使用java虚拟机?java语言一个非常重要特点就是与平台无关性。而使用java虚拟机是实现这这一特点的关键。一般的高级语言如果在不同的平台运行,至少需要编译成不同的目标代码。而引入java虚拟机后java语言在不同平台与性是不需要重新编译。java语言使用java虚拟机屏蔽了具体平台的不同,使得java语言编译程序只需生成在java虚拟机上运行的字节码文件,就可以在不同平台不需修改的运行),所以需要集群都安装java环境,要是使用python接口,还需要一个python解释器
ps:.tgz(.tar.gz)
spark有python shell 和 scala版的shell
第三章:RDD编程
简介:
Spark对数据的核心抽象——弹性分布式数据集(Resilient Distributed Dataset)。RDD实际上是分布式的元素集合。在Spark中,对数据的所有操作不外乎创建RDD、转化已有RDD以及调用RDD操作进行求值,而在一切的背后,Spark会自动将RDD中的数据分发到集群中,并将操作并行执行
3.1 RDD基础
Spark中的RDD就是一个不可变的分布式对象集合。每个RDD被分成多个分区,这些分区运行在集群中不同节点
从外部数据创建出输入RDD
使用诸如filter()这样的转化操作对RDD进行转化,以定义新的RDD
对需要被重用的中间结果RDD执行persist()操作
使用行动操作(count()、first())来触发一次并行操作,spark会对计算优化后执行
3.2创建RDD
创建RDD两种方式:读取外部数据、驱动器中对一个集合进行转化
3.3 RDD操作
RDD支持两种操作:转化操作、行动操作。RDD的转化操作返回的是一个新的RDD,比如map()、filter(),而行动操作向驱动器系统返回结果或者把结果写到外部系统的操作,会触发实际的计算,比如 count()、first()。
3.3.1 转化操作
通过转化操作,从已有的RDD派生出新的RDD,spark会用 谱系图 来记录这些不同RDD的依赖关系。spark需要用这些信息计算每个RDD,可以依靠系谱图在持久化RDD丢失数据时恢复所丢失数据
inputRDD——》errorsRDD/warningRDD——》badlinesRDD
3.3.2 行动操作
转化操作是惰性操作,只有行动操作需要生成实际的输出,会强制执行用的RDD执行转化操作
take()取RDD少量元素,collect()函数可以用来获取整个RDD中的元素,不需注意的是,必须确定整个RDD元素能在单台内存中装的下,因此collect()不能用在大规模数据集
需要注意的是:每当我们调用一个新的行动操作时,整个RDD都会重新开始计算,所以要将中间结果持久化
3.3.3 惰性求值
RDD的转化操作是惰性的,RDD依赖关系由spark系谱图管理记录,当执行操作必须用到指定RDD时才强制执行生成该RDD的转化操作
spark用惰性求值,这样就可以将一些操作和起来来减少计算数据的步骤
相关资源