大数据复习笔记——Spark初始以及算子

  • Post author:
  • Post category:其他



由于之前因为毕业设计、答辩以及其他一些原因,耽搁了复习笔记很久了,导致迟迟没有更新;当然,这段时间学习还是不能落下的,依旧需要每天敲敲代码、学习一点新知识来巩固提高自己的知识水平,最近几篇我就会重点去介绍Spark。



一、Spark初始



Spark与MapReduce的区别

都是分布式计算框架,Spark基于内存,MR基于HDFS。Spark处理数据的能力一般是MR的十倍以上,Spark中除了基于内存计算外,还有DAG有向无环图来切分任务的执行先后顺序。



Spark运行模式

  • Local:多用于本地测试,如在idea中写程序测试等。
  • Standalone:是Spark自带的一个资源调度框架,支持完全分布式。
  • Yarn:Hadoop生态圈中的一个资源调度框架,并且Spark是基于Yarn来计算的。
  • Mesos:也是一种资源调度框架,了解不多。



二、Spark Core



1、RDD

定义:弹性分布式数据集。

五大特性:

  • RDD是由一系列的partition组成的.

  • 函数是作用在每一个partition(split)上的。

  • RDD之间有一系列的依赖关系(宽依赖和窄依赖)。

  • 分区器是作用在K,V格式的RDD上。

  • RDD提供一系列最佳的计算位置

    在这里插入图片描述

  • textFile方法底层封装的是读取MR读取文件的方式,读取文件之前先split,默认split大小是一个block大小。


  • RDD实际上不存储数据,这里方便理解,暂时理解为存储数据。

  • 什么是K,V格式的RDD?

    如果RDD里面存储的数据都是二元组对象,那么这个RDD我们就叫做K,V格式的RDD。

  • 哪里体现RDD的弹性(容错)?

    partition数量,大小没有限制,体现了RDD的弹性。

    RDD之间依赖关系,可以基于上一个RDD重新计算出RDD。

  • 哪里体现RDD的分布式?

    RDD是由Partition组成,partition是分布在不同节点上的。

    RDD提供计算最佳位置,体现了数据本地化。体现了大数据中“计算移动数据不移动”的理念。





三、Spark提交任务原理



1、Spark基于Standalone-client模式提交任务

在这里插入图片描述


图中可以看出大致的流程,简单的不做过多讲解。一些提交指令我这也暂不给出,指令学习死记硬背意义不大,还需要结合现实进行学习手敲。


总结:


client模式适用于测试调试程序。Driver进程是在客户端启动的,这里的客户端就是指提交应用程序的当前节点。在Driver端可以看到task执行的情况。生产环境下不能使用client模式,是因为:假设要提交100个application到集群运行,Driver每次都会在client端启动,那么就会导致客户端100次网卡流量暴增的问题。



2、Spark基于Standalone-cluster模式提交任务

在这里插入图片描述

同上图client模式相差不大,这里可以明显看出来是在worker节点中启动Driver,并且是随机分散在集群中任意一台,不会造成过大的网卡流量暴增的情况。


总结:


Driver进程是在集群某一台Worker上启动的,在客户端是无法查看task的执行情况的。假设要提交100个application到集群运行,每次Driver会随机在集群中某一台Worker上启动,那么这100次网卡流量暴增的问题就散布在集群上。



3、Spark基于Yanr-client模式提交任务

在这里插入图片描述


执行流程

  1. 客户端提交一个Application,在客户端启动一个Driver进程。
  2. 应用程序启动后会向RS(ResourceManager)发送请求,启动AM(ApplicationMaster)的资源。
  3. RS收到请求,随机选择一台NM(NodeManager)启动AM。
  4. AM启动后,会向RS请求一批container资源,用于启动Executor.
  5. RS会找到一批NM返回给AM,用于启动Executor。
  6. AM会向NM发送命令启动Executor。
  7. Executor启动后,会反向注册给Driver,Driver发送task到Executor,执行情况和结果返回给Driver端。


总结:


Yarn-client模式同样是适用于测试,因为Driver运行在本地,Driver会与yarn集群中的Executor进行大量的通信,会造成客户机网卡流量的大量增加.


Hadoop2.x之后出现了Yarn的概念,ResourceManager,NodeManager和NodeManager都是Yarn中的名词,作为一个资源调度的框架。



4、Spark基于Yarn-cluster模式提交任务

在这里插入图片描述

同理于Standalone Cluster 的模式里,RM随着找一台NM节点启动AM(相当于是Driver),省去了与客户端频繁通信的网络IO暴增的情况。


总结:


Yarn-Cluster主要用于生产环境中,因为Driver运行在Yarn集群中某一台nodeManager中,每次提交任务的Driver所在的机器都是随机的,不会产生某一台机器网卡流量激增的现象,缺点是任务提交后不能看到日志。只能通过yarn查看日志。



四、Spark的算子


算子这东西不要想着一口气吃成个胖子,平时遇到一个记住一个,在敲代码的同时一定要理解其中的意义。


Spark算子可以大体上分为三类:Transformation算子、Action算子和持久化算子。(严格划分的话是分为两类,持久化算子是基于transformation和aciton算子的)



1、Transformation算子

定义:是一类算子(函数)叫做转换算子,如map,flatMap,RduceByKey等。Transformation算子是延迟执行,所以也叫做懒执行。


– filter


过滤符合条件的记录数,true保留,false过滤掉。


– map


将一个RDD中的每个数据项,通过map中的函数映射变为一个新的元素。

特点:输入一条,输出一条数据。


– flatMap


先map后flat。与map类似,每个输入项可以映射为0到多个输出项。


– sample


随机抽样算子,根据传进去的小数按比例进行又放回或者无放回的抽样。


– reduceByKey


将相同的Key根据相应的逻辑进行处理。


– sortByKey/sortBy


作用在K,V格式的RDD上,对key进行升序或者降序排序。



2、Action行动算子

定义:Action类算子也是一类算子(函数)叫做行动算子,Transformations类算子是延迟执行,Action类算子是触发执行。一个application应用程序中有几个Action类算子执行,就有几个job运行。


– count


返回数据集中的元素数。会在结果计算完成后回收到Driver端。


– take(n)


返回一个包含数据集前n个元素的集合。


– first


first=take(1),返回数据集中的第一个元素。


– foreach


循环遍历数据集中的每个元素,运行相应的逻辑。


– collect


将计算结果回收到Driver端。



3、控制算子

定义:控制算子有三种,cache,persist,checkpoint,以上算子都可以将RDD持久化,持久化的单位是partition。cache和persist都是懒执行的。必须有一个action类算子触发执行。checkpoint算子不仅能将RDD持久化到磁盘,还能切断RDD之间的依赖关系。



版权声明:本文为Y_BigFFFFFF原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。