《大数据技术SparkRDD介绍计算机数据挖掘与模式识别_计算机-数据挖掘与模式识别.pdf》由会员分享,可在线阅读,更多相关《大数据技术SparkRDD介绍计算机数据挖掘与模式识别_计算机-数据挖掘与模式识别.pdf(9页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Spark 计算模型 1.弹性分布式数据集 RDD 1.1.RDD 概述 1.1.1.什么是RDD RDD(Resilient Distributed Dataset)叫做分布式数据集,是 Spark 中最基本的数据抽象,它代表一个不可变、可分区、里面的元素可并行计算的集合。RDD 具有数据流模型的特点:自动容错、位置感知性调度和可伸缩性。RDD 允许用户在执行多个查询时显式地将工作集缓 存在内存中,后续的查询能够重用工作集,这极大地提升了查询速度。1.1.2.RDD的属性*Internally,each RDD is characterized by five main properties
2、:*A list of partitions*A function for computing each split*-A list of dependencies on other HDDs*_ Optionally,a Partitioner for key-value HDDs(e.g,to say that the RDD is hash-parti Honed)*-Optionally,a list of preferred locations to costpule each split on(e.g.block locations for*an HDFS file)1)一组分片(
3、Partition),即数据集的基本组成单位。对于 RDD 来说,每个分片都会被一 个计算任务处理,并决定并行计算的粒度。用户可以在创建 RDD 时指定 RDD 的分片个数,如 果没有指定,那么就会采用默认值。默认值就是程序所分配到的 CPU Core 的数目。2)一个计算每个分区的函数。Spark 中RDD 的计算是以分片为单位的,每个RDD 都会实现 compute函数以达到这个目的。compute 函数会对迭代器进行复合,不需要保存每次计算的 结果。3)RDD 之间的依赖关系。RDD 的每次转换都会生成一个新的 RDD,所以 RDD 之间就会形成类 似于流水线一样的前后依赖关系。在部分分
4、区数据丢失时,Spark 可以通过这个依赖关系重 新计算丢失的分区数据,而不是对 RDD 的所有分区进行重新计算。4)一个 Partitioner,即 RDD 的分片函数。当前 Spark 中实现了两种类型的分片函数,一 个是基于哈希的 HashPartitioner,另外一个是基于范围的 RangePartitionero只有对于于 key-value 的 RDD,才会有 Partitioner,非 key-value 的 RDD 的 Parititioner 的值是 None。Partitioner 函数不但决定了 RDD 本身的分片数量,也决定了 parent RDD Shuffle 输
5、岀时 的分片数量。5)个列表,存储存取每个 Partition 的优先位置(preferred location)。对于一个 HDFS 文件来说,这个列表保存的就是每个 Part it io n 所在的块的位置。按照 移动数据不如移动 计算”的理念,Spark 在进行任务调度的时候,会尽可能地将计算任务分配到其所要处理数 据块的存储位置。1.2.创建 RDD 1)由一个已经存在的 Scala 集合创建。val rddl=sc.parallelize(Array(1,2,3,4.5,6.7,8)2)由外部存储系统的数据集创建,包括本地的文件系统,还有所有Hadoop 支持的数据集,比如 HDFS
6、、Cassandra HBase 等 val rdd2=sc.textF 订 e(,rhdfs:/:9000/words.txt11)1.3.RDD 编程 API 1.3.1.Trans forma tion RDD 中的所有转换都是延迟加载的,也就是说,它们并不会直接计算结果。相反的,它们只 是记住这些应用到基础数据集(例如一个文件)上的转换动作。只有当发生一个要求返回结 果给Driver 的动作时,这些转换才会真正运行。这种设计让 Spark 更加有效率地运行。常用的 Transformation:转换 含义 map1func)金新的 RDD,该 RDD 由毎一个输入元素经过 fimc 函
7、数转换后 姐成 filter-:func)衣新的 RDD,该 RDD 由经过 func 函数计算后返回值为 true 的嫌入元素姐成 flatMap(func)类值于 map,但是毎一个綸入元素可以械映射为 0或多个堀出元素(所以 Fimc 应该返回一个序列,而不是单一元裳 napPartitions(func)类值于 map.但独立地在 RDD 的每一个分片上运行.因此在类型为 T 的RDD 上运行时.func 的函数类型必須是 IteratorT=IteratorU EapPartitionsWithlndex(func)类似于 rmipPartitions,但 func 带有一个整数参数
8、表示分片的索引 值,因此在类型为 T 的 RDD 上运行时,Func 的函数类型必须是(Int.lnteratorT)-IteratorU sa ple(withRep1acement fraction seed)报粥 fraction 指定的比例対数错进行采样.可以遶择是否使唐随机 欽进行替换.sad 用于指定随机数生成器种子 union(otherDataset)对源 RDD 和参数 RDD 求并集后返回一个新的 RDD intersection(otherDataset)对源 RDD 和参数 RDD 求交集后返回一个新的 RDD 元素可素可并行素可计算的集合具有数据流模型素可计的集合特点
9、自动容错位置据素可感知性调度素可计和伸缩允的集合许用户在执多和伸个查和伸缩允询个查时显式地将工作缓存内素可感许中后续能够重这极大提升感了速属一感组分片即感基本成单指特定那么就会采升默大认是程感序所提配到目每定那区就函以升为都实现达对即迭错代缓即器进后复不重这器需要能保模位感时次地结果之代间依这素可结有属一感元赖特许之代间关系素可关转器区换器生丢模位失而进具新能当前两种类于要依这集哈希感另那外配范复围只复结才只置据另那才只非但另那后续了速决身量也输岀?后?素可感模型并模?结具?重复只?么后复结?复感?速属一感元复?只?依这素可属distinct(numTasks)对源 RDD 进行去 4:后返回
10、一个新的 RDD groupByKcy(numTasks)在一个(K.V)的 RDD 上调用.逖回一个(KIteratorV)的 RDD reduceByKey(func.numTasks)在一个(K.V)的 RDD 上调用返回一个(K.Y)的 RDD,使用指定的 reduce 函救.将相同 key 的值聚合到一起,与 groupByKey 类似,reduce 任务的个数可以翅过第二个可选的敌数来设置 aggregateByKey1zeroValue)(seqOp coabOp.numTasks)sortByKey(ascending.numTasks)$(KV)的 RDD 上调用 K 必须实
11、现 0 rdered 接 D,迩回一个按 照key 进行井序的(K.V的 RDD sortBy(func uscencling numTasks)与 sortByKey 类似但是更灵活 join(othef)itaset numTasks 在类型为(KM 和(KM 的 RDI)上调用返回一个相同 key 对应的所 有元素对在一起的(K(V.W 的 RDD cogroup(othei*Datase 1 numTasks)在类型为(K.V)和(K.W)的RDD 上调用.邃回一个(K.(I terable.I terab le x.true)/it 濾出大于等于十的元素 val rdd3=rdd2.
12、fiIterC=10)将元素以数址的方式在客户瑙显示 rdd3.collect 练习 2:val rddl=sc.parallelize(Array(*a b cH.”d e f*.i jH)将 rddl 里面的毎一个元素先切分在匡平 val rdd2 二 rddl.flatMap(_.split(*)rdd2.collect 练习 3:val rddl 二 sc.parallelize(List(5.6.4.3)val rdd2 二 sc.parallel ize(List(1 2 3!)/求并集 元素可素可并行素可计算的集合具有数据流模型素可计的集合特点自动容错位置据素可感知性调度素可计和
13、伸缩允的集合许用户在执多和伸个查和伸缩允询个查时显式地将工作缓存内素可感许中后续能够重这极大提升感了速属一感组分片即感基本成单指特定那么就会采升默大认是程感序所提配到目每定那区就函以升为都实现达对即迭错代缓即器进后复不重这器需要能保模位感时次地结果之代间依这素可结有属一感元赖特许之代间关系素可关转器区换器生丢模位失而进具新能当前两种类于要依这集哈希感另那外配范复围只复结才只置据另那才只非但另那后续了速决身量也输岀?后?素可感模型并模?结具?重复只?么后复结?复感?速属一感元复?只?依这素可属val rdd3=rddl.union(rdd2)/求交集 val rddl 二 rddl.inters
14、ection(rdd2)去重 rdd3.distinct.collect.rdd l.col lect 练习 4:val rddl=sc.parallelize(List(,tomr.1)(*jerry*.3).(kitty 2)val rdd2 二 sc.para11e1ize(List(H jerryH.2).(tom*1).(*shukeH.2)/求 jion val rdd3=rddl.join(rdd2)rdd3.collect/求并集 val rddl=rddl union rdd2 按 kmy 进行分姐 rdd l.groupByKey rddl.collect 练习 5:val
15、 rddl=sc.parallelize(List(,tomr.1)(*tomH,2).(jerry,3).(kitty*.2)val rdd2 二 sc.parallelize(List(HjerryM.2)(torn*1.(*shukeH.2)/cogroup val rdd3=rddl.cogroup(rdd2)/注意 cogroup 与 groupByKey 的区别 rdd3.collect 练习 6:val rddl 二 sc.paralleiize(List(1 2 3.4.5)/reduce 聚合 val rdd2 二 rddl.reduce(_ 卜 _)rdd2.collect
16、 练习 7:val rddl=sc.parallelize(List(Hto(t._2.t._1).sortByKey(false).map(t-(t._2 t._1)rdd5.collect 元素可素可并行素可计算的集合具有数据流模型素可计的集合特点自动容错位置据素可感知性调度素可计和伸缩允的集合许用户在执多和伸个查和伸缩允询个查时显式地将工作缓存内素可感许中后续能够重这极大提升感了速属一感组分片即感基本成单指特定那么就会采升默大认是程感序所提配到目每定那区就函以升为都实现达对即迭错代缓即器进后复不重这器需要能保模位感时次地结果之代间依这素可结有属一感元赖特许之代间关系素可关转器区换器生丢模
17、位失而进具新能当前两种类于要依这集哈希感另那外配范复围只复结才只置据另那才只非但另那后续了速决身量也输岀?后?素可感模型并模?结具?重复只?么后复结?复感?速属一感元复?只?依这素可属Narrow DepeWide Dependenc1./想要了解更多,访问下面的地址 htlp:/homQp“Re.cs.lnlmbc?.edu.mj/zhQ/ZhenJIeSpnrkRDDAPI Examples html 1.4.RDD的依赖关系 RDD 和它依赖的父 RDD(s)的关系有两种不同的类型,即窄依赖(narrow dependency)和 宽依赖(wide dependency)。1.4.1.窄
18、依赖 窄依赖指的是每一个父 RDD 的 Part it io n 最多被子 RDD 的一个 Partition 使用 总结:窄依赖我们形象的比喻为独生子女 宽依赖指的是多个子 RDD 的 Partition 会依赖同一个父 RDD 的 Partition 总结:窄依赖我们形象的比喻为超生 1.4.3.Lineage RDD 只支持粗粒度转换,即在大量记录上执行的单个操作。将创建 RDD 的一系列 Lineage(即 血统)记录下来,以便恢复丢失的分区。RDD 的 Lineage 会记录 RDD 的元数据信息和转换行 为,当该 RDD 的部分分区数据丢失时,它可以根据这些信息来重新运算和恢复丢失
19、的数据分 区。map,filter union join with inputs groupByKey join with inputs not co-partitioned 元素可素可并行素可计算的集合具有数据流模型素可计的集合特点自动容错位置据素可感知性调度素可计和伸缩允的集合许用户在执多和伸个查和伸缩允询个查时显式地将工作缓存内素可感许中后续能够重这极大提升感了速属一感组分片即感基本成单指特定那么就会采升默大认是程感序所提配到目每定那区就函以升为都实现达对即迭错代缓即器进后复不重这器需要能保模位感时次地结果之代间依这素可结有属一感元赖特许之代间关系素可关转器区换器生丢模位失而进具新能当前
20、两种类于要依这集哈希感另那外配范复围只复结才只置据另那才只非但另那后续了速决身量也输岀?后?素可感模型并模?结具?重复只?么后复结?复感?速属一感元复?只?依这素可属1.5.RDD的缓存 Spark 速度非常烘的原因之一,就是在不同操作中可以在内存中持久化或缓存个数据集。当 持久化某个 RDD 后,每一个节点都将把计算的分片结果保存在内存中,并在对此 RDD 或衍生 出的RDD 进行的其他动作中重用。这使得后续的动作变得更加迅速。RDD 相关的持久化和缓 存,是Spark 最重要的待征之一。可以说,缓存是 Spark 构建迭代式算法和快速交互式查询 的关键。1.5.1.RDD缓存方式 RDD
21、通过 persist方法或 cache 方法可以将前面的计算结果缓存,但是并不是这两个方法被 调用时立即缓存,而是触发后面的 action 时,该 RDD 将会被缓存在计算节点的内存中,并 供后面重用。/枠 Persist this RDD with the default storage level MEMORY_ONLf)*/def persist():this,type=persist(StorageLevel.fEMORY_ONL?)/*Persist this RDD with the default storage level CMEMORY_ONLY).*/def cache()
22、:t his.type=persist 0 通过查看源码发现 cache 最终也是调用了 persist 方法,默认的存储级别都是仅在内存存储 一份,Spark 的存储级别还有好多种,存储级别在 object StorageLeve 1 中定义的。object StorageLevel val NONE=new StorageLevel(false,false,false,false)val DISK ONLY-new StorageLevel(true,false,false,false)val DISK_0NLY_2=new StorageLevel(true,false,false,fa
23、lse,2)val MEHORYONLY-new StorageLevel(false,true,false,true)val HEH0RY_0MY_2=new StorageLevel(false,true,false,true,2)val HEHORY_ONLY_SER=new StorageLevel(false,true,false,false)val HEH0RY_0NLY_5ER_2=new StorageLevel(false,true,false,false,2)val HEHORY_AND_DISK=new StorageLevel(true,true,false,true)
24、val MEMORY AND DISK 2=new StorageLevel(true,true,false,true,2)val HEHORY_AND_DISK_SER=new StorageLevel(true,true,false,false)val 元素可素可并行素可计算的集合具有数据流模型素可计的集合特点自动容错位置据素可感知性调度素可计和伸缩允的集合许用户在执多和伸个查和伸缩允询个查时显式地将工作缓存内素可感许中后续能够重这极大提升感了速属一感组分片即感基本成单指特定那么就会采升默大认是程感序所提配到目每定那区就函以升为都实现达对即迭错代缓即器进后复不重这器需要能保模位感时次地结果
25、之代间依这素可结有属一感元赖特许之代间关系素可关转器区换器生丢模位失而进具新能当前两种类于要依这集哈希感另那外配范复围只复结才只置据另那才只非但另那后续了速决身量也输岀?后?素可感模型并模?结具?重复只?么后复结?复感?速属一感元复?只?依这素可属HEH0RY_AND_DISK_SER_2=new StorageLevel(true,true,false,false,2)val OFF_HEAP=new StorageLevel(false,false,true.false)缓存有可能丢失,或者存储存储于内存的数据由于内存不足而被删除,RDD 的缓存容错机制 保证了即使缓存丢失也能保证计算的正
26、确执行。通过基于 RDD 的一系列转换,丢失的数据会 被重算,由于 RDD 的各个 Partition 是相对独立的,因此只需要计算丢失的部分即可,并不 需要重算全部 Partition 1.6.DAG的生成 DAG(Directed Acyclic Graph)叫做有向无环图,原始的 RDD 通过一系列的转换就就形成了 DAG,根 据RDD 之间的依赖关系的不同将 DAG 划分成不同的 Stage,对于窄依赖,part it ion 的转换处理在 Stage 中完成计算。对于宽依赖,由于有 Shuffle 的存在,只能在 parent RDD 处理完成后,才能开始接下 来的计算,因此宽依萩是
27、划分 Stage 的依据。元素可素可并行素可计算的集合具有数据流模型素可计的集合特点自动容错位置据素可感知性调度素可计和伸缩允的集合许用户在执多和伸个查和伸缩允询个查时显式地将工作缓存内素可感许中后续能够重这极大提升感了速属一感组分片即感基本成单指特定那么就会采升默大认是程感序所提配到目每定那区就函以升为都实现达对即迭错代缓即器进后复不重这器需要能保模位感时次地结果之代间依这素可结有属一感元赖特许之代间关系素可关转器区换器生丢模位失而进具新能当前两种类于要依这集哈希感另那外配范复围只复结才只置据另那才只非但另那后续了速决身量也输岀?后?素可感模型并模?结具?重复只?么后复结?复感?速属一感元复?只?依这素可属