3、Spark设计与运行原理,基本操作

1.Spark已打造出结构一体化、功能多样化的大数据生态系统,请用图文阐述Spark生态系统的组成及各组件的功能。

Spark生态系统图:

 

 

 

 各组件的功能:

Spark Core

Spark核心组件,它实现了Spark的基本功能,包含任务调度、内存管理、错误恢复、与存储系统交互等模块。Spark Core中还包含了对弹性分布式数据集(Resilient Distributed Datasets,RDD)的API定义,RDD是只读的分区记录的集合,只能基于在稳定物理存储中的数据集和其他已有的RDD上执行确定性操作来创建。

Spark SQL

用来操作结构化数据的核心组件,通过Spark SQL可以直接查询Hive、 HBase等多种外部数据源中的数据。Spark SQL的重要特点是能够统一处理关系表和RDD在处理结构化数据时,开发人员无须编写 MapReduce程序,直接使用SQL命令就能完成更加复杂的数据查询操作。

Spark Streaming

Spark提供的流式计算框架,支持高吞吐量、可容错处理的实时流式数据处理,其核心原理是将流数据分解成一系列短小的批处理作业,每个短小的批处理作业都可以使用 Spark Core进行快速处理。Spark Streaming支持多种数据源,如 Kafka以及TCP套接字等。

GraphX:

Spark提供的分布式图处理框架,拥有图计算和图挖掘算法的API接口以及丰富的功能和运算符,极大地方便了对分布式图的处理需求,能在海量数据上运行复杂的图算法。

MLlib

一个可扩展的Spark机器学习库,里面封装了很多通用的算法,包括二元分类、线性回归、聚类、协同过滤等。用于机器学习和统计等场景。

Local,Standalone,Yarn,Mesos:

Spark的四种部署模式,其中Local是本地模式,一般用来开发测试,Standalone是Spark 自带的资源管理框架,Yarn和Mesos是另外两种资源管理框架,Spark用哪种模式部署,也就是使用了哪种资源管理框架

Tachyon:

Tachyon是一个分布式内存文件系统,可以理解为内存中的HDFS。

2.请阐述Spark的几个主要概念及相互关系:

   RDD,DAG,Application, job,stage,task,Master, worker, driver,executor,Cluster Manager

RDD:
Spark中最基本的抽象数据集,RDD 中并不装真正要计算的数据 ,而装的是描述信息 ,描述以后从哪里读取数据 ,调用了什么方法 ,传入了什么函数 ,以及依赖关系等 。对RDD进行操作 ,相当于在Driver端先是记录下计算的描述信息 ,然后生成Task ,将Task 调度到 Executor端才执行真正的计算逻辑 。
DAG:
DAG 是指有向无环图(有方向 ,无闭环) ,对多个RDD转换过程和依赖关系的描述,触发 Action 就会形成一个完整的 DAG ,一个DAG 对应一个 Job 。

Application:

application(应用)其实就是用spark-submit提交的程序。比方说spark examples中的计算pi的SparkPi。一个application通常包含三部分:从数据源(比方说HDFS)取数据形成RDD,通过RDD的transformation和action进行计算,将结果输出到console或者外部存储(比方说collect收集输出到console)。一个Application 中可以触发多次 Action ,触发一次 Action 产生一个 Job ,一个Application 中可以有一到多个 Job。

job:

Spark中的Job和MR中Job不一样不一样。MR中Job主要是Map或者Reduce Job。而Spark的Job其实很好区别,一个action算子就算一个Job,比方说count,first等。一个DAG 对应一个 Job,一个Job 中有一到多个Stage ,一个Stage 对应一个TaskSet ,一个TaskSet 中有一到多个 Task。

stage:

Stage概念是spark中独有的。一般而言一个Job会切换成一定数量的stage。各个stage之间按照顺序执行。至于stage是怎么切分的,首选得知道spark论文中提到的narrow dependency(窄依赖)和wide dependency( 宽依赖)的概念。其实很好区分,看一下父RDD中的数据是否进入不同的子RDD,如果只进入到一个子RDD则是窄依赖,否则就是宽依赖。宽依赖和窄依赖的边界就是stage的划分点。一个Stage 对应一个TaskSet ,一个TaskSet 中的 Task 的数量取决于Stage 中最后一个RDD 分区的数量 。

task:

Task是Spark中最小的执行单元。RDD一般是带有partitions的,每个partition的在一个executor上的执行是一个Task任务。

Master:

master节点常驻master守护进程,负责管理worker节点,并且会从master节点提交应用。监听 Worker,看集群中的 Worker 是否正常工作,管理 Worker、Application(接收 Worker 的注册并管理所有的 Worker;接收 Client 提交的 Application,调度等待的Application 并向Worker提交)。

worker:

worker节点常驻worker守护进程,会与master节点进行通信,并且管理executor进程。通过 RegisterWorker 注册到 Master;定时发送心跳给 Master;根据 Master 发送的 Application 配置进程环境,并启动 ExecutorBackend(执行 Task 所需的临时进程)。

一个集群中可以有多个master节点和多个worker节点。一台pc机器可以同时作为master和worker节点。

driver:

Spark中的driver感觉其实和yarn中Application Master的功能相类似。主要完成任务的调度以及和executor和cluster manager进行协调。有client和cluster联众模式。client模式driver在任务提交的机器上运行,而cluster模式会随机选择机器中的一台机器启动driver。从一张图可以大致了解driver的功能。

 

 

 

executor:

executor进程宿主在worker节点上,一个worker可以有多个executor。每个executor会持有一个线程池,每个线程可以执行一个task。executor执行完task后,可以将结果返回给driver。

Cluster Manager:

指的是在集群上获取资源的外部服务。目前有三种类型
(1)Standalone:Spark原生的资源管理,由Master负责资源的分配
(2)Apache Mesos:与Hadoop mr兼容性良好的一种资源调度框架
(3)Hadoop Yarn:主要是指Yarn中的ResourceManager

3.在PySparkShell尝试以下代码,观察执行结果,理解sc,RDD,DAG。请画出相应的RDD转换关系图。

 

 

 

 

 

 RDD转换关系图:

 

 

 

 

posted @ 2022-03-11 14:10  彭翠清  阅读(82)  评论(0编辑  收藏  举报