首页 > 其他分享 >Spark基础

Spark基础

时间:2023-06-24 15:22:54浏览次数:38  
标签:DAG 分区 基础 RDD 算子 Spark 数据

Spark是一种基于内存的快捷、通用、可扩展的大数据分析引擎

1. Spark模块

Spark Core: Spark核心模块,包含RDD、任务调度、内存管理、错误恢复、与存储系统交互等

Spark SQL:用于处理结构化数据的一个模块,提供了2个编程抽象:DataFrame DataSet,并且作为分布式SQL查询引擎的作用。他将Hive SQL转化为MapReduce然后提交到集群上执行,大大简化了编写MapReduce的程序复杂性

Spark Streaming:提供对实时数据进行流式计算的组件,提供了用来操作数据流的API

MLlib:提供常见机器学习功能的程序库。包括分类、回归、聚类、协同过滤等

Graphx:用于图计算的API,能在海量数据上自如运行复杂图算法

2. Spark与MapReduce区别

①spark把运算的中间数据(shuffle阶段产生的数据)放在内存,减少磁盘交互,迭代计算效率高;mapreduce的中间结果需要落地,保存到磁盘

②spark容错性高,Spark通过弹性分布式数据集RDD来实现高效容错,某一部分丢失或者出错可以通过整个数据集计算流程的血缘关系来重新构建,但Mapreduce只能重新计算

③计算模型不同,mapreduce框架的hadoop分为map 和reduce两个阶段,两阶段完成了就结束,所以一个job能做的处理有限;而Spark计算模型是基于内存的迭代式计算模型,可以分为n个阶段,根据用户编写的RDD算子和程序,在处理完一个阶段后继续往下处理很多阶段,所以Spark较mapreduce计算模型更加灵活,可以提供更强大功能

Spark就是为了解决mapreduce数据保存到磁盘导致效率地下而产生的,spark原理还是mapreduce,只是shuffle放在内存中计算,所以效率很高

2.1 Spark与Mapreduce的shuffle区别

shuffle本质:就是将Map端获取的数据使用分区机制进行划分,并将数据发送给对应的reducer的过程

相同点:都是将mapper(Spark里是ShuffleMapTask)的输出进行partition,不同的partition送到不同的reducer

不同点:Mapreduce默认是排序,Spark默认不排序

2.2 Spark效率比MapReduce高

①Spark基于内存计算,减少低效的磁盘交互

②高效的调度算法,基于DAG

③容错机制Linage

3 RDD

RDD是弹性分布数据集,是spark基本数据结构。它是一个不可变、分区、里边元素并行计算的集合

 

 3.1 RDD五大属性

①RDD是有分区的,分区时RDD数据存储的最小单位,一份RDD数据本质上分割成多个分区

②计算方法作用到每个分区上 

③RDD之间时有相互依赖关系的(血缘关系)

④KV型RDD可以有分区器,默认分区器:hash分区规则

⑤RDD分区规划会尽量靠近数据所在服务器

4. DAG

DAG指的是数据转换执行的过程,有方向无闭环

4.1 DAG为什么要划分Stage

为了并行计算。将一个DAG划分为多个Stage,同一个Stage中有多个算子操作,可以形成一个pipline流水线,流水线内的多个平行的分区可以并行执行

4.2 DAG的Stage如何划分

DAG叫做有向无环图,原始的RDD通过一系列的转换就形成了DAG,根据RDD之间的依赖关系不同将DAG划分成不同的stage。

对于“窄依赖",partition的转换处理在stage中完成计算,不划分。

对于“宽依赖”,由于shuffle的存在,只能在父RDD处理完成后,才能开始接下来的计算,也就是说需要划分stage。且"宽依赖"是划分stage的依据。

5.算子类

5.1 Transformation算子

transformation算子:用来将rdd进行转化,构建rdd血缘关系

(1) map:对RDD中所有元素施加一个函数映射,返回一个新RDD,该RDD有原RDD中的每个元素经过function转换后组成。 特点:输入一条,输出一条;

(2) filter:过滤符合条件的记录数,true保留,false过滤掉;

(3) flatmap:通过传入函数进行映射,对每一个元素进行处理。先map,后flat,与map相似,每个输入项可映射0到多个输出项;

(4) repartition:增加或减少分区,会产生shuffle (多分区到一个分区不会产生shuffle);

(5) MapPartitions:每次处理一个分区的数据,这个分区的数据处理完后,原RDD中分区数据才能释放,但是数据量大时会导致oom;

(6) MapPartitionsWithIndex:与MapPartition相似,除此之外还会带分区索引值;

(7) foreache:循环遍历数据集中每个元素,并运行相应的逻辑;

(8) sample:随机抽样算子,对传进去的数按比例放回或不放回的抽样;

(9) GroupByKey:对数据会按照key进行分组,key相同会在同一个分区里;

(10) ReduceByKey:将相同的key,将按照相应的逻辑进行处理。先进行本地聚合(分区聚合),在进行全局聚合;

(11) sortbykey:如果源RDD包含源类型(k,v)对,其中k可排序,则返回新RDD包含(k,v)对,并按照k排序;

(12) union:返回源数据集合参数数据的并集;

(13) distinct:返回对源数据集对元素去重后的新数据集;

还有intersection、aggregateBykey、join、cogroup、cartesian、pipe、coalesce、repartition、Repartition and SortWithPartition等算子。

5.2 Action算子

action算子会触发Spark提交作业(job),将数据输出spark系统

action算子会触发Spark提交作业(job),并将数据输出spark系统。

(1) reduce: 根据聚合逻辑聚合数据集中每个元素;

(2) take(n): 返回一个数据集包含前n个元素的集合;

(3) first: first=take(1)意思是返回数据集中的第1个元素;

(4) count: 返回数据集中元素的个数。会在结果计算完成后回收到Driver端;

(5) collect:将计算结果回收到Driver端;

(6) foreach: 循环遍历数据中每个元素,运行相应的逻辑;

(7) foreachPartition:遍历每个partition里边的数据;

还有takeSample、saveAsTextfile、takeOrdered、Save As SequenceFile、SaveAsObjectFile、countByKey等算子。

 

参考文献

https://blog.csdn.net/index_test/article/details/126709956

https://blog.csdn.net/qq_43496675/article/details/120172616

标签:DAG,分区,基础,RDD,算子,Spark,数据
From: https://www.cnblogs.com/enhance/p/17500811.html

相关文章

  • Linux 基础网络设置
    Linux基础网络设置拓扑图:推荐步骤:➢根据拓扑给DHCP服务➢配置修改实验步骤:根据拓扑给修改重新启动网卡服务查看查看挂载系统光盘查看挂载的系统光盘信息安装二、配置修改查看保留修改启动查看修改网卡配置文件配置保留自动获取保留设置配置自动获取释放和更新租约查看获取查看......
  • JavaScript 之 高级程序设计 基础篇 (一)
    导读此篇文章为作者拜读JavaScrpit第四版(红宝石)的笔记内容、适用于有经验的程序员阅读;作者java开发出身。在之前前后端不分离的时代使用esayUIJQuery的时代经常写js相关代码。现在前后端分离的时代;前端工程日新月异、各种框架层出不穷;万变不离其中;学好js才是根本;很喜欢并......
  • JavaScript基础
    JavaScript基础简介JavaScript是由网景公司发明,起初命名为LiveScript,后来由于SUN公司的介入更名为了JavaScript为了确保不同的浏览器上运行的JavaScript标准一致,所以几个公司共同定制了JS的标准名命名为ECMAScriptJS的特点解释型语言类似于C和Java的语法结构动态语言......
  • 【JS基础】instanceof 和 typeof
     instanceof 运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。objectinstanceofconstructortypeof 运算符返回一个字符串,表示操作数的类型。typeofoperandconsole.log('--------------------instanceof-------------------')//t......
  • 【技术积累】Git中的基础知识【一】
    Git是什么?有什么特点?Git是一个分布式版本控制系统,常用于软件开发中的源代码管理。它最初由Linux开发者LinusTorvalds创建,旨在管理Linux内核的开发。Git具有以下特点:1.分布式:与集中式版本控制系统(如SVN)不同,Git是一种分布式系统,这意味着每个开发者都可以拥有完整的代码仓库副本......
  • 【JS基础】hasOwnProperty 和 isPrototypeOf
    hasOwnProperty检查对象是否含有某个属性,无法检查其原型链上是否含有该属性isPrototypeOf检查一个对象是否存在于另一个对象的原型链上,比如parent.isPrototypeof(child)检查parent对象是否在child对象的原型链上 console.log('--------------------hasOwnProperty--......
  • 基础算法
    枚举枚举是一种常见的算法,通过各种技巧可以优化枚举次数。【POJ3061】Subsequence(尺取法):给定一个长度为\(n\)的数列\(a\),找到最短的区间\([l,r]\),使得\(\sum\limits_{i=l}^{r}a_i\geS\)。\(1\len\le10^5,1\leS\le10^8\)。这道题的朴素做法是枚举所有区间,......
  • MasterCAM 2021中文版数控编程加工基础入门视频教程
    适用对象:MasterCAM2021中文版内容简介:本教程通过12章节课程详细讲解MasterCAM2021软件的基础操作,包括2D/3D绘图、数控编程和曲面加工等,实战性强,纯干货,结合实际操作让用户快速掌握软件,真正实现学以致用。本教程画质虽不是高清的,但不影响观看,同时附安装包,暂无配套素材文件,好的......
  • C++ 类的基础知识
    1.类的定义类就是数据类型,是用户定义的数据类型,对象可以看成某个类的实例(某个类的变量)。所以说类是对象的封装,对象是类的实例。在类中定义的成员函数,都是inline函数。2.类的修饰符public、protected、private.public进行修饰的成员表示的是该类可以提供的接口、功能、或......
  • mysql基础
    一存储引擎1mysql存储引擎的种类:MYISAM InnoDB(默认)2.MYISAM和InnoDB的区别在于InnoDB支持事物处理和外键约束3.MYISAM和InnoDB的应用场景的区别:MYISAM不需要事物,空间小,已查询访问为主;InnoDB多删除,更新操作,安全性高,事物处理即并发控制查询存储文件showvariableslike'&sto......