大数据复习--spark

spark与hadoop之间的根本差异是多个作业之间的数据通信问题,spark多个作业之间数据通信是基于内存,而hadoop是基于磁盘。
一、executor与core
sparkexecutor是集群中运行在工作节点(worker)中的一个Jvm进程,是整个集群中的专门用于计算的节点。在提交应用中,可以提供参数指定计算节点的个数,以及对应的资源。这里的资源一般指的是executor的内存大小和使用的虚拟cpu核(core)数量。
–num-executors 配置executor的数量
–executor-memory 配置每个executor的内存大小
–executor-cores 配置每个executor的虚拟cpu core数量
二、并行度(parallelism)
整个集群并行执行任务的数量称为并行度。
并发(concurrency):把任务在不同的时间点交给处理器进行处理。在同一时间点,任务并不会同时运行。
并行(parallelism):把每一个任务分配给每一个处理器独立完成。在同一时间点,任务一定是同时运行。

三、spark
rdd:弹性分布式数据集
累加器:分布式共享只写变量
广播变量:分布式共享只读变量
(1)rdd
rdd叫做弹性分布式数据集,是spark中最基本的数据处理模型。代码中是一个抽象类,它代表一个弹性的、不可变、可分区、里面的元素可并行计算的集合。
弹性:①存储的弹性:内存与磁盘的自动切换
②容错的弹性:数据丢失可以自动恢复
③计算的弹性:计算出错重试机制
④分片的弹性:可根据需要重新分片
分布式:数据存储在大数据集群不同节点上。
数据集:RDD封装了计算逻辑,并不保存数据
数据抽象:rdd是一个抽象类,需要子类具体实现。
不可变:RDD封装了计算逻辑,是不可以改变的,想要改变,只能产生新的rdd,在新的RDD里面封装计算逻辑
可分区,并行计算
(2)spark执行原理
从计算的角度来讲,数据处理过程中需要计算资源(内存,cpu)和计算模型(逻辑)。执行时,需要将计算资源和计算模型进行协调和整合。
spark框架在执行时,先申请资源,然后将应用程序的数据处理逻辑分解成一个一个的计算任务。然后将任务发到已经分配资源的节点上,按照指定的计算模型进行数据计算,最后得到结果。rdd是spark框架中用于数据处理的核心模型。
①启动yarn集群环境
②spark通过申请资源创建调度节点和计算节点
③spark根据需求将计算逻辑根据分区划分成不同的任务
④调度节点将任务根据计算节点状态发送到对应的计算节点进行计算
从以上流程可以看出RDD在整个流程中主要用于将逻辑进行封装,并生成TASK发送给executor节点执行计算
(3)rdd算子
rdd根据数据处理方式的不同将算子整体上分为value类型,双value类型和key-value类型
①map
将处理的数据逐条进行映射转换,这里的转换可以是类型的转换,也可以是值的转换。
map和mappartition的区别
数据处理的角度
map算子是分区内一个数据一个数据的执行,类似于串行操作。而mappartitions算子是以分区为单位进行批处理操作。
功能的角度
map算子主要目的将数据源中的数据进行转换和改变,但是不会减少和增多数据。mappartitions算子需要传递一个迭代器,返回一个迭代器,没有要求元素的个数保持不变,所以可以增加或者减少数据。
性能的角度
map算子因为类似串行操作,所以性能比较低,而mappartition算子类似于批处理,所以性能比较高。但是mappartitions算子会长时间占用内存,那么这样会导致内存可能不够用,出现内存溢出的错误。所以在内存有限的情况下,不推荐使用mappartition操作
②flatmap
将处理的数据进行扁平化后再进行映射处理,所以算子也称为扁平映射。
③glom
将同一个分区的数据直接转换为相同类型的内存数组进行处理,分区不变
④groupby
将数据根据指定的规则进行分组,分区默认不变,但是数据会被打乱重新组合,我们将这样的操作称之为shuffle。极限情况下,数据可能被分在同一个分区中。
⑤filter
将数据根据指定的规则进行筛选过滤,符合规则的数据保留,不符合规则的数据丢弃。当数据进行筛选过滤后,分区不变,但是分区内的数据可能不均衡,生产环境下,可能会出现数据倾斜。
⑥sample
随机
⑦distinct
去重
⑧coalesce
根据数据量缩减分区,用于大数据集过滤后,提高小数据集的执行效率。
⑨repartition
扩大分区
⑩sort by
排序

你可能感兴趣的:(大数据,spark,hadoop)