什么是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的代码库最为沉闷。
·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
- Driver过程生成一系列task
4.Driver向Master申请资源
5.Master让调度的Worker启动Exeuctor - Exeuctor启动后向Driver注册
7.Driver将task调度到Exeuctor执行 - Executor执行后果写入文件或返回Driver
执行流程形容:
- 客户端启动后间接运行用户程序,启动Driver
- Driver过程生成一系列task
- Driver向Master申请资源
- Master让调度的Worker启动Exeuctor
- Exeuctor启动后向Driver注册
- Driver将task调度到Exeuctor执行
- 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
- 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 - Executor执行后果写入文件或返回Driver
Driver运行在Cleint :
1.客户端启动后间接运行用户程序,间接启动Driver
- Driver初始化并生成一系列Task
3.客户端将App Commands公布到YARN - RM为该job在某个NM上调配一个AM
5.AM向RM申请资源,RM返回Executor信息
6.AM通过RPC启动相应的SparkExecutor
7.Exeuctor启动后向Driver注册
8.Driver向Executor调配task
9.Executor执行后果写入文件或返回Driver