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

Posted on 2022-03-12 08:21  小马blog  阅读(59)  评论(0编辑  收藏  举报

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

 

 

 

 

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

  

Master负责应用的资源管理,根据应用的需要,向ResourceManager申请资源

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

RDD弹性分布式数据集(RDD)是分布式处理的一个数据集的抽象, RDD是只读的,在RDD之上的操作都是并行的 .RDD只是一个逻辑实体,其中存储了分布式数据集的一些信息,并没有包含所谓的“物理数据”,“物理数据”只有在RDD被计算并持久化之后才存在于内存或磁盘中

DAG:有向无环图

Application:Spark用户程序,提交一次应用为一个Application。

Job一个Application可能包含多个Job,每个action算子对应一个Job;action算子有collect,count等。

Stage每个Job可能包含多层Stage,划分标记为shuffle过程;Stage按照依赖关系依次执行。

Task具体执行任务的基本单位,被发到executor上执行。

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

Executor实际任务的执行者。一个应用会分拆给多个Executor来进行计算。

DAGScheduler,面向stage的高层次的调度器,DAGScheduler把DAG拆分成很多的tasks,每组的tasks都是一个stage,每当遇到shuffle就会产生新的stage,DAGScheduler需要记录那些RDD被存入磁盘等物化动作,同时需寻找task的最优化调度,例如数据本地性等;DAGScheduler还要监视因为shuffle输出导致的失败;DAGScheduler划分stage后以TaskSet为单位把任务交给底层次的可插拔的调度器TaskScheduler来处理

TaskScheduler一个TaskScheduler只为一个SparkContext实例服务,TaskScheduler接受来自DAGScheduler发送过来的分组的任务,DAGScheduler给TaskScheduler发送任务的时候是以Stage为单位来提交的,TaskScheduler收到任务后负责把任务分发到集群中Worker的Executor中去运行,如果某个task运行失败,TaskScheduler要负责重试

关系:

 

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)

 

 自己生成sc

from pyspark import SparkConf, SparkContext
conf = SparkConf().setMaster("local").setAppName("My App")
sc=SparkContext(conf=conf)

Copyright © 2024 小马blog
Powered by .NET 9.0 on Kubernetes