大数据开发之Spark入门

什么是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)逐步形成大数据平台。

大数据开发之Spark入门

·2009:Spark诞生于伯克利大学 AMPLab

·2010:开源

·2013.6:Apache孵化器项目

·2014.2:Apache*项目

目前为止,发布的最新版本为Spark2.4.0

Spark在最近6年内发展迅速,相较于其他大数据平台或框架而言,Spark的代码库最为活跃。

大数据开发之Spark入门

截止2015年6月

·Spark的Contributor比2014年涨了3倍,达到730人;

·总代码行数也比2014年涨了2倍多,达到40万行;

·Spark应用也越来越广泛,最大的集群来自腾讯——8000个节点,单个Job最大分别是阿里巴巴和Databricks——1PB;

大数据开发之Spark入门

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整体架构

·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优势

轻量级快速处理。Spark允许Hadoop集群中的应用程序在内存中以100倍的速度运行,即使在磁盘上运行也能快10倍。Spark通过减少磁盘IO来达到性能提升,它将中间处理的数据全部放到了内存中。

大数据开发之Spark入门

·易于使用,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支持四种分布式部署方式,分别是standalonespark on mesosspark on YARNSpark 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通信,进行任务的调度和结果跟踪,不涉及资源。

大数据开发之Spark入门

执行流程描述:

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

大数据开发之Spark入门

执行流程描述

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的调度和结果跟踪。

大数据开发之Spark入门

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

大数据开发之Spark入门

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

 

上一篇:强化学习作业


下一篇:代码 | 自适应大邻域搜索系列之(7) - 局部搜索LocalSearch的代码解析