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

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

image

Spark Core

实现Spark的基本功能,包括任务调度、内存管理、错误恢复、与存储系统交互等,以及RDD(Resilient Distributed Dataset)API的定义。

Spark SQL

Shark SQL是构建在Spark和Hive基础之上的数据仓库,可以与RDD的操作相结合使用。它提供了能够查询Hive中所存储数据的一套SQL接口,兼容现有的Hive QL语法。

Spark Streaming

一种构建在Spark上的实时计算框架,它扩展了Spark处理大规模流式数据的能力。其吞吐量能够超越现有主流流处理框架Storm,并提供丰富的API用于流数据计算。

MLib

MLlib是Spark对常用的机器学习算法的实现库,同时包括相关的测试和数据生成器,还提供了模型评估、数据导入等功能。MLlib目前支持4种常见的机器学习问题:二元分类、回归、聚类以及协同过滤,还包括一个底层的梯度下降优化基础算法。

GraphX

用来操作图的程序库,可以用于并行的图计算。扩展了RDD API功能,用来创建一个顶点和边都包含任意属性的有向图。支持针对图的各种操作,如图的分割subgraph、操作所有的顶点mapVertices、三角计算等。

集群管理器

Spark支持在各种集群管理器(cluster manager)上运行,包括Hadoop的YARN、Apache的Mesos以及Spark自带的一个简易调度器,叫独立调度器。

2.请详细阐述Spark的几个主要概念及相互关系: Master, Worker; RDD,DAG; Application, job,stage,task; driver,executor,Claster Manager;DAGScheduler, TaskScheduler.

Master & Worker

Spark集群的独立部署环境中,不需要依赖其他的资源调度框架,自身就实现了资源调度的功能。Master是一个进程,负责资源的调度和分配,并进行集群的监控等职责;Worker也是一个进程,一个Worker运行在集群中的一台服务器上,由Master分配资源对数据进行并行处理和计算。

RDD & DAG

RDD是分布式内存的一个抽象概念,提供了一种高度受限的共享内存模型,其任务可划分为:Application、Job、Stage、Task。
Application:初始化一个 SparkContext时,即生成一个 Application
Job:一个 Action 算子就会生成一个 Job。
Stage:根据 RDD 之间的依赖关系将不同的 Job 划分成不同的 Stage ,遇到一个宽依赖则划分一个 Stage。
Task:Stage 是一个 TaskSet,将 Stage 划分的结果发送到不同的 Executor 执行即为一个 Task。
DAG(有向无环图)反映了RDD之间的依赖关系。

driver,executor,Claster Manager

Driver(负责分配任务):Spark中的Driver即运行上述Application的main函数并创建SparkContext,创建SparkContext的目的是为了准备Spark应用程序的运行环境,在Spark中有SparkContext负责与ClusterManager通信,进行资源申请、任务的分配和监控等,当Executor部分运行完毕后,Driver同时负责将SparkContext关闭,通常用SparkContext代表Driver
Executor(负责运行任务):某个Application运行在worker节点上的一个进程,该进程负责运行某些Task,并且负责将数据存到内存或磁盘上,每个Application都有各自独立的一批Executor,在Spark on Yarn模式下,其进程名称为CoarseGrainedExecutor Backend。一个CoarseGrainedExecutor Backend有且仅有一个Executor对象,负责将Task包装成taskRunner,并从线程池中抽取一个空闲线程运行Task,这个每一个CoarseGrainedExecutor Backend能并行运行Task的数量取决于分配给它的cup个数
Claster Manager(负责资源调度):指的是在集群上获取资源的外部服务。目前有三种类型
1.standalone:spaark原生的资源管理,由Master负责资源的分配
2.Apache Mesos:与hadoop MR兼容性良好的一种资源调度框架
3.Hadoop Yarn:主要指Yarn中的ResourceManager
image

DAGScheduler, TaskScheduler

DAGScheduler根据Job构建基于Stage的DAG,并提交Stage给TASKScheduler。其划分Stage的根据是RDD之间的依赖的关系找出开销最小的调度方法,方法如下。
image
TASKScheduler将TaskSET提交给Worker运行,每个Executor运行什么Task就是在此处分配的,TaskScheduler维护所有TaskSet,当Executor向Driver发生心跳时,TaskScheduler会根据资源剩余情况分配相应的Task。另外TaskScheduler还维护着所有Task的运行标签,重试失败的Task,下图展示了TaskScheduler的作用。
image

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

sc
lines = sc.textFile("file:///home/hadoop/tt.txt")
lines
image

words=lines.flatMap(lambda line:line.split())
words
image

wordKV=words.map(lambda word:(word,1))
wordKV
image
wc=wordKV.reduceByKey(lambda a,b:a+b)
wc
image

cs=lines.flatMap(lambda line:list(line))
cs
image

cKV=cs.map(lambda c:(c,1))
cKV
image

cc=cKV.reduceByKey(lambda a,b:a+b)
cc
image

lines.foreach(print)
image

words.foreach(print)
image

wordKV.foreach(print)
image

cs.foreach(print)
image

cKV.foreach(print)
image

wc.foreach(print)
image

cc.foreach(print)
image
image

posted @ 2022-03-09 11:27  湘伦籽  阅读(59)  评论(0编辑  收藏  举报