内容简介:MapReduce和spark的对比spark 基本概念一个Application由一个Driver和若干个Job构成,一个Job由多个Stage构成,一个Stage由多个没有Shuffle关系的Task组成
MapReduce和spark的对比
MapReduce | Spark |
---|---|
数据存储结构:磁盘HDFS文件系统的split | 使用内存构建弹性分布式数据集RDD对数据进行运算和cache |
编程范式:Map + Reduce | DAG: Transformation + Action |
计算中间结果落到磁盘,IO及序列化、反序列化代价大 | 计算中间结果在内存中维护存取速度比磁盘高几个数量 |
Task以进程的方式维护,需要数秒时间才能启动任务 | Task以线程的方式维护对于小数据集读取能够达到亚秒级的延迟 |
spark 基本概念
- RDD:是Resillient Distributed Dataset(弹性分布式数据集)的简称,是分布式内存的一个抽象概念,提供了一种高度受限的共享内存模型
- DAG:是Directed Acyclic Graph(有向无环图)的简称,反映RDD之间的依赖关系
- Executor:是运行在工作节点(WorkerNode)的一个进程,负责运行Task
- Application:用户编写的Spark应用程序
- Task:运行在Executor上的工作单元
- Job:一个Job包含多个RDD及作用于相应RDD上的各种操作
- Stage:是Job的基本调度单位,一个Job会分为多组Task,每组Task被称为Stage,或者也被称为TaskSet,代表了一组关联的、相互之间没有Shuffle依赖关系的任务组成的任务集
-
Spark运行架构包括集群资源管理器(Cluster Manager)、运行作业任务的工作节点(Worker Node)、每个应用的任务控制节点(Driver)和每个工作节点上负责具体任务的执行进程(Executor)
资源管理器可以自带或Mesos或YARN
spark程序的架构
一个Application由一个Driver和若干个Job构成,一个Job由多个Stage构成,一个Stage由多个没有Shuffle关系的Task组成
spark程序的执行流程
当执行一个Application时,Driver会向集群管理器申请资源,启动Executor,并向Executor发送应用程序代码和文件,然后在Executor上执行Task,运行结束后,执行结果会返回给Driver,或者写到HDFS或者其他数据库中
RDD概念
为了防止数据的反复的读写,提升效率
一个RDD是一个分布式的对象集合,本质上是一个只读的记录集合,想要对它改变就要经过各种转换。每个RDD可以分成多个分区,每个分区就是一个数据集的片段,保存在集群中的不同节点上。
RDD提供了map join group by等等很多的操作符主要包含 转换(Transformation)和动作(Action) 两种。
转换操作只会记录转换的轨迹 动作操作才会真正的去计算
常用的Transformations 操作
map : 返回一个新的数据集
flatMap: 跟map类似 不过输入和输出可以不一样
filter : 筛选返回新的数据集
groupByKey: 根据key进行分组,每个key对应一个Iterable
reduceByKey : 对每个key对应的value进行reduce操作
sortByKey : 按照key进行排序
join : 当调用类型(K,V)和(K,W)的数据集时,返回(K,(V,W))对的数据集以及每个键的所有元素对
常用的action操作
reduce : 将RDD中的所有元素进行聚合操作
collect : 将RDD中所有元素获取到本地客户端
count : 获取RDD元素总数
take : 获取RDD中前n个元素
saveAsTextFile :将RDD元素保存到文件中,对每个元素调用toString方法
countByKey :对每个key对应的值进行count计数
foreach :遍历RDD中的每个元素
RDD之间的依赖关系——窄依赖和宽依赖
窄依赖 表现为一个父RDD的分区对应于一个子RDD的分区或多个父RDD的分区对应于一个子RDD的分区
比如 map filter union
宽依赖 表现为存在一个父RDD的一个分区对应一个子RDD的多个分区
比如 groupByKey
Stage的划分 遇到宽依赖就断开划分一个新的Stage,遇到窄依赖就继续往Stage中加task
spark的部署方式有三种
- Standalone(类似于MapReduce1.0,slot为资源分配单位)一般不用
- Spark on Mesos(和Spark有血缘关系,更好支持Mesos)
- Spark on YARN
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。