随笔说明:由于参加了上海交大组织的飞谷云项目,而且报名第三组:基于Spark的机器学习。于是打算先花时间把Spark的基础学习学习。这次学习的参考书选择的是Spark的官方文档(这个肯定是最权威的)和机械工业的《Spark大数据处理 技术、应用与性能优化》;届时肯定还有项目组提供的学习资料。
Spark是基于内存计算的大数据并行计算框架。它基于内存计算,提高了实时性,保证了高容错性和高可伸缩性,允许用户将它部署在大量廉价硬件之上,形成集群。
Spark之于Hadoop:Spark只是一个计算框架,而hadoop中包含计算框架MapReduce和分布式文件系统HDFS,更加广泛的说,Hadoop还包括在其生态系统上的其他系统,如Hbase,Hive等。Spark是整个BDAS的核心组件,将分布式数据抽象为弹性分布式数据集(RDD),实现了任务调度、RPC、序列化和压缩。
Spark将数据在分布式环境下分区,然后将作业转化为有向无环图,并分阶段进行DAG的调度和任务的分布式并行处理。
Spark架构采用了分布式计算中的Master-Slave模型。Master是对应集群中的含有Master进程的节点,作为整个集群的控制器,负载整个集群的正常运行;Slave是集群中含有Worker进程的节点。Worker相当于是计算节点,接受主节点命名与进行状态汇报。
图中的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中。
单机多核环境下,多CPU共享内存和磁盘;而分布式并行处理系统是由许多松耦合的处理单元组成的,每个单元内的CPU都有自己的资源,如总线,内存,硬盘等。其最大的特点就是不共享资源,即计算能力和存储扩展性可以成倍增长。
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个节点。
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算子。
*调度与任务分配:应用Application;Job;Stage;Task;
*I/O:以 块 为单位进行管理;
*通信控制:AKKA框架进行集群消息通信;
*容错:Lineage和checkpoint;
*Shuffle:把一组无规则的数据尽量转换成一组具有一定规则的数据。
Spark应用:用户提交的应用程序----提交---->Spark为App分配资源,将程序转换执行------>Driver Program------->RDD遇到Action,形成Graph----转化为---->Job----根据RDD的宽依赖关系---->切分为很多Stage----包含----->一组相同的Task----执行---->RDD中对应Stage中包含的算子。