spark初识

随笔说明由于参加了上海交大组织的飞谷项目,而且报名第三组:基于Spark的机器学习。于是打算先花时间把Spark的基础学习学习。这次学习的参考书选择的是Spark的官方文档(这个肯定是最权威的)和机械工业的《Spark大数据处理   技术、应用与性能优化》;届时肯定还有项目组提供的学习资料。

 

 1.Spark简介

 1.1概念

Spark是基于内存计算的大数据并行计算框架。它基于内存计算,提高了实时性,保证了高容错性和高可伸缩性,允许用户将它部署在大量廉价硬件之上,形成集群。

Spark之于Hadoop:Spark只是一个计算框架,而hadoop中包含计算框架MapReduce和分布式文件系统HDFS,更加广泛的说,Hadoop还包括在其生态系统上的其他系统,如Hbase,Hive等。
 
Spark是MapReduce的替代,而且兼容HDFS,Hive等分布式存储层,可融入Hadoop生态系统,以弥补缺失MapReduce的不足。
 
Spark相对于Hadoop的优势如下:
(1)无需将中间结果输出到HDFS
(2)RDD
(3)执行策略,有向无环图DAG
 

1.2Spark生态系统BDAS(伯克利数据分析栈)

Spark是整个BDAS的核心组件,将分布式数据抽象为弹性分布式数据集(RDD),实现了任务调度、RPC、序列化和压缩。

Spark将数据在分布式环境下分区,然后将作业转化为有向无环图,并分阶段进行DAG的调度和任务的分布式并行处理。

1.3Spark架构

Spark架构采用了分布式计算中的Master-Slave模型。Master是对应集群中的含有Master进程的节点,作为整个集群的控制器,负载整个集群的正常运行;Slave是集群中含有Worker进程的节点。Worker相当于是计算节点,接受主节点命名与进行状态汇报。

1.4Spark运行逻辑

图中的A,B,C,D,E,F分别代表不同的RDD,RDD内的方框代表分区。数据从HDFS输入Spark,形成RDD A和RDD C,RDD C上执行map操作,转化为D,B,E执行join操作,转换为F,而在B和E连接转化为F的过程中又会执行Shuffle,最后F通过函数saveAsSequenceFile输出并保存到HDFS中。

 

1.5Spark分布式架构与单机多核架构的异同

单机多核环境下,多CPU共享内存和磁盘;而分布式并行处理系统是由许多松耦合的处理单元组成的,每个单元内的CPU都有自己的资源,如总线,内存,硬盘等。其最大的特点就是不共享资源,即计算能力和存储扩展性可以成倍增长。

 

2.Spark计算模型

2.1Spark程序模型

Spark:性能-------->将重复利用的数据集缓存到内存

    目标-------->像编写单机程序一样编写分布式程序

RDD(弹性分布式数据集)--------->Spark的核心数据结构

RDD与DSM(分布式共享内存)的异同:对于落后任务的处理:

  RDD:任务备份,重新调度执行;

  DSM:diffcult to solve

Spark数据存储的核心是弹性分布式数据集RDD----抽象理解---->一个大数组------>分布在集群上。

在物理上,RDD实质上是一个元数据结构,存储着Block,Node等映射关系,一个RDD就是一组分区,在物理数据存储上,RDD的每个分区(Partition)对应一个Block(可存储在内存)。

 

RDD数据管理模型:

解释:RDD1有5个分区(p1~p5),分别存储在4个节点中,RDD2有3个分区,分别存储在3个节点。

2.2Spark算子

1)输入:从HDFS,Hive,Hbase这些外部数据空间----输入进---->Spark----数据进入--->Spark运行时数据空间----转化为---->Spark中的数据块----通过BlockManager---->管理;

2)运行:Spark输入数据形成RDD后----通过变换算子---->对数据进行操作,将RDD转化为新的RDD----Action算子---->触发Spark提交作业

3)输出:输出Spark运行时空间,存储到分布式存储中,如SaveAsTextFile输出到HDFS中。

****Spark将常用的大数据操作都转化成为RDD的子类。

 

算子的分类:1)Value型transformation;2)key-value型transformation;3)Action算子。

 

3.Spark的主要模板

*调度与任务分配:应用Application;Job;Stage;Task;

*I/O:以 块 为单位进行管理;

*通信控制:AKKA框架进行集群消息通信;

*容错:Lineage和checkpoint;

*Shuffle:把一组无规则的数据尽量转换成一组具有一定规则的数据。

 

Spark应用:用户提交的应用程序----提交---->Spark为App分配资源,将程序转换执行------>Driver Program------->RDD遇到Action,形成Graph----转化为---->Job----根据RDD的宽依赖关系---->切分为很多Stage----包含----->一组相同的Task----执行---->RDD中对应Stage中包含的算子。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2015-10-07 19:42  闷头雪IT  阅读(345)  评论(0编辑  收藏  举报