甲骨文认证体系
Vmware认证体系
AWS亚马逊
阿里云认证体系
红帽认证体系
ZStack云计算认证体系
思科认证体系
华为认证体系
CDA数据分析师认证
达梦认证体系
麒麟
定制化课程
SPARK入门
发布日期:2020-08-05 18:29:56阅读次数:

 目录
一. spark概述
1.简介
2.特点
3.与mapreduce对比
二. spark体系架构
1.架构介绍
2.核心概念RDD
一.spark概述
1.简介
spark是一种基于内存的快速,通用,可扩展的大数据计算引擎

基于内存:能够实现即写即读,时延很短,可以实现实时的数据处理。
通用:它是一种开源的计算引擎
可拓展:支持拓展节点,实现并行计算,增加数据的处理速度

2.特点

轻:它基于scala语言,scala语言的核心代码只有3万行,语言简便
快:
a.Spark既可以在内存中处理一切数据,也可以使用磁盘来处理未全部装入到内存中的数据。由于内存与磁盘在读/写性能上存在巨大的差距,因此CPU基于内存对数据进行处理的速度要快于磁盘数倍。
b.DAG(有向无环图),借助于DAG,Spark可以对应用程序的执行进行优化,能够很好地实现循环数据流和内存计算。 与 MapReduce 一个应用一次只能运行一个 Map 和 一个Reduce 不同,Spark 可以根据应用的复杂程度,分割成更多的 stage,这些 stage 组成一个DAG(有向无环图),spark 任务调度器根据 DAG 的依赖关系执行 stage。
灵:spark根据不同层面的灵活性,允许扩展新的数据算子
巧:spark可以和hadoop进行无缝连接,借用现有的大数据组件。

3.与mapreduce的对比

mapreduce 的缺点:


无法实时计算:reduce要等所有的map都运行完成之后才开始,延迟很大,没办法实时处理数据
无法进行流计算:流计算的输入数据是动态的,而MapReduce的输入数据是静态的,不能动态变化,这是因为MapReduce自身的设计特点决定了数据源必须是静态的。不能处理流式数据
无法进行DAG(有向图)计算:多个应用程序存在依赖关系,后一个应用程序的输入为前一个的输出。在这种情况下,MapReduce并不是不能做,而是使用后,每个MapReduce作业的输出结果都会写入磁盘,会造成大量的磁盘IO(输入输出),导致性能非常低下。

二.spark体系架构
1. 架构介绍


SparkCore:类似于MR的分布式内存计算框架,最大的特点是将中间计算结果直接放在内存中,提升计算性能。自带了Standalone模式的资源管理框架,同时,也支持YARN、MESOS的资源管理系统。FI集成的是Spark On Yarn的模式。其它模式暂不支持。
SparkSQL:Spark SQL是一个用于处理结构化数据的Spark组件,作为Apache Spark大数据框架的一部分,主要用于结构化数据处理和对数据执行类SQL查询。通过Spark SQL,可以针对不同数据格式(如:JSON,Parquet, ORC等)和数据源执行ETL操作(如:HDFS、数据库等),完成特定的查询操作。
SparkStreaming:微批处理的流处理引擎,将流数据分片以后用
SparkCore的计算引擎中进行处理。相对于Storm,实时性稍差,优势体现在吞吐量上。
Mllib和GraphX主要一些算法库。
FusionInsight Spark默认运行在YARN集群之上。
Structured Streaming为2.0版本之后的spark独有。

2. 核心概念RDD
2.1 RDD简介
RDD(Resilient Distributed Datasets) 即弹性分布式数据集,是一个只读的,可分区的分布式数据集。
- 分布式:并行处理,增加并行度
- 弹性:
1.可以自动进行内存和磁盘的雀环→默认存储在内存中,实在放不下放到磁盘当中
2.基于lineage的高效容错,数据丢失时可以快速恢复(血统机制)
2.1 RDD依赖关系


窄依赖:原来在一个分区的,操作之后还在同一个分区,父RDD的每一个分区最多被一个子RDD的一个分区所用
宽依赖:原来在一个分区的,操作之后不一定在同一个分区,父RDD的每一个分区对应一个子RDD的多个分区

可以简单理解:没有shuffle的就是窄依赖,有shuffle的就是宽依赖。
2.3 RDD的stage划分

stage的划分依据就是看是否产生了shuflle(即宽依赖),遇到一个shuffle操作就划分为前后两个stage.将窄依赖关系的尽量划分到一个Stage里面,来实现流水线计算提高效率。
窄依赖可以实现流水线优化,不需要等待
宽依赖不可以实现,需要等待集合
3. spark on yurn运行流程
3.1 spark重要角色
Driver:负责应用的业务逻辑和运行规划(DAG)。
ApplicationMaster:负责应用的资源管理,根据应用的需要,向           ResourceManager申请资源。
Client:需求提出方,负责提交需求(应用)。
ResourceManager:资源管理部门,负责整个集群的资源统一调度和分配。
Nodemanager:负责本节点的资源管理。
Executor:实际任务的执行者。一个应用会分拆给多个Executor来进行计算。
3.2 spark on yurn -client

1.客户端向ResourceManager发送Spark应用提交请求,ResourceManager为其返回应答,该应答中包含多种信息(如ApplicationId、可用资源使用上限和下限等)。client端将启动ApplicationMaster所需的所有信息打包,提交给ResourceManager上。
2.ResourceManager收到请求后,会为ApplicationMaster寻找合适的节点,并在该节点上启动它。ApplicationMaster是Yarn中的角色,在Spark中进程名字是ExecutorLauncher。
3.根据每个任务的资源需求,ApplicationMaster可向ResourceManager申请一系列用于运行任务的Container。
4.当ApplicationMaster(从ResourceManager端)收到新分配的Container列表后,会向对应的NodeManager发送信息以启动Container。ResourceManager分配Container给SparkContext,SparkContext和相关的NodeManager通讯,在获得的Container上启动 CoarseGrainedExecutorBackend,CoarseGrainedExecutorBackend启动后,开始向SparkContext注册并申请Task。
5.SparkContext分配Task给CoarseGrainedExecutorBackend执行。CoarseGrainedExecutorBackend执行Task并向SparkContext汇报运行状况。
3.3 spark on yurn -cluster


client生成Application信息,提交给ResourceManager。
ResourceManager为Spark Application分配第一个Container(ApplicationMaster),并在该Container上启动Driver。
ApplicationMaster向ResourceManager申请资源以运行Container。ResourceManager分配Container给ApplicationMaster,ApplicationMaster和相关的NodeManager通讯,在获得的Container上启动
Executor,Executor启动后,开始向Driver注册并申请Task。
Driver分配Task给Executor执行。
Executor执行Task并向Driver汇报运行状况。

3.4 yarn -client yarn -cluster区别
1.client 只申请资源
cluster 不仅要申请资源,还要和别的NM进行通讯
2.yarn -client适合测试,yarn -cluster适合生产
3.yarn -client任务提交节点宕机,整个任务都会失败,yarn -cluster不会
想了解更多IT知识以及华为认证信息,欢迎访问  腾科教育