作业三: 1.用图文阐述Spark生态系统的组成及各组件的功能 2.详细阐述Spark的几个主要概念及相互关系 3.画出相应的RDD转换关系图

1.Spark生态系统

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


答: Spark生态圈以Spark Core为核心,从HDFS、Hive、HBase和Hadoop等s数据源读取数据,以MESOS、YARN和自身携带的Standalone为资源管理器调度Job完成Spark应用程序的计算。 这些应用程序可以来自于不同的组件,如Spark Streaming的实时处理应用、Spark SQL的即席查询、Mlib的机器学习、GraphX的图处理等等。
图1 Spark生态系统

1.1 Spark Core
核心组件,基于内存的分布式计算引擎。其实现了Spark的作业调度、内存管理、容错、与存储系统交互等基本功能,并对弹性分布式数据集(RDD)提供了丰富的操作。
1.2 Spark SQL
Spark SQL的表数据的存储方式是内存列存储,并且允许开发人员直接处理RDD,其重要特点是能够统一处理关系表的RDD,开发人员可以轻松使用SQL命令进行查询,并进行更复杂的数据分析,部分用法与Hive类似。
1.3 Spark Streaming
基于Spark Core实现的高吞吐量、具备容错机制的准实时流处理系统。将流式计算分解成一系列小批处理作业,也称微批处理。
1.4 Spark Mlib
Mlib是Spark实现一些常见的机器学习算法和应用程序的分布式机器学习库,包括分类、回归、聚类、协同过滤、降维以及底层优化,该算法可以进行可扩充。
1.5 GraphX
GraphX是Spark中的分布式图处理框架,支持图并行计算。与其他分布式图计算框架相比,GraphX最大的贡献是:在Spark之上提供一栈式数据解决方案,方便且高效地完成图计算的一整套流水作业。

2.Spark主要概念

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


答:Spark的主要概念及相互关系,如下图:

术语 描述
Master 常驻master守护进程,负责管理worker节点,从master节点提交应用。
Worker 常驻worker守护进程,与master节点通信,并且管理executor进程。运行一个或多个Executor进程,相当于计算节点。
RDD Resillient Distributed Dataset(弹性分布式数据集),是分布式内存的一个抽象概念,提供了一种高度受限的共享内存模型。
DAG Directed Acyclic Graph(有向无环图),反映RDD之间的依赖关系。
Application 用户编写的Spark的应用程序。
job action的触发会生成一个job,Job会提交给DAGScheduler,分解成Stage。
stage 是作业的基本调度单位,每个作业会因为RDD之间的依赖关系拆分成多组任务集合TaskSet,成为调度阶段。调度阶段的划分是由DAGScheduler来划分的,有Shuffle Map Stage和Result Stage两种。
task 被送到executor上的工作单元,task简单的说就是在一个数据partition上的单个数据处理流程。
driver 负责控制一个应用的执行,运行Application的main函数和初始化SparkContext,Driver将Task和Task所依赖的file和jar(序列化后)传递给对应的Worker机器运行
executor executor进程宿主在worker节点上,一个worker可以有多个executor。每个executor持有一个线程池,每个线程可以执行一个task,executor执行完task以后将结果返回给driver,每个executor执行的task都属于同一个应用。此外executor还有一个功能就是为应用程序中要求缓存的 RDD 提供内存式存储,RDD 是直接缓存在executor进程内的,因此任务可以在运行时充分利用缓存数据加速运算。一个container对应一个JVM进程(也就是一个executor)。
Cluster Manager 在集群上获取资源的外部服务 (例如:Standalone、Mesos、Yarn)
DAGScheduler 面向调度阶段的任务调度器,负责接收spark应用提交的作业,根据RDD的依赖关系划分调度阶段,并提交调度阶段给TaskScheduler。
TaskScheduler 面向任务的调度器,它接受DAGScheduler提交过来的调度阶段,然后把任务分发到work节点运行,由worker节点的Executor来运行该任务。

图2 关系图解

3.RDD转换关系图

题目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)
>>> words.foreach(print)
>>> wordKV.foreach(print)
>>> cs.foreach(print)
>>> cKV.foreach(print)
>>> wc.foreach(print)
>>> cc.foreach(print)


图3.1 my.txt

图3.2 开启spark









图3.3 运行spark程序

图3.4 RDD转换关系图

posted @ 2022-03-09 22:53  *啥也不是*  阅读(571)  评论(0编辑  收藏  举报