共计 3943 个字符,预计需要花费 10 分钟才能阅读完成。
什么是 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