4-1、Spark简介

1Spark简介

1.1Spark为何物?

Spark是基于内存计算的大数据并行计算框架

Spark基于内存计算,提高了大数据环境下处理的实时性,同时保证了高容错性和高伸缩性。

Spark2009年诞生于加州大学伯克利分校AMPLab。现在已经成为Apache软件基金会旗下的顶级开源项目

 

Spark历史与发展:

2009年:Spark诞生于AMPLab;

2010年:开源;
20136月:Apache孵化器项目:
20142月:Apache顶级项目;
20142月:大数据公司Cloudera宣城加大Spark框架的投入来取代MapReduce;

20144月:大数据公司MapR投入Spark阵营,Apache Mahout放弃MapReduce,将使用Spark作为计算引擎;

20145月:Pivotal Hadoop集成Spark全栈;
2014530日:Spark1.0.0发布;

20146月:Spark 2014峰会在旧金山召开;

20147月:Hive on Spark项目启动;

2015年:Spark成为了现在大数据领域最火的开源软件;

2016年:Spark2.0将发布;

 

one stack to rule them all

 

 

Spark因何而生:


  

1.2SparkHadoop关系

SparkScala语言编写,HadoopJava语言编写。

Spark是一个计算框架,而Hadoop中包含计算框架MapReduce和分布式文件系统HDFSHadoop更广泛地说还包含在其生态系统上的其他系统,如HBaseHive等。

SparkMapReduce的替代方案,而且兼容HDFSHive等分布式存储层,可融入Hadoop的生态系统,以弥补MapReduce的不足。

 

Spark相比Hadoop MapReduce的优势:

1)、中间结果输出

基于MapReduce的计算引擎通常会把中间结果输出到磁盘上,进行存储和容错。当一些查询翻译到MapReduce任务时,处于任务管道承接考虑,往往会产生多个Stage,而这些串联的Stage又依赖于底层文件系统来存储每一个Stage的输出结果。

Spark将执行模型抽象为通用的有向无环图(DAG),这可以将多Stage的任务串联或者并行执行,而无须将Stage中间结果输出到HDFS上面。类似的引擎包括DryadTez

 

2)、数据格式和内存布局

MapReduce Schema on Read处理方式会引起较大的处理开销。

Spark抽象出分布式内存存储结构弹性分布式数据集RDD,进行数据的存储。

RDD支持粗粒度写操作,但对于读取操作,RDD可以精确到每条记录。

 

3)、执行策略

MapReduce在数据Shuffle之前花费大量时间来排序。

Spark任务在Shuffle中不是所有的情景都需要排序,所以支持基于Hasnde的分布式聚合,调度中采用更为通用的任务执行计划图(DAG),每一次轮次的输出结果在内存缓存。

 

4)、任务调度和开销

Hadoop MapReduce是为了运行长达数小时的批量作业而设计的,在某些极端的情况下,提交一个任务的延迟非常高。

Spark采用了事件驱动的类库AKKA来启动任务,通过线程池复用线程来避免进程或线程启动和切换开销。

 

 

简单的说:

MapReduce提供的编程模型相比,Spark具有如下鲜明的两点:

1)、计算更为快捷,速度可以提高10100;
2)、计算过程中,如果某一点出现问题,事件重演的代价远远小于MapReduce

 

Spark的应用理论上来讲,原先基于MapReduce来开发的分析工具都可以基于Spark来实现,通过这样一种迁移来达到更快的处理效果。

 

SparkHadoop的几重关系:

1)、SparkHadoopMapReduce处于同一层面

2)、Spark可以部署在YARN

3)、Spark原生支持HDFS文件系统的访问

 

1.3Spark生态系统BDAS

Spark已经发展成为包含众多子项目的大数据计算平台。伯克利将Spark的整个生态系统称为伯克利数据分析栈(BDAS)。

核心框架是Spark

支持结构化数据SQL查询和分析的查询引擎Spark SQL;

提供机器学习功能的系统MLbase及底层的分布式机器学习库MLlib;
并行图计算框架GraphX

流计算框架Spark Streaming;

采样近似计算查询引擎BlinkDB
内存分布式文件系统Tachyon;

资源管理框架Mesos;

 

 

 

1.4Spark架构

Spark架构采用了分布式计算中的Master-Slave模型

Master是对应集群中的含有Master进程的节点,Slave是集群中含有Worker进程的节点。

Master作为整个集群的控制器,负责整个集群的正常运行;

Worker相当于计算节点,接收主节点命令和进行状态汇报;

Executor负责任务的执行;

Client作为用户的客户端负责提交应用;

Driver负责控制一个应用的执行;

   

 

DriverWorker是两个重要的角色。

Driver程序是应用逻辑执行的起点,负责作业的调度,即Task任务的分发,而多个Worker用来管理计算节点和创建Executor并行处理任务。

执行阶段,Driver会将TaskTask所依赖的filejar序列化后传递给对应的Worker机器,同时Executor对相应的数据分区的任务进行处理。

 

Spark架构中的基本组件:

ClusterManager:在Standalone模式中即为Master节点,控制整个集群,监控Worker。在YARN模式中为资源管理器。

Worker:从节点,负责控制计算节点,启动ExecutorDriver。在YARN模式中为NodeManager,负责计算节点的控制。

Driver:运行Applicationmain()函数并创建SparkContext

Executor:执行器,在worker node上执行任务的组件、用于启动线程池运行任务。每个Application拥有独立的一组Executors

SparkContext:整个应用的上下文,控制应用的声明周期。

RDDSpark基本的计算单元,一组RDD可形成执行的有向无环图RDD Graph

DAGScheduler:根据作业(Job)构建基于StageDAG,并提交StageTaskScheduler

TaskScheduler:将任务(Task)分发给Executor执行。

SparkEnv:线程级别的上下文,存储运行时的重要组件的引用。

 

SparkEnv内创建如下一些重要的引用:

MapOutPutTracker:负责Shuffle元信息的存储。

BroadcastManager:负责广播变量的控制与元信息的存储。

BlockManager:负责存储管理、创建和查询块。

MetricsSystem:监控运行时的性能指标信息。

SparkConf:负责存储配置信息。

 

 

 

Spark整体流程为:

Client提交应用,Master找到一个Worker启动DriverDriverMaster或者资源管理器申请资源,之后将应用转化为RDD Graph,再由DAGSchedulerRDD Graph转化为Stage的有向无环图提交给TaskScheduler,由TaskScheduler提交任务给Executor执行。任务提交的过程中,其它组件协同工作,确保整个应用顺利执行。

Spark standalone架构:

 

 

1.5Spark核心组件

Spark支持丰富的应用计算场景,这个通过在Spark Core上构建多个组件完成的。

1.5.1Spark Streaming

Spark Streaming实现了实时流处理;

Spark Streaming基于Spark Core实现了可扩展、高吞吐和容错的实时数据流处理。

 

Spark Streaming是将流式计算分解成一系列短小的批处理作业。

这里的批处理引擎是Spark,也就是把Spark Streaming的输入数据按照尺寸(如1秒)分成一段一段的数据(Stream),每一段数据都转换为Spark中的RDD,然后将Spark Streaming中对DStream的转换变为针对Spark中对RDD的转换操作。将RDD经过操作变成中间结果保存在内存中。

1.5.2MLlib

MLlibSpark对常用的机器学习算法的实现库,同时含有相关的测试和数据生成器,包括分类、回归、聚类、降维、协同过滤以及底层基本的优化元素。

MLlib实现了很多机器学习算法:

分类与回归的算法包括SVM、逻辑回归、线性回归、朴素贝叶斯、决策树等;

协同过滤实现了交替最小二乘法(ALS);

聚类实现了K-means、高斯混合、PICLDAStreaming版本的K-means

降维实现了SVDPCA

还有频繁模式挖掘的FP-growth

1.5.3Spark SQL

Spark SQL实现了基于Spark的交互式查询;

 

 

数据源API通过Spark SQL提供了访问结构化数据的可插拔机制。数据源有了简便的途径进行数据转换并加入到Spark平台中。

数据源API的另一个优点就是不管数据的来源如何,用户都能通过Spark支持的所有语言来操作这些数据。

1.5.4GraphX

GraphX实现了图计算,是Spark提供的关于图和图并行计算的API,它集ETL、试探性分析和迭代式的图计算与一体,在灵活性、易用性和容错性的前提下获得了很好的性能。

图算法是很多复杂机器学习算法的基础,GraphX的特点是离线计算、批量处理、基于同步的整体同步并行计算模型(BSP)。

http://www.cnblogs.com/Leo_wl/p/3530464.html

 

1.6Spark版本

 

 

1.7Spark整体代码结构规格

Spark CoreSpark的核心,它体现了Spark的核心设计思想。

Spark SQLMLlibGraphXSpark Streaming都是基于Spark Core的实现和衍生。

Spark1.2.0版本中,Spark Core包含了近6.5万行的Scala代码。

 

 

 

scheduler:文件夹中含有负责整体的Spark应用、任务调度的代码;

broadcast:含有Broadcast(广播变量)的实现代码,APIJavaPython实现的;

deploy:含有Spark部署与启动运行的代码;

Common:不是一个文件夹,而是代表Spark通用的类和逻辑的实现;
metrics:是运行时状态监控逻辑代码,Executor中含有Worker节点负责计算的逻辑代码;

Partial:含有近似评估代码;

Network:含有集群通信模块代码;
serializer:含有序列化模块的代码;

Storage:含有存储模块代码;
ui:含有监控界面的代码逻辑;

下面是Spark生态系统其它组件的实现:

Streaming:是Spark Streaming的实现代码;
YARN:是Spark on YARN的部分实现代码;
graphx:含有GraphX实现代码;
interpreter:代码交互式shell的代码;

Mllib:代表MLlib算法实现的代码;
sql:是Spark SQL的代码;

 

1.8Spark on YARN

 

 

Spark on YARN架构解析如下:

基于YARNSpark作业首先由客户端生成作业信息,提交给ResourceManagerResourceManager在某一NodeManager汇报时把AppMaster分配给NodeManagerNodeManager启动SparkAppMasterSparkAppMaster启动后初始化作业,然后向ResourceManager申请资源,申请到相应资源后,SparkAppMaster通过RPCNodeManager启动相应的SparkExecutorSparkExecutorSparkAppMaster汇报并完成相应的任务。此外,SparkClient会通过AppMaster获取作业运行状态。



版权声明:本文为baolibin528原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。