(0)spark基本概念模块介绍

spark基本原理详细介绍

1:spark基本相关概念

Application             运行在集群上的用户程序,包含集群上的driver program 和多个executor线程组成;
Driver program          application运行的main方法,并生成sparkcontext;
Cluster manager         集群资源管理器 ;
Deploy mode             部署模式 用于区别driver program的运行方式:集群模式(cluter mode),driver在集群内部启动;
						客户端模式(client mode),driver进程从集群外部启动;   
Worker node             工作节点,运行application的节点
Executor                work node的上进程,运行task并保持数据交互,每一个application有自己的executor
Task                    运行于Executor中的任务单元,Spark应用程序最终被划分为经过优化后的多个任务的集合
Job                     由多个转变构建的并行计算任务,具体为Spark中的action操作, 一个action就为一个job
Stage:				    Job分成的阶段。一个Job可能被划分为一到多个Stage。
Partition:			    数据分区。即一个RDD的数据可以划分为多少个分区	

2 :spark 模块介绍

整个Spark主要由以下 5大模块组成:

 Spark Core:Spark的核心功能实现,包括:SparkContext的初始化(Driver Application通过SparkContext提交)、
 			 部署模式、存储体系、任务提交与执行、计算引擎等。
 Spark SQL:提供SQL处理能力,便于熟悉关系型数据库操作的工程师进行交互查询。还为熟悉Hadoop的提供Hive SQL处理能力。
 Spark Streaming:提供流式计算处理能力,目前支持Kafka、Flume、和简单的TCP套接字等数据源。此外,还提供窗口操作。
 GraphX:提供图计算处理能力,支持分布式, Pregel提供的API可以解决图计算中的常见问题。
 MLlib:提供机器学习相关的统计、分类、回归等领域的多种算法实现。其一致的API接口大大降低了用户的学习成本。

3:SparkContext主要组件

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

SparkEnv:Spark运行时环境。Executor是处理任务的执行器,它依赖于SparkEnv提供的运行时环境。此外在Driver中也包含了SparkEnv,这是为了保证local模式下任务的执行。SparkEnv内部包含了很多组件,例如serializerManager、RpcEnv、BlockManager、mapOutputTracker等。

LiveListenerBus:SparkContext中的事件总线,可以接收各个使用方的事件,并且通过异步方式对事件进行匹配后调用SparkListener的不同方法。LiveListenerBus的具体内容已经在3.3节详细介绍,此处不再赘述。

SparkUI:Spark的用户界面。SparkUI间接依赖于计算引擎、调度系统、存储体系,作业(Job)、阶段(Stage)、存储、执行器(Executor)等组件的监控数据都会以SparkListenerEvent的形式投递到LiveListenerBus中,SparkUI将从各个SparkListener中读取数据并显示到Web界面。

SparkStatusTracker:提供对于作业、Stage(阶段)等的监控信息。SparkStatusTracker是一个低级的API,这意味着只能提供非常脆弱的一致性机制。

ConsoleProgressBar:利用SparkStatusTracker的API,在控制台展示Stage的进度。由于SparkStatusTracker存在的一致性问题,所以ConsoleProgressBar在控制台的显示往往有一定时延。

DAGScheduler:DAG调度器,是调度系统中的重要组件之一。负责创建Job,将DAG中的RDD划分到不同的Stage、提交Stage等。SparkUI中有关Job和Stage的监控数据都来自DAGScheduler。

TaskScheduler:任务调度器,是调度系统中的重要组件之一。TaskScheduler按照调度算法对集群管理器已经分配给应用程序的资源进行二次调度后分配给任务。TaskScheduler调度的Task是由DAGScheduler创建的,所以DAGScheduler是TaskScheduler的前置调度。

HeartbeatReceiver:心跳接收器。所有执行Executor都会向HeartbeatReceiver发送心跳信息,HeartbeatReceiver接收到Executor的心跳信息后,首先更新Executor的最后可见时间,然后将此信息交给TaskScheduler作进一步处理。

ContextCleaner:上下文清理器。ContextCleaner实际用异步方式清理那些超出应用作用域范围的RDD、ShuffleDependency和Broadcast等信息。

JobProgressListener:作业进度监听器。JobProgressListener在3.3.3节介绍SparkListener的继承体系时提到过,根据之前的介绍我们知道JobProgressListener将注册到LiveListenerBus中作为事件监听器之一使用。

EventLoggingListener:将事件持久化到存储的监听器,是SparkContext中的可选组件。当spark.eventLog.enabled属性为true时启用。

ExecutorAllocationManager:Executor(执行器)动态分配管理器。顾名思义,可以根据工作负载动态调整Executor的数量。在配置spark.dynamicAllocation.enabled属性为true的前提下,在非local模式下或者当spark.dynamicAllocation.testing属性为true时启用。

4:spark主要执行流程介绍

在这里插入图片描述
先进行任务的划分。DAGScheduler根据宽窄依赖(shuffle)进行stage划分,task提交执行,具体执行流程如下:
主要执行

5:spark的内存模型

spark的内存管理driver和executor两部分,executor又分为堆内内存和堆外内存。

5.1:堆内内存和堆外内存

1:堆内内存

堆内内存的大小,由 Spark 应用程序启动时的–executor-memory
在这里插入图片描述
第一块是让 task 执行我们自己编写的代码时使用,默认是占 Executor 总内存的 20%;
第二块是让 task 通过 shuffle 过程拉取了上一个 stage 的 task 的输出后,进行聚合等操作时
使用,默认也是占 Executor 总内存的 20%;
第三块是让 RDD 持久化时使用,默认占 Executor 总内存的 60%。

2:堆外内存

在默认情况下堆外内存并不启用,可通过配置 spark.memory.offHeap.enabled 参数启用,并
由 spark.memory.offHeap.size 参数设定堆外空间的大小

5.2:jvm

1:jvm内存模型

在这里插入图片描述
堆:创建的对象
方法区:存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
计数器:字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。
虚拟栈:用于存储局部变量表、操作栈、动态链接,方法出口等信息

2:jvm内存调优

在这里插入图片描述

-Xms 设置堆的最小空间大小
-Xmx 设置堆的最大空间大小
-XX:NewSize 设置新生代最小空间大小
-XX:MaxNewSize 设置新生代最大空间大小
-XX:PermSize 设置永久代最小空间大小
-XX:MaxPermSize 设置永久代最大空间大小
-Xss 设置每个线程的栈大小

3:垃圾回收

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值