5

Spark 概述

 3 years ago
source link: https://blog.csdn.net/mingyunxiaohai/article/details/81242993
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Spark 概述

chsmy2018 2018-07-27 17:28:08 145
分类专栏: 大数据

MapReduce和spark的对比

MapReduceSpark数据存储结构:磁盘HDFS文件系统的split使用内存构建弹性分布式数据集RDD对数据进行运算和cache编程范式:Map + ReduceDAG: 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

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK