【云计算】Spark解析
小标 2019-02-20 来源 : 阅读 726 评论 0

摘要:本文主要向大家介绍了【云计算】Spark解析,通过具体的内容向大家展现,希望对大家学习云计算有所帮助。

本文主要向大家介绍了【云计算】Spark解析,通过具体的内容向大家展现,希望对大家学习云计算有所帮助。

【云计算】Spark解析

一 为什么用SPARK


先进的大数据分布式编程和计算框架 试图代替HADOOP(SPARK可以独立于HADOOP) 内存分布式计算:运行速度快 可以用不同语言编程(JAVA,SCALA,R,PYTHON) 可以从不同的数据源取数据(HDFS,Cassandra,HBase) 实现不同的大数据功能:Spark Core,Spark SQL,Spark Streaming,Spark MLIB 以及GraphX

优点:


运行速度快 支持迭代式和交互式运行 弹性数据集支持数据容错 支持有向无环图优化

二 SPARK的几种运行模式


批处理--用于大规模的分布式数据处理


流方式--Spark流用于传送和处理实时数据


交互式:用于处理在内存中的大块数据,较低的延迟性


三 SPARK的数据读取和存储


Spark可以从以下系统访问数据


hadoop HDFS 以及HIVE,HBASE等生态圈部件 Amazon S3 Cassandra, Mongodb 其他流工具 如Flume,Kafka所支持的各协议如AVRO另外Spark 可以支持一下文件格式:text,sequencefiles,AVRO,parquet

四 SPARK的主要部件


SPARK CORE:包含spark的主要基本功能.所有跟RDD有关的API都出自于SPARK CORE Spark SQL:spark中用于结构化数据处理的软件包 spark streaming:spark中用于处流数据的部件 MLlib:Spark中用来进行机器学习和数学建模的软件包 GraphX:spark中用来进行图计算(如社交媒体关系)的库函数 Cluster Managers:spark中用来管理机群或节点的软件平台

五 SPARK CORE


1.spark生态圈的核心:


负责从HDFS,Amazon s3 和HBase等持久层读取数据


在YARN和Standalone为资源管理器调度job完成分布式计算


包括两个重要部件


有向无环图(DAG)的分布式并行计算框架


容错分布式数据RDD


2.部件解析


操作(Operation):作用于RDD的各种操作分为Transformation(变换)和Action(操作)


DAGScheduler:把对job中的RDD有向无环图根据依赖关系划分为多个stage(阶段) 每一个stage是一个TaskSet,他还会根据RDD和stage之间的关系找出开销最小的调度方法,然后把stage以taskset的形式交给taskscheduler


stage是一个taskset


taskscheduler维护着所有task的运行状态,重试失败的task并把合适的task分发给worker中的executor


什么是job由多个stage(阶段)组成的任务


什么是阶段根据操作之间的依赖关系由多个算子组成的任务集


3.应用程序


应用程序包括以下两部分


Driver 初始化SparkContext(spark的入口) executor部分运行完毕后将sparkcontext关闭


Executor负责数据 集合数据集 文件数据集


六 RDD功能介绍


1.RDD两种类型


并行集合 (并行化集合是通过调用SparkContext的parallelize方法,在一个已经存在的数据集合上 创建的(一个Seq对象)。集合的对象将会被拷贝,创建出一个可以被并行操作的分 布式数据集)


文件系统数据集 (Spark可以将任何Hadoop所支持的存储资源转化成RDD,如本地文件(需要 网络文件系统,所有的节点都必须能访问到, HDFS, mongodb, HBase, Amazon S3等,Spark支持文本文件、SequenceFiles和任何Hadoop InputFormat格式。)


2.计算方式


变换(Transformations) (如:map, filter)的返回值仍然是一个RDD, Transformations操作是Lazy的,也就是说变换只是一些指令集而并不会去马 上执行,需要等到有Actions操作的时候才会真正计算给出结果。Lazy Evaluation 操作(Actions) (如:count, collect),Actions操作会返回结果或把RDD数据输出 到各类系统中。Actions触发Spark启动并找到最优的计算途径。返回值是非 并行化的数据集合比如 PYTHON 中的list

3.RDD的cache和persist


默认情况下当时用action 在RDD上时spark会重新计算刷新RDD,但也可以通过持久化方法cache和persist将RDD放在内存中,这样第二次使用action在RDD上时,spark讲不重新计算刷新RDD


cache和persist级别


dataset2 = dataset1.persist(StorageLevel. MEMORY_ONLY) 


dataset2 = dataset1.persist(StorageLevel.MEMORY_AND_DISK) 


dataset2 = dataset1.persist(StorageLevel. MEMORY_ONLY_SER) 


dataset2 = dataset1.persist(StorageLevel. MEMORY_AND_DISK_SER) 


dataset2 = dataset1.persist(StorageLevel. DISK_ONLY)


默认选项 ,rdd的(分区)数据直接以java对象的形式存储于JVM的内存中,如果内存空间不足,某些分区的数据将不会被缓存,需要在使用的时候根据世代信息重新计算 RDD的数据直接以Java对象的形式存储于JVM的内存中,如果内存空间不中,某些分区的数据会 被存储至磁盘,使用的时候从磁盘读取。 RDD的数据(Java对象)序列化之后存储于JVM的内存中(一个分区的数据为内存中的一个字节 数组),相比于MEMORY_ONLY能够有效节约内存空间(特别是使用一个快速序列化工具的情况 下),但读取数据时需要更多的CPU开销;如果内存空间不足,处理方式与MEMORY_ONLY相同。 相比于MEMORY_ONLY_SER,在内存空间不足的情况下,将序列化之后的数据存储于磁盘。 仅仅使用磁盘存储RDD的数据(未经序列化)。

七 RDD元素变换


1.MAP变换例子


map()参数是函数 函数应用于RDD每一个元素


2.flatMAP()参数是函数,函数应用于RDD每一个元素,将元素进行拆分展平,变成迭代器,返回值是新的RDD


3.filter() 参数是函数,函数会过滤掉不符合条件的元素,返回值是新的RDD


4.连接变换例子


union() 两个rdd并集


intersection()交集


subtract()差集


cartesian()乘积


5.count()返回RDD里元素的数量


6.reduce()并行汇总所有RDD元素


7.countByValue()各元素在RDD中出现的次数


8.aggregate操作例子


aggregate((0,0),seqOp,combOp)


类似于reduce(),但用于返回不同类型。接受三个参数:zeroValue: seqOp操作符的每个分区累积结果的初始值,以及combOp不同分区的组合结果的初始值。


操作符seqOp:用于在分区中累积结果的


操作符combOp:一个联合运算符,用于合并来自不同分区的结果


本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标大数据云计算大数据安全频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程