hadoop和spark算法
Hadoop这项大数据处理技术大概已有十年历史,并且被看作是首选的大数据集合处理的解决方案。MapReduce是一路计算的优秀解决方案,不过对于须要多路计算和算法的用例来讲,并不是十分高效。数据处理流程中的每一步都须要一个Map阶段和一个Reduce阶段,并且若是要利用这一解决方案,须要将全部用例都转换成MapReduce模式。数据库
在下一步开始以前,上一步的做业输出数据必需要存储到分布式文件系统中。所以,复制和磁盘存储会致使这种方式速度变慢。另外Hadoop解决方案中一般会包含难以安装和管理的集群。并且为了处理不一样的大数据用例,还须要集成多种不一样的工具(如用于机器学习的Mahout和流数据处理的Storm)。架构
若是想要完成比较复杂的工做,就必须将一系列的MapReduce做业串联起来而后顺序执行这些做业。每个做业都是高时延的,并且只有在前一个做业完成以后下一个做业才能开始启动。机器学习
而Spark则容许程序开发者使用有向无环图(DAG)开发复杂的多步数据管道。并且还支持跨有向无环图的内存数据共享,以便不一样的做业能够共同处理同一个数据。分布式
Spark运行在现有的Hadoop分布式文件系统基础之上(HDFS)提供额外的加强功能。它支持将Spark应用部署到现存的Hadoop v1集群(with SIMR – Spark-Inside-MapReduce)或Hadoop v2 YARN集群甚至是Apache Mesos之中。ide
咱们应该将Spark看做是Hadoop MapReduce的一个替代品而不是Hadoop的替代品。其意图并不是是替代Hadoop,而是为了提供一个管理不一样的大数据用例和需求的全面且统一的解决方案。工具
spark生态圈oop
Spark力图整合机器学习(MLib)、图算法(GraphX)、流式计算(Spark Streaming)和数据仓库(Spark SQL)等领域,经过计算引擎Spark,弹性分布式数据集(RDD),架构出一个新的大数据应用平台。 Spark生态圈以HDFS、S三、Techyon为底层存储引擎,以Yarn、Mesos和Standlone做为资源调度引擎;使用Spark,能够实现MapReduce应用;基于Spark,Spark SQL能够实现即席查询,Spark Streaming能够处理实时应用,MLib能够实现机器学习算法,GraphX能够实现图计算,SparkR能够实现复杂数学计算。性能
Spark Streaming:
Spark Streaming基于微批量方式的计算和处理,能够用于处理实时的流数据。它使用DStream,简单来讲就是一个弹性分布式数据集(RDD)系列,处理实时数据。
Spark SQL:
Spark SQL能够经过JDBC API将Spark数据集暴露出去,并且还能够用传统的BI和可视化工具在Spark数据上执行相似SQL的查询。用户还能够用Spark SQL对不一样格式的数据(如JSON,Parquet以及数据库等)执行ETL,将其转化,而后暴露给特定的查询。
Spark MLlib:
MLlib是一个可扩展的Spark机器学习库,由通用的学习算法和工具组成,包括二元分类、线性回归、聚类、协同过滤、梯度降低以及底层优化原语。
Spark GraphX:
GraphX是用于图计算和并行图计算的新的(alpha)Spark API。经过引入弹性分布式属性图(Resilient Distributed Property Graph),一种顶点和边都带有属性的有向多重图,扩展了Spark RDD。为了支持图计算,GraphX暴露了一个基础操做符集合(如subgraph,joinVertices和aggregateMessages)和一个通过优化的Pregel API变体。此外,GraphX还包括一个持续增加的用于简化图分析任务的图算法和构建器集合。学习
spark基本概念
Client:客户端进程,负责提交做业到Master。
Application:Spark Application的概念和Hadoop MapReduce中的相似,指的是用户编写的Spark应用程序,包含了一个Driver 功能的代码和分布在集群中多个节点上运行的Executor代码;
Cluster Manager:指的是在集群上获取资源的外部服务,目前有:
Standalone:Spark原生的资源管理,由Master负责资源的分配;
Hadoop Yarn:由YARN中的ResourceManager负责资源的分配;
Master:Standalone模式中主控节点,负责接收Client提交的做业,管理Worker,并命令Worker启动Driver和Executor。
Worker:集群中任何能够运行Application代码的节点,相似于YARN中的NodeManager节点。在Standalone模式中指的就是经过Slave文件配置的Worker节点,在Spark on Yarn模式中指的就是NodeManager节点,负责管理本节点的资源,按期向 Master汇报心跳,接收Master的命令,启动Driver和Executor;
Driver: 一个Spark做业运行时包括一个Driver进程,也是做业的主进程,负责做业的解析、生成Stage并调度Task到Executor上。包括DAGScheduler,TaskScheduler。
Executor:即真正执行做业的地方,一个集群通常包含多个Executor,每一个Executor接收Driver的命令Launch Task,一个Executor能够执行一到多个Task。
做业(Job):包含多个Task组成的并行计算,每每由Spark Action催生,一个JOB包含多个RDD及做用于相应RDD上的各类Operation;
Stage:一个Spark做业通常包含一到多个Stage。
Task:一个Stage包含一到多个Task,经过多个Task实现并行运行的功能。
DAGScheduler: 实现将Spark做业分解成一到多个Stage,每一个Stage根据RDD的Partition个数决定Task的个数,而后生成相应的Task set放到TaskScheduler中。
TaskScheduler:实现Task分配到Executor上执行。
SparkContext:整个应用的上下文,控制应用的生命周期。
RDD:Spark的基本计算单元,一组RDD可造成执行的有向无环图RDD Graph。
SparkEnv:线程级别的上下文,存储运行时的重要组件的引用。
SparkEnv内建立并包含以下一些重要组件的引用。
MapOutPutTracker:负责Shuffle元信息的存储。
BroadcastManager:负责广播变量的控制与元信息的存储。
BlockManager:负责存储管理、建立和查找块。
MetricsSystem:监控运行时性能指标信息。
SparkConf:负责存储配置信息。
spark架构
Spark架构采用了分布式计算中的Master-Slave模型。Master是对应集群中的含有Master进程的节点,Slave是集群中含有Worker进程的节点。Master做为整个集群的控制器,负责整个集群的正常运行;Worker至关因而计算节点,接收主节点命令与进行状态汇报;Executor负责任务的执行;Client做为用户的客户端负责提交应用,Driver负责控制一个应用的执行,如图所示。
Spark集群部署后,须要在主节点和从节点分别启动Master进程和Worker进程,对整个集群进行控制。在一个Spark应用的执行过程当中,Driver和Worker是两个重要角色。Driver 程序是应用逻辑执行的起点,负责做业的调度,即Task任务的分发,而多个Worker用来管理计算节点和建立Executor并行处理任务。在执行阶段,Driver会将Task和Task所依赖的file和jar序列化后传递给对应的Worker机器,同时Executor对相应数据分区的任务进行处理。
Spark的总体流程为:Client 提交应用,Master找到一个Worker启动Driver,Driver向Master或者资源管理器申请资源,以后将应用转化为RDD Graph,再由DAGScheduler将RDD Graph转化为Stage的有向无环图提交给TaskScheduler,由TaskScheduler提交任务给Executor执行。在任务执行的过程当中,其余组件协同工做,确保整个应用顺利执行。
1.在集群启动的时候,各个slave节点(也能够说是worker)会向集群的Master注册,告诉Master我随时能够干活了,随叫随到2.Master会根据一种心跳机制来实时监察集群中各个worker的状态,是否能正常工做3.Driver Application提交做业的时候也会先向Master注册信息4.做业注册完毕以后,Master会向worker发射Executor命令5.worker产生若干个Executor准备执行6.各个worker中的Executor会向Driver Application注册Executor信息,以便Driver Application可以将做业分发到具体的Executor7.Executor会按期向Driver Application报告当前的状态更新信息8.Driver Application发射任务到Executor执行