从0开始学习spark(3)Spark Core 核心知识

学习是在快乐中进行的,每天放松一下。
在这里插入图片描述

1. Spark作业调度方式

上一课我们学习到了spark的 第一个程序worldcount的编写运行,那么今天我们先接着上次没有说完的一个spark 任务的调度方式在集群中。
spark作业的调度方式有三种:
1.local:本地运行提交作业
2.standalone:spark集群自己调度作业
在这里插入图片描述

3.yarn:使用yarn集群调度资源调度作业
在这里插入图片描述
提交运行时发生此错误:
在这里插入图片描述
解决:需要修改yarn-site.xml配置文件,关闭虚拟内存的检测 加上如下内容:

yarn.nodemanager.pmem-check-enabled
false


yarn.nodemanager.vmem-check-enabled
false

1.1 cluster 和 client 的区别

提交配置spark submit脚本时 里面配置中cluster 和 Client 的区别是什么?
cluster : sparkcontext 创建在yarn集群中
client :sparkcontext 创建在本地
建议: 在生产中建议使用cluster,在测试中使用client

2. spark 核心功能介绍:

之前学习了基本名词,worldcount和运行方式,然后我们来说说spark的核心功能是什么:
在这里插入图片描述
首先上spark官网的核心功能图解,之前我们看了图上第二排中的standalone,yarn,local运行方式和运行了第一个spark程序,然后我们往上可以看到Spark Core 是最核心功能,spark Core最核心功能主要包括:

2.1 SparkContext

通常而言,DriverApplication 的执行与输出都是通过 SparkContext 来完成的,在正式提交 Application 之前,首先需要初始化 SparkContext。SparkContext 隐藏了网络通信、分布式 部署、消息通信、存储能力、计算能力、缓存、测量系统、文件服务、Web 服务等内容, 应用程序开发者只需要使用 SparkContext 提供的 API 完成功能开发。 SparkContext 内置的 DAGScheduler 负责创建 Job,将 DAG 中的 RDD 划分到不同的 Stage, 提交 Stage 等功能。 SparkContext 内置的 TaskScheduler 负责资源的申请、任务的提交及请求集群对任务的调度 等工作。

2.2 存储体系

Spark 优先考虑使用各节点的内存作为存储,当内存不足时才会考虑使用磁盘,这极大地 减少了磁盘 I/O,提升了任务执行的效率,使得 Spark 适用于实时计算、流式计算等场景。 此外,Spark 还提供了以内存为中心的高容错的分布式文件系统 Tachyon 供用户进行选择。 Tachyon 能够为 Spark 提供可靠的内存级的文件共享服务。

2.3 计算引擎

计算引擎由 SparkContext 中的 DAGScheduler、RDD 以及具体节点上的 Executor 负责执行 的 Map 和 Reduce 任务组成。DAGScheduler 和 RDD 虽然位于 SparkContext 内部,但是在 任务正式提交与执行之前将 Job 中的 RDD 组织成有向无关图(简称 DAG)、并对 Stage 进 行划分决定了任务执行阶段任务的数量、迭代计算、shuffle 等过程。

2.4 部署模式

由于单节点不足以提供足够的存储及计算能力,所以作为大数据处理的 Spark 在
SparkContext 的 TaskScheduler 组件中提供了对 Standalone 部署模式的实现和 YARN、Mesos 等分布式资源管理系统的支持。通过使用 Standalone、YARN、Mesos、kubernetes、Cloud 等部署模式为 Task 分配计算资源,提高任务的并发执行效率。除了可用于实际生产环境 的 Standalone、YARN、Mesos、kubernetes、Cloud 等部署模式外,Spark 还提供了 Local 模式和 local-cluster 模式便于开发和调试

3. Spark 扩展功能

为了扩大应用范围,Spark 陆续增加了一些扩展功能,主要包括:

3.1 Spark SQL

由于 SQL 具有普及率高、学习成本低等特点,为了扩大 Spark 的应用面,因此增加了对 SQL 及 Hive 的支持。Spark SQL 的过程可以总结为:首先使用 SQL 语句解析器(SqlParser) 将 SQL 转换为语法树(Tree),并且使用规则执行器(RuleExecutor)将一系列规则(Rule) 应用到语法树,最终生成物理执行计划并执行的过程。其中,规则包括语法分析器 (Analyzer)和优化器(Optimizer)。 Hive 的执行过程与 SQL 类似。

3.2 Spark Streaming

Spark Streaming与Apache Storm类似,也用于流式计算。Spark Streaming支持Kafka、Flume、 Twitter、MQTT、ZeroMQ、Kinesis 和简单的 TCP 套接字等多种数据输入源。输入流接收器 (Receiver)负责接入数据,是接入数据流的接口规范。Dstream 是 Spark Streaming 中所 有数据流的抽象,Dstream 可以被组织为 DStreamGraph。Dstream 本质上由一系列连续的 RDD 组成。

3.3 Spark GraphX

Spark 提 供 的 分 布 式 图 计 算 框 架 。 GraphX 主 要 遵 循 整 体 同 步 并 行 计 算 模 式 (BulkSynchronous Parallell,简称 BSP)下的 Pregel 模型实现。GraphX 提供了对图的抽象 Graph,Graph 由顶点(Vertex)、边(Edge)及继承了 Edge 的 EdgeTriplet(添加了 srcAttr 和 dstAttr 用来保存源顶点和目的顶点的属性)三种结构组成。GraphX 目前已经封装了最 短路径、网页排名、连接组件、三角关系统计等算法的实现,用户可以选择使用。

3.4 Spark MLlib

Spark 提供的机器学习框架。机器学习是一门涉及概率论、统计学、逼近论、凸分析、算 法复杂度理论等多领域的交叉学科。MLlib 目前已经提供了基础统计、分类、回归、决策 树、随机森林、朴素贝叶斯、保序回归、协同过滤、聚类、维数缩减、特征提取与转型、 频繁模式挖掘、预言模型标记语言、管道等多种数理统计、概率论、数据挖掘方面的数 学算法。

4. spark基本结构

从集群部署的角度来看,Spark 集群由以下部分组成:

Cluster Manager:Spark 的集群管理器,主要负责资源的分配与管理。集群管理器分配的资 源属于一级分配,它将各个 Worker 上的内存、CPU 等资源分配给应用程序,但是并不负责 对 Executor 的资源分配。目前,Standalone、YARN、Mesos、K8S,EC2 等都可以作为 Spark 的集群管理器。

Master:Spark 集群的主节点。

Worker:Spark 集群的工作节点。对 Spark 应用程序来说,由集群管理器分配得到资源的 Worker 节点主要负责以下工作:创建 Executor,将资源和任务进一步分配给 Executor,同步 资源信息给 Cluster Manager。

Executor:执行计算任务的一些进程。主要负责任务的执行以及与 Worker、Driver Application 的信息同步。

在这里插入图片描述

Driver Appication:客户端驱动程序,也可以理解为客户端应用程序,用于将任务程序转换 为 RDD 和 DAG,并与 Cluster Manager 进行通信与调度

这些组成部分之间的整体关系如下图所示:
在这里插入图片描述

Spark 计算平台有两个重要角色Driverexecutor,不论是 StandAlone 模式还是YARN 模式, 都是 Driver 充当 Application 的 master 角色,负责任务执行计划生成和任务分发及调度; executor 充当 worker 角色,负责实际执行任务的 task,计算的结果返回 Driver

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 将任务提交给集群 管理器(ClusterManager)。

3、集群管理器(ClusterManager)给任务分配资源,即将具体任务分配到 Worker 上,Worker 创建 Executor 来处理任务的运行。Standalone、YARN、Mesos、kubernetes、EC2 等都可以作 为 Spark 的集群管理器
在这里插入图片描述

RDD 可以看做是对各种数据计算模型的统一抽象,Spark 的计算过程主要是 RDD 的迭代计算 过程,如上图。RDD 的迭代计算过程非常类似于管道。分区数量取决于 partition 数量的设 定,每个分区的数据只会在一个 Task 中计算。所有分区可以在多个机器节点的 Executor 上 并行执行。

下一课我们就来一起学习Spark Rdd 到底是什么,还有Rdd的基本算子的操作

在这里插入图片描述

下次我们还要来学习哟!!!

记得点赞加关注!!! 不迷路 !!!

人活着真累:上车得排队,爱你又受罪,吃饭没香味,喝酒容易醉,挣钱得交税!

发布了56 篇原创文章 · 获赞 32 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_39361934/article/details/105718393