spark
什么是spark:spark是一个计算框架
MR是一个批量处理框架,和spark里的spark-core一样
spark和MR的比较:
Spark相比MR速度快,MR作为一个job,在中间环节中结果是落地的(会经过磁盘交换),Spark计算过程中数据流转都是在内存的(减少了对HDFS的依赖)
|
MR |
spark |
优点 |
资源隔离,稳定性高,开发过程中不涉及内存锁(互斥锁、读写锁)的开发) |
多线程模型,速度快,适合低延迟的任务,适合于内存密集型任务 |
缺点 |
多进程模型,每个任务启动时间长,所以不适合于低延迟的任务 |
稳定性差 |
spark的运行模式:
(1)单机模式:方便人工调试
(2)Standalone模式:自己独立一套集群缺点:资源不利于充分利用
(3)Yarn模式:
1)Yarn-Client模式:Driver运行在本地
适合交互调试
2)Yarn-Cluster模式:Driver运行在集群(AM)
正式提交任务的模式(remote)
spark与mapReduce作业之间的区别
spark中:--Application:spark-submit提交的程序
--Drive:完成任务调度以及和executor和cluster manager进行协调
--Executor:每个spark executor作为一个yarn容器(container)运行
--job:和MR中的job不同,MR中的job主要是map和reduce,而spark中的job很好区分,一个算子就是一个job
--task:是spark中最新的执行单元,RDD一般带有partition,每个partition在executor上运行就是一个task
--stage:是spark中独有的,一般来说一个job会切成一定数量的stage,各个stage按顺序执行
spark中的应用程序
--应用程序:由一个drive program和多个job组成
-job: 由多个stage组成
-stage:对应一个taskset
-taskset:对应一组关联的相互之间没有shullfe依赖关系的task组成
-task:任务完成的最小工作单元
drive program:
-spark的核心组件
-构建sparkContext
-将用户提交的job转化为DAG图
-根据策略将DAG图划分为多个stage,根据分区生成一系列的task
-根据task需求想RM申请资源
-提交任务并检查任务状态
excutor:
– 真正执行task的单元,一个Work Node上可以有多个Executor
spark核心
Spark基于弹性分布式数据集(RDD)模型,具有良好的通用性、容错性与并行处理数据的能力
RDD( Resilient Distributed Dataset ):弹性分布式数据集(相当于集合),它的本质是数据 集的描述(只读的、可分区的分布式数据集),而不是数据集本身
RDD的关键特征:
– RDD使用户能够显式将计算结果保存在内存中,控制数据的划分,并使用更丰富的操作集合来处理
– 使用更丰富的操作来处理,只读(由一个RDD变换得到另一个RDD,但是不能对本身的RDD修改)
– 记录数据的变换而不是数据本身保证容错(lineage)
通常在不同机器上备份数据或者记录数据更新的方式完成容错,但这种对任务密集型任务代价很高
RDD采用数据应用变换(map,filter,join),若部分数据丢失,RDD拥有足够的信息得知这部分数据是如何计算得到的,可通过重新计算来得到丢失 的数据
这种恢复数据方法很快,无需大量数据复制操作,可以认为Spark是基于RDD模型的系统
– 懒操作,延迟计算,action的时候才操作
– 瞬时性,用时才产生,用完就释放
spark有两种算子:transformation和action算子
transformations是RDD之间的变换,action会对数据执行一定的操作
transformations采用懒策略,仅在对相关RDD进行action提交时才触发计算
RDD依赖关系
分为宽依赖和窄依赖,对其原理了解不是很透彻,继续学习,后期会更新在spark深入学习中