欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

大数据云计算——Spark组件

程序员文章站 2022-06-19 10:19:03
spark...

spark简介

Apache Spark是一个围绕速度、易用性和复杂分析构建的大数据处理框架,最初在2009年由加州大学伯克利分校的AMPLab开发,并于2010年成为Apache的开源项目之一,与Hadoop和Storm等其他大数据和MapReduce技术相比,Spark有如下优势:

  • Spark提供了一个全面、统一的框架用于管理各种有着不同性质(文本数据、图表数据等)的数据集和数据源(批量数据或实时的流数据)的大数据处理的需求
  • 官方资料介绍Spark可以将Hadoop集群中的应用在内存中的运行速度提升100倍,甚至能够将应用在磁盘上的运行速度提升10倍
  • 基于内存的、通用的可扩展的计算引擎。

spark生态系统主要包含了Spark Core、SparkSQL、SparkStreaming、MLLib和GraphX等组件。

1、海量数据批量处理 MapReduce

2、基于历史数据的交互式查询 Cloudera Impala

3、实时数据流的处理

spark可以部署在资源管理器Yarn之上,提供一站式大数据解决方案、spark可以同时支持海量数据批量处理、历史数据分析、实时数据处理

大数据云计算——Spark组件

Spark Core
包含 Spark 的基本功能;尤其是定义 RDD 的 API、操作以及这两者上的动作。其他 Spark 的库都是构建在 RDD 和 Spark Core 之上的
Spark SQL
提供通过 Apache Hive 的 SQL 变体 Hive 查询语言(HiveQL)与 Spark 进行交互的 API。每个数据库表被当做一个 RDD, Spark SQL 查询被转换为 Spark 操作。
Spark Streaming
对实时数据流进行处理和控制。 Spark Streaming 允许程序能够像普通 RDD 一样处理实时数据
Mllib
一个常用机器学习算法库,算法被实现为对 RDD 的 Spark 操作。这个库包含可扩展的学习算法,比如分类、回归等需要对大量数据集进行迭代的操作。
GraphX
控制图、并行图操作和计算的一组算法和工具的集合。 GraphX 扩展了 RDD API,包含控制图、创建子图、访问路径上所有顶点的操作。

spark原理

大数据云计算——Spark组件

Cluster Manager-制整个集群,监控 worker在 standalone 模式中即为 Master 主节点,控制整个集群,监控 worker。在 YARN 模式中为资源管理器。Worker 节点-负责控制计算节点、从节点,负责控制计算节点,启动 Executor 或者 Driver。
Driver: 运行 Application 的 main()函数
Executor:执行器,是为某个 Application 运行在 worker node 上的一个进程

大数据云计算——Spark组件

Spark 应用程序从编写到提交、执行、输出的整个过程如图所示,图中描述的步骤如下:

1. 用户使用 SparkContext 提供的 API(常用的有 textFile、 sequenceFile、 runJob、 stop 等)编写 Driver application 程序。此外 SQLContext、 HiveContext 及 StreamingContext 对SparkContext 进行封装,并提供了 SQL、 Hive 及流式计算相关的 API。2. 使用SparkContext提交的用户应用程序,首先会使用BlockManager和BroadcastManager将任务的 Hadoop 配置进行广播。然后由 DAGScheduler 将任务转换为 RDD 并组织成 DAG,DAG 还将被划分为不同的 Stage。最后由 TaskScheduler 借助 ActorSystem 将任务提交给集群管理器(Cluster Manager)。
3. 集群管理器(ClusterManager)给任务分配资源,即将具体任务分配到Worker上, Worker创建 Executor 来处理任务的运行。 Standalone、 YARN、 Mesos、 EC2 等都可以作为 Spark的集群管理器。

Spark详细运行过程

大数据云计算——Spark组件

大数据云计算——Spark组件

涉及的几个定义和详细的运行过程如下:

Application:Spark应用程序:指的是用户编写的Spark应用程序,包含了Driver功能代码和分布在集群中多个节点上运行的Executor代码。Spark应用程序,由一个或多个作业JOB组成,如下图所示。

大数据云计算——Spark组件

Driver:驱动程序:Spark中的Driver即运行上述Application的Main()函数并且创建SparkContext,其中创建SparkContext的目的是为了准备Spark应用程序的运行环境。在Spark中由SparkContext负责和ClusterManager通信,进行资源的申请、任务的分配和监控等;当Executor部分运行完毕后,Driver负责将SparkContext关闭。通常SparkContext代表Driver,如下图所示。

大数据云计算——Spark组件

Cluster Manager:资源管理器: 指的是在集群上获取资源的外部服务,常用的有:Standalone,Spark原生的资源管理器,由Master负责资源的分配;Haddop Yarn,由Yarn中的ResearchManager负责资源的分配;Messos,由Messos中的Messos Master负责资源管理。

Executor:执行器:Application运行在Worker节点上的一个进程,该进程负责运行Task,并且负责将数据存在内存或者磁盘上,每个Application都有各自独立的一批Executor,如下图所示。

大数据云计算——Spark组件

Worker:计算节点: 集群中任何可以运行Application代码的节点,类似于Yarn中的NodeManager节点。在Standalone模式中指的就是通过Slave文件配置的Worker节点,在Spark on Yarn模式中指的就是NodeManager节点,在Spark on Messos模式中指的就是Messos Slave节点,如下图所示。

大数据云计算——Spark组件

DAGScheduler:有向无环图调度器:基于DAG划分Stage 并以TaskSet的形势提交Stage给TaskScheduler;负责将作业拆分成不同阶段的具有依赖关系的多批任务;最重要的任务之一就是:计算作业和任务的依赖关系,制定调度逻辑。在SparkContext初始化的过程中被实例化,一个SparkContext对应创建一个DAGScheduler。

大数据云计算——Spark组件

TaskScheduler:任务调度器:将Taskset提交给worker(集群)运行并回报结果;负责每个具体任务的实际物理调度。如图示。

大数据云计算——Spark组件

Job:作业:由一个或多个调度阶段所组成的一次计算作业;包含多个Task组成的并行计算,往往由Spark Action催生,一个JOB包含多个RDD及作用于相应RDD上的各种Operation。如图所示。

大数据云计算——Spark组件

Stage:调度阶段:一个任务集对应的调度阶段;每个Job会被拆分很多组Task,每组任务被称为Stage,也可称TaskSet,一个作业分为多个阶段;Stage分成两种类型ShuffleMapStage、ResultStage。如图所示。

大数据云计算——Spark组件

Application多个job多个Stage:Spark Application中可以因为不同的Action触发众多的job,一个Application中可以有很多的job,每个job是由一个或者多个Stage构成的,后面的Stage依赖于前面的Stage,也就是说只有前面依赖的Stage计算完毕后,后面的Stage才会运行。

划分依据:Stage划分的依据就是宽依赖,何时产生宽依赖,reduceByKey, groupByKey等算子,会导致宽依赖的产生。

核心算法:从后往前回溯,遇到窄依赖加入本stage,遇见宽依赖进行Stage切分。Spark内核会从触发Action操作的那个RDD开始从后往前推,首先会为最后一个RDD创建一个stage,然后继续倒推,如果发现对某个RDD是宽依赖,那么就会将宽依赖的那个RDD创建一个新的stage,那个RDD就是新的stage的最后一个RDD。然后依次类推,继续继续倒推,根据窄依赖或者宽依赖进行stage的划分,直到所有的RDD全部遍历完成为止。

将DAG划分为Stage剖析:如上图,从HDFS中读入数据生成3个不同的RDD,通过一系列transformation操作后再将计算结果保存回HDFS。可以看到这个DAG中只有join操作是一个宽依赖,Spark内核会以此为边界将其前后划分成不同的Stage. 同时我们可以注意到,在图中Stage2中,从map到union都是窄依赖,这两步操作可以形成一个流水线操作,通过map操作生成的partition可以不用等待整个RDD计算结束,而是继续进行union操作,这样大大提高了计算的效率。

TaskSet:任务集:由一组关联的,但相互之间没有Shuffle依赖关系的任务所组成的任务集。如图所示。

大数据云计算——Spark组件

提示:1)一个Stage创建一个TaskSet;2)为Stage的每个Rdd分区创建一个Task,多个Task封装成TaskSet

 Task:任务:被送到某个Executor上的工作任务;单个分区数据集上的最小处理流程单元(单个stage内部根据操作数据的分区数划分成多个task)。如图所示。

大数据云计算——Spark组件

大数据云计算——Spark组件

Spark的算子RDD

RDD 是 Spark 的计算模型。RDD(Resilient Distributed Dataset)叫做弹性的分布式数据集合,是 Spark 中最基本的数据抽象,它代表一个不可变、只读的,被分区的数据集。操作 RDD 就像操作本地集合一样,有很多的方法可以调用,使用方便,而无需关心底层的调度细节。

RDD的属性:

 

RDD的特点:

大数据云计算——Spark组件

大数据云计算——Spark组件

大数据云计算——Spark组件

大数据云计算——Spark组件

大数据云计算——Spark组件

大数据云计算——Spark组件

大数据云计算——Spark组件

大数据云计算——Spark组件

RDD的编程模型:

大数据云计算——Spark组件

RDD的创建

大数据云计算——Spark组件

大数据云计算——Spark组件

大数据云计算——Spark组件

大数据云计算——Spark组件

大数据云计算——Spark组件

大数据云计算——Spark组件

大数据云计算——Spark组件

大数据云计算——Spark组件

大数据云计算——Spark组件

大数据云计算——Spark组件

大数据云计算——Spark组件

大数据云计算——Spark组件

Spark SQL

 

 

 

 

 

 

 

 

 

Spark Streaming

 

 

 

本文地址:https://blog.csdn.net/weixin_41605937/article/details/106815813