江湖神经

导航

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

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

·Spark Core:BDAS生态系统的核心组件,是一种大数据分布式处理框架,提供了多种资源调度管理,通过内存计算、有向无环图(DAG)等机制保证分布式计算的快速,并引入了RDD的抽象保证数据的高容错性。

·Spark SQL:前身是Shark,它发布时Hive 可以说是SQL on Hadoop的唯一选择(Hive负责将SQL编译成可扩展的MapReduce 作业)。 Spark SQL允许开发人员直接处理RDD,同时也可查询在Hive 上存在的外部数据。SparkSQL的一个重要特点是能够统一处理关系表和RDD,使得开发人员可以轻松地使用SQL命令进行外部查询,同时进行更复杂的数据分析。

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

·MLlib是Spark:对常用的机器学习算法的实现库,同时包括相关的测试和数据生成器。

·GraphX:是Spark中用于图和图并行计算的API,跟其他分布式图计算框架相比,GraphX最大的优势是:在Spark基础上提供了一栈式数据解决方案,可以高效地完成图计算的完整的流水作业。 

·独立调度器、Yarn、 Mesos: Spark框架可以高效地在一个到数千个节点之间伸缩计算,集群管理器则主要负责各个节点的资源管理工作,为了实现这样的要求,同时获得最大的灵活性, Spark支持在各种集群管理器( Cluster Manager)上运行, Hadoop Yarn、Apache Mesos以及 Spark自带的独立调度器都被称为集群管理器。

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

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

·RDD:弹性分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变、可分区、里面的元素可并行计算的集合。

·DAG:有向无环图,是一组顶点和边的组合。顶点代表了 RDD, 边代表了对 RDD 的一系列操作,常用于建模。

·Application:用spark-submit提交的程序。一个application通常包含三部分:从数据源取数据形成RDD,通过RDD的transformation和action进行计算,将结果输出到console或者外部存储。

·job:一个action算子就算一个Job。包含很多task的并行计算,可以认为是Spark RDD 里面的action,每个action的计算会生成一个job。用户提交的Job会提交给DAGScheduler,Job会被分解成Stage和Task。

·stage:stage概念是spark中独有的。一般而言一个Job会切换成一定数量的stage。各个stage之间按照顺序执行。至于stage是怎么切分的,首选得知道spark论文中提到的narrow dependency(窄依赖)和wide dependency(宽依赖)的概念。其实很好区分,看一下父RDD中的数据是否进入不同的子RDD,如果只进入到一个子RDD则是窄依赖,否则就是宽依赖。宽依赖和窄依赖的边界就是stage的划分点。从spark的论文中的两张截图,可以清楚的理解宽窄依赖以及stage的划分。

·task:task是Spark中最新的执行单元。RDD一般是带有partitions的,每个partition的在一个executor上的执行可以任务是一个task。

·Master:负责管理worker节点,从master节点提交应用。

·worker:master节点通信,并且管理executor进程。

·driver:driver进程就是应用的main()函数并且构建sparkContext对象,当我们提交了应用之后,便会启动一个对应的driver进程,

·executor:executor进程宿主在worker节点上,一个worker可以有多个executor。每个executor持有一个线程池,每个线程可以执行一个task,executor执行完task以后将结果返回给driver,每个executor执行的task都属于同一个应用。

·Claster Manager:集群上获取资源的外部服务。

 

1个Application中至少有1个job;

 

1个job中依据宽窄依赖划分至少有一个stage(至少有一个resultStage);

 

1个stage中依据分区至少有一个task(至少一个分区)。

 

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

>>> lineKV=lines.map(lambda line:(1,line))

>>> lineKV

>>> lines.foreach(print)

>>> words.foreach(print)

>>>wordKV.foreach(print)

>>>lineKV.foreach(print)

 

 

 

 

 

 

 

 

 

 关系转换图:

 

 

 

 

posted on 2022-03-10 19:10  江湖神经  阅读(45)  评论(0编辑  收藏  举报