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

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

Spark大数据计算平台包含许多子模块,构成了整个Spark的生态系统,其中Spark为核心。

各个组成部分。

1. Spark Core
Spark Core是整个BDAS的核心组件,是一种大数据分布式处理框架,不仅实现了MapReduce的算子map函数和reduce函数及计算模型,还提供如filter、join、groupByKey等更丰富的算子。
Spark将分布式数据抽象为弹性分布式数据集(RDD),实现了应用任务调度、RPC、序列化和压缩,并为运行在其上的上层组件提供API。其底层采用Scala函数式语言书写而成,并且深度借鉴Scala函数式的编程思想,提供与Scala类似的编程接口。

2. Mesos
Mesos是Apache下的开源分布式资源管理框架,被称为分布式系统的内核,提供了类似YARN的功能,实现了高效的资源任务调度。

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

4. MLlib
MLlib是Spark对常用的机器学习算法的实现库,同时包括相关的测试和数据生成器。MLlib目前支持4种常见的机器学习问题:二元分类、

回归、聚类以及协同过滤,还包括一个底层的梯度下降优化基础算法。

5. GraphX
GraphX是Spark中用于图和图并行计算的API,可以认为是GraphLab和Pregel在Spark (Scala)上的重写及优化,与其他分布式图计算框架相比,GraphX最大的贡献是,在Spark上提供一栈式数据解决方案,可以方便、高效地完成图计算的一整套流水作业。

6. Spark SQL
Shark是构建在Spark和Hive基础之上的数据仓库。它提供了能够查询Hive中所存储数据的一套SQL接口,兼容现有的Hive QL语法。熟悉Hive QL或者SQL的用户可以基于Shark进行快速的Ad-Hoc、Reporting等类型的SQL查询。由于其底层计算采用了Spark,性能比Mapreduce的Hive普遍快2倍以上,当数据全部存储在内存时,要快10倍以上。2014年7月1日,Spark社区推出了Spark SQL,重新实现了SQL解析等原来Hive完成的工作,Spark SQL在功能上全覆盖了原有的Shark,且具备更优秀的性能。

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

  Master, Worker;  RDD,DAG;Application, job,stage,task; driver,executor,Claster Manager; DAGScheduler, TaskScheduler.

(1)Master:控制、管理和监督整个Spark集群。

(2)Worker:集群的工作节点,可以运行Application代码的节点,接收mater的命令并且领取运行任务,同时汇报执行的进度和结果给master,节点上运行一个或者多个Executor进程。

(3)RDD:是分布式内存的个抽象概念,提供了一种高度受限的共享内存模型。DAG:反映 RDD 之间的依赖关系。

(4)Application:用户编写的 Spark 应用程序。

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

(6)stage:是作业的基本调度单位,一个作业会分为多组任务,每组任务被称为“阶段”,或者也被称为“任务集”。

(7)Task:运行在 Executor 上的工作单元。

(8)Driver:控制一个应用的执行。

(9)Executor:是运行在工作节点( Worker Node )上的一个进程,负责运行任务,并为应用程序存储数据。

(10)Claster Manager:集群的资源管理器,在集群上获取资源的外部服务。

(11)DAGScheduler:根据job构建基于stage的DAG,并提交stage给TaskScheduler。

(12)TaskScheduler:将Taskset提交给Worker Node集群运行并返回结果。

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)

 

 

 

 

 


 



 



posted @ 2022-03-14 21:06  ncdy  阅读(165)  评论(0)    收藏  举报