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

1.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查询。。

7. Alluxio
Alluxio是一个分布式内存文件系统,可以理解为内存中的HDFS。为了提供更高的性能,将数据存储剥离Java Heap。用户可以基于Alluxio实现RDD或者文件的跨应用共享,并提供高容错机制,保证数据的
可靠性。

8. BlinkDB
BlinkDB是一个用于在海量数据上进行交互式SQL的近似查询引擎。它允许用户在查询准确性和查询响应时间之间做出权衡,执行相似查询。

 

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

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

  DAGScheduler, TaskScheduler.

在Driver上由Driver进程执行Driver进程启动以后就会做一些初始化操作,在这个过程中,就会发送请求到Master上进行Spark应用程序的注册
第一个节点Master其实就是调度资源和分盘和集群的监控
Master在接到Spark程序申请以后会发送请求给从节点slave在这里用worker命名,进行资源的分配,
第一个worker主要职责是使用自己的内存,存储RDD某些partition,
第二个worker就是启动其他进程和线程对RDD上面的partition进行处理和计算,
worker在接收到Master的请求后会启动Executor进程
Executor进程里面包含Task线程,这两货主要就是负责并行计算的,比如申请的RDD,partition,还有就是一些算子,比如:map,flatmap,reduce,
Executor进程启动以后会向Driver进行反注册,这样Driver就知道哪些Executor是为它服务的了.
Driver注册了Executor进程以后就会开始执行我们提交的Spark应用程序了,第一步就是创建RDD,然后就是读取数据源,
hdfs的内容可能会被读取到多个worker节点上面,形成内存中 的分布式数据库,也就是RDD

executor接受到请求以后就会调用多个Task节点进行执行。 task就会对RDDpartition数据执行指定的算子操作,形成新的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)

 

 


 

 

 

 

 

 

 

 

posted @ 2022-03-09 10:15  潮汕美男  阅读(42)  评论(0编辑  收藏  举报