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

1.Spark生态系统的组成及各组件的功能。

 

 

Spark Core

 

  Spark Core是整个BDAS 生态系统的核心组件,是一个分布式大数据处理框架。同时Spark Core提供了多种运行模式,不仅可以使用自身运行模式处理任务,如本地模式、Standalone,而且可以使用第三方资源调度框架来处理任务,如YARN、MESOS等。此外提供了有向无环图(DAG)的分布式并行计算框架,并提供内存机制来支持多次迭代计算或者数据共享,大大减少迭代计算之间读取数据的开销,这对于需要进行多次迭代的数据挖掘和分析性能有极大提升。

 

Spark Streaming

 

  Spark Streaming 是一个对实时数据流进行高吞吐、高容错的流式处理系统,可以对多种数据源(如Kafka、Flume、Twitter 和ZeroMQ 等)进行类似Map、Reduce 和Join 等复杂操作,并将结果保存到外部文件系统、数据库或应用到实时仪表盘,而且Spark Streaming 最大的优势是提供的处理引擎和RDD 编程模型可以同时进行批处理与流处理。

Spark SQL

  Spark SQL 允许开发人员直接处理RDD,同时也可查询在 Hive 上存在的外部数据。SparkSQL 的一个重要特点是能够统一处理关系表和RDD,使得开发人员可以轻松地使用SQL 命令进行外部查询,同时进行更复杂的数据分析。

  Spark SQL引入了新的RDD 类型SchemaRDD,可以像传统数据库定义表一样来定义SchemaRDD并且Spark SQL内嵌了Catalyst 查询优化框架,在把SQL 解析成逻辑执行计划之后,利用Catalyst 包里的一些类和接口,执行了一些简单的执行计划优化,最后变成RDD的计算同时Spark SQL在应用程序中可以混合使用不同来源的数据,如可以将来自HiveQL的数据和来自SQL的数据进行Join 操作。

MLlib

  MLlib是Spark 实现一些常见的机器学习算法和实用程序,包括分类、回归、聚类、协同过滤、降维以及底层优化,该算法可以进行可扩充。MLlib是MLBase中的组件之一,其目标是让机器学习的门槛更低,让一些可能并不了解机器学习的用户能够方便地使用MLBase。

GraphX

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

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

  Master, Worker;  RDD,DAG;

  Application, job,stage,task; driver,executor,Claster Manager

  DAGScheduler, TaskScheduler.


 

 

 

 

  • Master:Spark特有资源调度系统的 Leader,掌管着整个集群的资源信息,功能是监听Worker,管理 Worker、Application。
  • Worker:Spark 特有资源调度系统的 Slaver,功能是通过RegisterWorker 注册到 Master;定时发送心跳给 Master;根据 Master 发送的 Application 配置进程环境,并启动 ExecutorBackend。
  • RDD:RDD 是 Spark 对数据的核心抽象,其实就是分布式的元素集合。在 Spark 中,对数据的所有操作不外乎创建 RDD、转化已有RDD 以及调用 RDD 操作进行求值。而在这一切背后, Spark 会自动将 RDD 中的数据分发到集群上,并将操作并行化执行。
  • DAG:有向无环图,反映RDD之间的依赖关系。
  • Application:基于 Spark 构建的用户程序。
  • Job:由多个 task 组成的一个并行计算, 这些 task 产生自一个 Spark action (比如, savecollect) 操作。
  • Stage:每个 job 被分解为多个 stage, 每个 stage 其实就是一些 task 的集合, 这些 stage 之间相互依赖 (与 MapReduce 中的 map 与 reduce stage 类似),执行过程中,每碰到一个shuffle就是一个stage。
  • Task:发送到一个 executor 的一系列工作。
  • Driver:运行 application 的 main() 函数和创建 SparkContext 的进程。
  • Executor(执行器):执行器是一个进程(进程名: ExecutorBackend, 运行在 Worker 节点上),用来执行计算和为应用程序存储中间数据。
  • Cluster manager:获取集群资源的一个外部服务, 比如 standalone 管理器, Mesos 和 YARN。
  • DAGScheduler:根据Job构建基于Stage的DAG,并提交Stage给TaskScheduler,其划分Stage的依据是RDD之间的依赖关系。
  • TaskScheduler:将TaskSet提交给Worker(集群)运行,每个Executor运行什么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

 

>>> 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-13 17:07  阿Dragon  阅读(68)  评论(0)    收藏  举报