Spark 概述

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/mingyunxiaohai/article/details/81242993

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

猜你喜欢

转载自blog.csdn.net/mingyunxiaohai/article/details/81242993