Spark总结Word文件下载.docx
- 文档编号:13162353
- 上传时间:2022-10-07
- 格式:DOCX
- 页数:20
- 大小:1.46MB
Spark总结Word文件下载.docx
《Spark总结Word文件下载.docx》由会员分享,可在线阅读,更多相关《Spark总结Word文件下载.docx(20页珍藏版)》请在冰豆网上搜索。
YARN是Hadoop中的一个资源管理框架
1.5Tachyon
Tachyon(读:
忒ki样)是一个分布式内存文件系统,可以理解为内存中的HDFS。
为了提供更高的性能,将数据存储剥离JavaHeap。
用户可以基于Tachyon实现RDD或者文件的跨应用共享,并提供高容错机制,保证数据可靠性。
1.6Zookeeper
用于解决分布式系统中一致性问题。
1.7大数据
大数据很难有一个明确定义。
但是他这样几个特点,即大容量、繁杂、高价值、快速,也就是4个V。
它与海量数据相比,我认为很难有一个界定,更多的是一种商业性的口号、名称,它与海量数据有很多交叉的地方,只是为了适应新的网络化世界,而提出这种大数据概念。
3弹性分布式数据集RDD
3.1RDD基本概念
(1)RDD的两种创建方式
1)外部文件创建,如HDFS、本地文件。
2)RDD转换得到新的RDD。
(2)RDD的两种操作算子
对于RDD可以有两种计算操作算子:
Transformation(变换)与Action(行动)。
只有行动(Action)算子才会触发作业(Job)提交。
(3)RDD的重要内部属性
1)分区列表。
2)计算每个分片的函数。
3)对父RDD的依赖列表。
4)对Key-Value对数据类型RDD的分区器,控制分区策略和分区数。
5)每个数据分区的地址列表(如HDFS上的数据块的地址)。
(4)窄依赖和宽依赖
窄依赖指,子RDD分区只由一个或多个父RDD中的一个分区转换而来。
map操作就是一个父RDD的一个分区,union操作就是两个父RDD的一个分区。
宽依赖指,子RDD的分区由父RDD的所有分区转换而来,即经过过shuffle操作。
,如如reduceByKey,groupByKey等。
3.2RDD与分布式共享内存的异同
分布式共享内存(DistributedSharedMemory,DSM)是一种通用的内存数据抽象,这种通用性同时也使其在商用集群上实现有效的容错性和一致性更加困难。
区别:
表3-1 RDD与DSM的对比
对比项目
RDD
DSM
读
批量或细粒度读操作
细粒度读操作
写
批量转换操作
细粒度转换操作
一致性
不重要(RDD是不可更改的)
取决于应用程序或运行时
容错性
细粒度,低开销使用lineage(血统)
需要检查点操作和程序回滚
落后任务的处理
任务备份,重新调度执行
很难处理
任务安排
基于数据存放的位置自动实现
取决于应用程序
此外,RDD对于扫描类型操作,如果内存不足以缓存整个RDD,就进行部分缓存,将内存容纳不下的分区存储到磁盘上。
3.4 Spark算子分类及功能
3.4.1.Saprk算子的作用
图3-3描述了Spark的输入、运行转换、输出。
在运行转换中通过算子对RDD进行转
换。
算子是RDD中定义的函数,可以对RDD中的数据进行转换和操作。
图3-3 Spark算子和数据空间
1)输入:
在Spark程序运行中,数据从外部数据空间(如分布式存储:
textFile读取
HDFS等,parallelize方法输入Scala集合或数据)输入Spark,数据进入Spark运行时数据空间,转化为Spark中的数据块,通过BlockManager进行管理。
2)运行:
在Spark数据输入形成RDD后便可以通过变换算子,如fliter等,对数据进行操作并将RDD转化为新的RDD,通过Action算子,触发Spark提交作业。
如果数据需
要复用,可以通过Cache算子,将数据缓存到内存。
3)输出:
程序运行结束数据会输出Spark运行时空间,存储到分布式存储中(如saveAsTextFile输出到HDFS),或Scala数据或集合中(collect输出到Scala集合,count返
回Scalaint型数据)。
Spark的核心数据模型是RDD,但RDD是个抽象类,具体由各子类实现,如MappedRDD、ShuffledRDD等子类。
Spark将常用的大数据操作都转化成为RDD的子类。
3.4.2算子分类
算子大致可以分为三大类。
1)Value型的Transformation算子,这种变换并不触发提交作业,针对处理的数据项是Value型的数据。
2)Key-Value型的Transfromation算子,这种变换并不触发提交作业,针对处理的数据项是Key-Value型的数据对。
3)Action算子,这类算子会触发SparkContext提交作业Job。
3.4.3Value型Transformation算子
处理数据类型为Value型的Transformation算子可以根据RDD变换算子的输入分区与输出分区关系分为以下几种类型。
1)输入分区与输出分区一对一型。
2)多对一型。
3)多对多型。
4)输出分区为输入分区子集型。
5)还有一种特殊的输入与输出分区一对一的算子类型:
Cache型。
Cache算子对RDD
分区进行缓存。
·
输入分区与输出分区一对一型
(1)map
数据对数据直接转换(通过一种函数)。
图3-4 map算子对RDD转换
(2)flatMap
数据对数据直接转换(通过一种函数),与map的区别在于RDD中的集合内元素会合并为一个集合
图3-5 flapMap算子对RDD转换
(3)mapPartitions
对分区内的元素按一定函数方式进行转换。
mapPartitions是map的一个变种。
map的输入函数是应用于RDD中每个元素,而mapPartitions的输入函数是应用于每个分区,也就是把每个分区中的内容作为整体来处理的。
它的函数定义为:
defmapPartitions[U:
ClassTag](f:
Iterator[T]=>
Iterator[U],preservesPartitioning:
Boolean=false):
RDD[U]
f即为输入函数,它处理每个分区里面的内容。
每个分区中的内容将以Iterator[T]传递给输入函数f,f的输出结果是Iterator[U]。
最终的RDD由所有分区经过输入函数处理后的结果合并起来的。
图3-6 mapPartitions算子对RDD转换
(4)glom(一瞥)
将分区内的集合元素形成数组,以进行一瞥的查看。
图3-7 glom算子对RDD转换
输入分区与输出分区多对一型
(1)union
使用union函数时需要保证两个RDD元素的数据类型相同,返回的RDD数据类型和被合并的RDD元素数据类型相同,并不进行去重操作,保存所有元素。
如果想去重,可以使用distinct()。
++符号相当于union函数操作。
图3-8 union算子对RDD转换
(2)cartesian
对两个RDD内的所有元素进行笛卡尔积操作。
操作后,内部实现返回CartesianRDD.
图3-9 cartesian算子对RDD转换
输入分区与输出分区多对多型
groupBy:
将元素通过函数生成相应的Key,数据就转化为Key-Value格式,之后将Key相同的元素合为一组。
图3-10 groupBy算子对RDD转换
输出分区为输入分区子集型
(1)filter
filter的功能是对元素进行过滤,对每个元素应用f函数,返回值为true的元素在RDD
中保留,返回为false的将过滤掉。
内部实现相当于生成FilteredRDD(this,sc.clean(f))。
图3-11 filter算子对RDD转换
(2)distinct
distinct将RDD中的元素进行去重操作.
图3-12 distinct去重算子对RDD转换
(3)subtract
subtract相当于进行集合的差操作,结果为RDD1中出现的元素而RDD2中不出现。
(4)sample
sample将RDD这个集合内的元素进行采样,获取所有元素的子集。
用户可以设定是否有放回的抽样、百分比、随机种子,进而决定采样方式。
内部实现是生成SampledRDD(withReplacement,fraction,seed)。
图3-14 sample算子对RDD转换
(5)takeSample
takeSample()函数和上面的sample函数是一个原理,但是不使用相对比例采样,而是按设定的采样个数进行采样,同时返回结果不再是RDD,而是相当于对采样后的数据进行Collect(),返回结果的集合为单机的数组。
图3-15 takeSample算子对RDD转换
Cache型
(1)cache
cache将RDD元素从磁盘缓存到内存,相当于persist(MEMORY_ONLY)函数的功能。
图3-16 cache算子对RDD转换
(2)persist
persist函数对RDD进行缓存操作。
数据缓存在哪里由StorageLevel枚举类型确定。
有以下几种类型的组合:
DISK代表磁盘,MEMORY代表内存,SER代表数据是否进行序列化存储。
3.3.4 Key-Value型Transformation算子
Key-Value型算子又大致可以分为3种类型:
输入分区与输出分区一对一、聚集和连接操作。
输入分区与输出分区一对一
mapValues:
针对(Key,Value)型数据中的Value进行Map操作,而不对Key进行
处理。
图3-19 mapValues算子RDD对转换
对单个RDD或两个RDD聚集
(1)单个RDD聚集
1)combineByKey
图3-20 comBineByKey算子对RDD转换
2)reduceByKey。
reduceByKey是更简单的一种情况,只是两个值合并成一个值,所以createCombiner
很简单,就是直接返回v.
图3-21 reduceByKey算子对RDD转换
3)partitionBy。
partitionBy函数对RDD进行分区操作。
如果原有RDD的分区器和现有分区器(partitioner)一致,则不重分区,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Spark 总结