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

 

1)SparkCore:类似于MR的分布式内存计算框架,最大的特点是将中间计算结果直接放在内存中,提升计算性能。自带了Standalone模式的资源管理框架,同时,也支持YARN、MESOS的资源管理系统。FI集成的是Spark On Yarn的模式。

2)SparkSQL:一个用于处理结构化数据的Spark组件,作为Apache Spark大数据框架的一部分,主要用于结构化数据处理和对数据执行类SQL查询。通过Spark SQL,可以针对不同数据格式(如:JSON,Parquet, ORC等)和数据源执行ETL操作(如:HDFS、数据库等),完成特定的查询操作。

3)SparkStreaming:微批处理的流处理引擎,将流数据分片以后用SparkCore的计算引擎中进行处理。相对于Storm,实时性稍差,优势体现在吞吐量上。

4)Mllib和GraphX:主要一些算法库。

5)FusionInsight Spark:默认运行在YARN集群之上。

6)Structured Streaming:2.0版本之后的spark独有。知道自己的不足,增加了自己的产品。

 

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

 Master,Worker;RDD,DAG;Application,job,stage,task;driver,executor,Cluster ManagerDAGScheduler, TaskScheduler.

 

1)Master

主要是控制、管理和监督整个spark集群

2)Worker

从节点,负责控制计算节点,启动Executor或者Driver。在YARN模式中为NodeManager,负责计算节点的控制。

3)RDD

Spark的基础计算单元,一组RDD可形成执行的有向无环图RDD Graph。

4)DAG

DAG 是一个应用被切分为任务之后的执行的相关处理流程,主要是用来控制任务的执行顺序和调用的数据,它是一个有向无环图。

5)Application

用户编写的spark应用程序,由一个或者多个job组成,提交到spark之后,spark为application分派资源,将程序转换并执行。

6)Job

包含多个Task组成的并行计算,是由Action行为触发的

7)Stage

一般而言一个Job会切换成一定数量的stage。各个stage之间按照顺序执行。至于stage是怎么切分的,首选得知道spark论文中提到的narrow dependency(窄依赖)和wide dependency(宽依赖)的概念。

8)Task

是类的实例 ,有属性(从哪里读取数据/读取的是哪个切片的数据) ,有方法(如何计算/即数据的计算分析逻辑) ;

9)Driver

负责应用的业务逻辑和运行规划(DAG—有向无环图)。

10)Executor

由若干core组成,每个Executor的每个core一次只能执行一个Task。

11)Cluster Manager

集群上获取资源的外部服务,比如Standalone(由Master负责资源的分配)和Yarn(由ResourceManager负责资源的分配)DAGScheduler

根据作业(task)构建基于Stage的DAG,并提交Stage给TaskScheduler。

12)TaskScheduler

将任务(task)分发给Executor执行。

 

  相互关系

 

 

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

 

 

复制代码
sc
lines = sc.textFile("file:///home/hadoop/my.txt")
lines
words=lines.flatMap(lambda line:line.split())
words
wordKV=words.map(lambda word:(word,1))
wordKV
wc=wordKV.reduceByKey(lambda a,b:a+b)
wc
cs=lines.flatMap(lambda line:list(line))
cs
cKV=cs.map(lambda c:(c,1))
cKV
cc=cKV.reduceByKey(lambda a,b:a+b)
cc 

lines.foreach(print)
复制代码

 

 

wordKV.foreach(print)
cs.foreach(print)

 

 

 

cKV.foreach(print)

 

 

 

wc.foreach(print)

 

 

 

wc.foreach(print)

 

 

 

  

  RDD转换关系图

posted on 2022-03-16 10:43  泽浩111  阅读(18)  评论(0编辑  收藏  举报