02 Spark架构与运行流程

1. 为什么要引入Yarn和Spark。

(1)现有的hadoop生态系统中存在的问题

1)使用mapreduce进行批量离线分析; 2)使用hive进行历史数据的分析; 3)使用hbase进行实时数据的查询; 4)使用storm进行实时的流处理; (2)选用spark的原因 1) 应用于流式计算的Spark Streaming; 2) 应用于即席查询(Ad-hoc)的Spark SQL; 3) 应用于机器学习(数据挖掘)的MLlib; 4)应用于图处理的GraphX; 5)将R扩展成并行计算的SparkR; 6)还有权衡精度和速度的查询引擎BlinkDB; 7)基于内存计算(从表象来看); 8)DAG(从深层次来看):把执行过程做成一张图,再来优化; 9)开发速度快; (3)Spark和MapReduce对比 1)调度:启动map和reduce任务需要时间; 2)数据共享:从HDFS上读取数据执行,每次迭代均要重写将结果写回到HDFS上,后续的迭代如果需要前面运行的结果数据时需要再去HDFS上读取,以此类推; 3)输出结果数据多副本:数据需要额外的复制、序列化、磁盘/IO的开销;  Spark和MapReduce的区别:迭代时数据写入内存,而不是HDFS上,进而减少大量的磁盘IO开销;

2. Spark已打造出结构一体化、功能多样化的大数据生态系统,请简述Spark生态系统。

Spark拥有DAG执行引擎,支持在内存中对数据进行迭代计算

Spark不仅支持Scala编写应用程序,而且支持Java和Python等语言进行编写,特别是Scala是一种高效、可拓展的语言,能够用简洁的代码处理较为复杂的处理工作。

 

Spark生态圈即BDAS===》

02 Spark架构与运行流程

Spark具有很强的适应性,能够读取HDFS、Cassandra、HBase、S3和Techyon为持久层读写原生数据,能够以Mesos、YARN和自身携带的Standalone作为资源管理器调度job,来完成Spark应用程序的计算。

spark跟hadoop的比较:

Spark是在借鉴了MapReduce之上发展而来的,继承了其分布式并行计算的优点并改进了MapReduce明显的缺陷,具体如下:

首先,Spark把中间数据放到内存中,迭代运算效率高。MapReduce中计算结果需要落地,保存到磁盘上,这样势必会影响整体速度,而Spark支持DAG图的分布式并行计算的编程框架,减少了迭代过程中数据的落地,提高了处理效率。

其次,Spark容错性高。Spark引进了弹性分布式数据集RDD (Resilient Distributed Dataset) 的抽象,它是分布在一组节点中的只读对象集合,这些集合是弹性的,如果数据集一部分丢失,则可以根据“血统”(即充许基于数据衍生过程)对它们进行重建。另外在RDD计算时可以通过CheckPoint来实现容错,而CheckPoint有两种方式:CheckPoint Data,和Logging The Updates,用户可以控制采用哪种方式来实现容错。

最后,Spark更加通用。不像Hadoop只提供了Map和Reduce两种操作,Spark提供的数据集操作类型有很多种,大致分为:Transformations和Actions两大类。Transformations包括Map、Filter、FlatMap、Sample、GroupByKey、ReduceByKey、Union、Join、Cogroup、MapValues、Sort和PartionBy等多种操作类型,同时还提供Count, Actions包括Collect、Reduce、Lookup和Save等操作。另外各个处理节点之间的通信模型不再像Hadoop只有Shuffle一种模式,用户可以命名、物化,控制中间结果的存储、分区等。

Spark支持多种分布式存储系统:HDFS和S3

用图文描述你所理解的Spark运行架构,运行流程。

答:

02 Spark架构与运行流程

1、Driver创建SparkContext对象

2、SparkContext向资源管理器申请资源

3、资源管理器为Executor进程分配资源,并启动Executor进程

4、Executor进程向SparkContext申请Task

5、SparkContext根据RDD依赖关系构建DAG图,DAG图提交给DAGScheduler解析成Stage,然后把一个个TaskSet提交给底层调度器TaskScheduler处理,TaskScheduler向Executor返回Task

6、Executor运行Task,并向TaskScheduler和DAGScheduler返回运行结果

7、写入数据,释放资源

 
上一篇:区块链 有向无环图 DAG怎么用


下一篇:【编译原理笔记16】代码优化:流图,常用代码优化方法, 基本块的优化