什么是Spark?
·大数据的电花火石。
·Spark类似于MapReduce的低延迟的交互式计算框架。
·Spark是UC Berkeley AMPLab开发的是一种计算框架,分布式资源工作交由集群管理软件(Mesos、YARN)。
·Spark是处理海量数据的快速通用引擎大数据培训。
Spark发展历程
·Hadoop在2003年从Nutch发展到Lucene,在Yahoo成长,进入Apache孵化,2008年获得大量使用。但一直存在MR算法少、每次Reduce都需要磁盘读写、MR需要成对出现、Master节点调度慢、单节点等等问题。
·Spark2007年在Yahoo起步,用于改善MR算法。2009年独立为一个项目,2010年开源,2013年进入Apache孵化。被称为以下一代计算平台。
·Berkeley大学成为大数据技术中心,Berkeley Data Analysis Stack(BDAS)逐步形成大数据平台。
·2009:Spark诞生于伯克利大学 AMPLab
·2010:开源
·2013.6:Apache孵化器项目
·2014.2:Apache*项目
目前为止,发布的最新版本为Spark2.4.0
Spark在最近6年内发展迅速,相较于其他大数据平台或框架而言,Spark的代码库最为活跃。
截止2015年6月
·Spark的Contributor比2014年涨了3倍,达到730人;
·总代码行数也比2014年涨了2倍多,达到40万行;
·Spark应用也越来越广泛,最大的集群来自腾讯——8000个节点,单个Job最大分别是阿里巴巴和Databricks——1PB;
Spark特点
1.先进架构
·Spark采用Scala语言编写,底层采用了actor model的akka作为通讯框架,代码十分简洁高效。
·基于DAG图的执行引擎,减少多次计算之间中间结果写到Hdfs的开销。
·建立在统一抽象的RDD(分布式内存抽象)之上,使得它可以以基本一致的方式应对不同的大数据处理场景。
2.高效
·提供Cache机制来支持需要反复迭代的计算或者多次数据共享,减少数据读取的IO开销。
·与Hadoop的MapReduce相比,Spark基于内存的运算比MR要快100倍;而基于硬盘的运算也要快10倍!
3.易用
·Spark提供广泛的数据集操作类型(20+种),不像Hadoop只提供了Map和Reduce两种操作。
·Spark支持Java,Python和Scala API,支持交互式的Python和Scala的shell。
4.提供整体 解决方案
·以其RDD模型的强大表现能力,逐渐形成了一套自己的生态圈,提供了full-stack的解决方案。
·主要包括Spark内存中批处理,Spark SQL交互式查询,Spark Streaming流式计算, GraphX和MLlib提供的常用图计算和机器学习算法。
5.与Hadoop无缝衔接
·Spark可以使用YARN作为它的集群管理器。
·读取HDFS,HBase等一切Hadoop的数据。
Spark整体架构
·Spark提供了多种高级工具: Shark SQL应用于即席查询(Ad-hoc query)、Spark Streaming应用于流式计算、 MLlib应用于机器学习、GraphX应用于图处理。
·Spark可以基于自带的standalone集群管理器独立运行,也可以部署在Apache Mesos 和 Hadoop YARN 等集群管理器上运行。
·Spark可以访问存储在HDFS、 Hbase、Cassandra、Amazon S3、本地文件系统等等上的数据,Spark支持文本文件,序列文件,以及任何Hadoop的InputFormat。
Spark优势
轻量级快速处理。Spark允许Hadoop集群中的应用程序在内存中以100倍的速度运行,即使在磁盘上运行也能快10倍。Spark通过减少磁盘IO来达到性能提升,它将中间处理的数据全部放到了内存中。
·易于使用,Spark支持多语言。Spark支持Java、Scala及Python,这允许开发者在自己熟悉的语言环境下进行工作。
·支持复杂查询。在简单的“map”及”reduce”操作之外,Spark还支持SQL查询、流式查询及复杂查询。
·实时的流处理。对比MapReduce只能处理离线数据,Spark支持实时的流计算。
·可以与Hadoop和已存Hadoop数据整合。
·支持mysql数据库和HBase数据库。
Spark适用场景
·目前大数据在互联网公司主要把Spark应用在广告、报表、推荐系统等业务上。
·在广告业务方面需要大数据做应用分析、效果分析、定向优化等。
·在推荐系统方面则需要大数据优化相关排名、个性化推荐以及热点点击分析等。
这些应用场景的普遍特点是计算量大、效率要求高。Spark恰恰满足了这些要求。
总的来说Spark的适用面比较广泛且比较通用。
Spark部署
·安装Scala
·配置文件:spark-env.sh
·部署的四种模式:Standalone、Spark On Yarn、Spark On Mesos、Spark On Cloud
Spark程序运行方式
·运行自带样例:run-example
·交互式:spark-shell
·提交到集群:spark-submit spark-class
spark-submit参数:
--class 应用程序类名
--master spark master地址
--jars 依赖库文件
--executor-memory 内存
--total-executor-cores CPU core
Spark运行模式
目前Apache Spark支持四种分布式部署方式,分别是standalone、spark on mesos和 spark on YARN、Spark on cloud。
standalone模式,即独立模式,自带完整的服务,可单独部署到一个集群中,无需依赖任何其他资源管理系统。Spark在standalone模式下单点故障问题是借助zookeeper实现的,思想类似于Hbase master单点故障解决方案。
Spark On Mesos模式,Spark运行在Mesos上会比运行在YARN上更加灵活,更加自然。在Spark On Mesos环境中,用户可选择两种调度模式之一运行自己的应用程序,粗粒度模式(Coarse-grained Mode)和细粒度模式(Fine-grained Mode)。
Spark On YARN模式,这是一种最有前景的部署模式。但限于YARN自身的发展,目前仅支持粗粒度模式(Coarse-grained Mode)。
Spark On cloud模式,比如AWS的EC2,使用这种模式,方便的访问Amazon的S3。
Spark on Standalone
·Master和Worker是standalone的角色,Driver和Executor是Spark的角色。
·Master负责分配资源,分配Driver和Executor,让Worker启动driver和executor,只管理到executor层,不涉及任务;
·Driver负责生成task,并与executor通信,进行任务的调度和结果跟踪,不涉及资源。
执行流程描述:
1.客户端把作业发布到Master
2.Master让一个Worker启动Driver,并将作业推送给Driver
3. Driver进程生成一系列task
4.Driver向Master申请资源
5.Master让调度的Worker启动Exeuctor
6. Exeuctor启动后向Driver注册
7.Driver将task调度到Exeuctor执行
8. Executor执行结果写入文件或返回Driver
执行流程描述:
1. 客户端启动后直接运行用户程序,启动Driver
2. Driver进程生成一系列task
3. Driver向Master申请资源
4. Master让调度的Worker启动Exeuctor
5. Exeuctor启动后向Driver注册
6. Driver将task调度到Exeuctor执行
7. Executor执行结果写入文件或返回Driver
Spark on Yarn
·与Standalone类似,不过YARN架构更通用,可以在同一集群部署Hadoop、Spark等。
·RM、NM和AM是YARN的角色,Driver和Executor是Spark的角色。
·RM负责资源分配,分配App Master和Executor;AM负责向RM申请资源,启动Driver和启动Executor。
·Driver负责task的生成,task的调度和结果跟踪。
Driver运行在AM(Application Master):
1.客户端把作业发布到YARN
2. RM为该job在某个NM上分配一个AM,NM启动AppMaster,App Master启动Driver
3.AM启动后完成初始化作业。Driver生成一系列Task
4.AM向RM申请资源,RM返回Executor信息
5.AM通过RPC启动相应的SparkExecutor
6.Driver向Executor分配task
7. Executor执行结果写入文件或返回Driver
Driver运行在Cleint :
1.客户端启动后直接运行用户程序,直接启动Driver
2. Driver初始化并生成一系列Task
3.客户端将App Commands发布到YARN
4. RM为该job在某个NM上分配一个AM
5.AM向RM申请资源,RM返回Executor信息
6.AM通过RPC启动相应的SparkExecutor
7.Exeuctor启动后向Driver注册
8.Driver向Executor分配task
9.Executor执行结果写入文件或返回Driver