目录
一、Spark是什么?
Spark是⼀种快速、通⽤、可扩展的⼤数据分析引擎, 2009 年诞⽣于加州⼤学伯克利分校 AMPLab , 2010 年开源、2013年 6 ⽉成为 Apache 孵化项⽬, 2014 年 2 ⽉成为 Apache 顶级项⽬。项⽬是⽤ Scala 进⾏编写。Spark 官⽹将 Spark 定义为⼀个⼤型可扩展数据的快速和通⽤处理引擎。⾸先,Spark 采⽤了先进的 DAG 执⾏引擎,⽀持循环数据流和内存计算,使得 Spark 速度更快,在内存中的速度是 Hadoop MR 的百倍,在磁盘上的速度是 Hadoop MR 的⼗倍 ( 官⽹数据 ) 。其次,Spark 是⼀个通⽤的处理引擎, 被设计⽤来做批处理、迭代运算、交互式查询、流处理、机器学习等。 另外,Spark 易⽤,可以⽤ Scala 、 Java 、 Python 、 R 等开发分布式应⽤, Spark 提供了⼤量⾼级 API ,⽅便开发。最后,Spark 集成了多种数据源,并且可以通过 local 、 Yarn 、 Mesos 、 Standalone ( Spark 提供的部署⽅ 式)等各种模式运⾏。
二、Hadoop与Spark关系及区别
2.1框架⽐较
hadoop
|
spark
| |
起源
|
2005
| |
起源地
|
MapReduce (Google) Hadoop (Yahoo)
|
University of California, Berkeley
|
数据处理引擎
|
Batch
|
Batch
|
处理
|
Slower than Spark and Flink
| 100x Faster than Hadoop |
编程语⾔
|
Java, C, C++, Ruby, Groovy, Perl, Python
|
Java, Scala, python and R
|
编程模型
|
MapReduce
|
Resilient distributed Datasets (RDD)
|
Data Transfer
|
Batch
|
Batch
|
内存管理
|
Disk Based
|
Disk Based
|
延迟
|
HIgh
|
Medium
|
吞吐量
|
Medium
|
High
|
优化机制
|
Manual
|
Manual
|
API
|
Low-level
|
High-level
|
流处理⽀持
|
NA
|
Spark Streaming
|
SQL
⽀持
|
Hive, Impala
| SparkSQL |
Graph
⽀持
|
NA
|
GraphX
|
机器学习⽀持
|
NA
|
SparkML
|
2.2处理流程⽐较
MR
中的迭代
:
Spark中的迭代:
总结:
1
、
Spark
把运算的中间数据存放在内存,迭代计算效率更⾼;
mapreduce
的中间结果需要落地,需要保存到磁盘,这样必然会有磁盘io
操做,影响性能。
2
、
Spark
容错性⾼,它通过弹性分布式数据集
RDD
来实现⾼效容错,
RDD
是⼀组分布式的存储在节点内存中的只读性质的数据集,这些集合是弹性的,某⼀部分丢失或者出错,可以通过整个数据集的计算流程的⾎缘关系来实现重建;mapreduce
的话容错可能只能重新计算了,成本较⾼。
3
、
Spark
更加通⽤,
spark
提供了
transformation
和
action
这两⼤类的多个功能
api
,另外还有流式处理sparkstreaming模块、图计算
GraphX
等等;
mapreduce
只提供了
map
和
reduce
两种操作,流计算以及其他模块的⽀持⽐较缺乏。
4
、
Spark
框架和⽣态更为复杂,⾸先有
RDD
、⾎缘
lineage
、执⾏时的有向⽆环图
DAG
、
stage
划分等等,很多时候 spark作业都需要根据不同业务场景的需要进⾏调优已达到性能要求;
mapreduce
框架及其⽣态相对较为简单,对性能的要求也相对较弱,但是运⾏较为稳定,适合⻓期后台运⾏。
三、Spark 组件
Spark Core
实现了
Spark
的基本功能,包含任务调度、内存管理、错误恢复、与存储系统 交互等模块。
Spark Core
中还包含了对弹性分布式数据集(resilient distributed dataset
,简称
RDD)
的
API
定义。
Spark SQL
是
Spark
⽤来操作结构化数据的程序包。通过
Spark SQL
,我们可以使⽤
SQL
或者
Apache Hive
版本的
SQL
⽅⾔ (HQL)来查询数据。
Spark SQL
⽀持多种数据源,⽐ 如
Hive
表、
Parquet
以及
JSON
等。
Spark Streaming
是
Spark
提供的对实时数据进⾏流式计算的组件。提供了⽤来操作数据流的
API
,并且与
Spark Core
中的
RDD API ⾼度对应。
Spark MLlib
提供常⻅的机器学习
(ML)
功能的程序库。包括分类、回归、聚类、协同过滤等,还提供了模型评估、数据 导⼊等额外的⽀持功能。
Spark GraphX
GraphX
在
Spark
基础上提供了⼀站式的数据解决⽅案,可以⾼效地完成图计算的完整流⽔作业。
GraphX
是⽤于图计算和并⾏图计算的新的(alpha
)
Spark API
。通过引⼊弹性分布式属性图(
Resilient Distributed Property Graph),⼀种顶点和边都带有属性的有向多重图,扩展了
Spark RDD
。
Structured Streaming(2.X版本)
结构化流是构建在
sparksql
引擎上的可伸缩且容错的流处理引擎。在内部,默认情况下,结构化流式处理查询使⽤微批处理引擎进⾏处理,该引擎将数据流作为⼀系列⼩批处理作业进⾏处理,从⽽实现低⾄100
毫秒的端到端延迟,并且只保证⼀次容错。
四、Spark特点
快
与
Hadoop
的
MapReduce
相⽐,
Spark
基于内存的运算要快
100
倍以上,基于硬盘的运算也要快
10
倍以上。
Spark 实现了⾼效的DAG
执⾏引擎,可以通过基于内存来⾼效处理数据流。
易⽤
Spark
⽀持
Java
、
Python
和
Scala
的
API
,还⽀持超过
80
种⾼级算法,使⽤户可以快速构建不同的应⽤。⽽且
Spark ⽀持交互式的Python
和
Scala
的
shell
,可以⾮常⽅便地在这些
shell
中使⽤
Spark
集群来验证解决问题的⽅法。
通⽤
Spark
提供了统⼀的解决⽅案。
Spark
可以⽤于批处理、交互式查询(
Spark SQL
)、实时流处理(
Spark Streaming)、机器学习(
Spark MLlib
)和图计算(
GraphX
)。这些不同类型的处理都可以在同⼀个应⽤中⽆缝使⽤。Spark
统⼀的解决⽅案⾮常具有吸引⼒,毕竟任何公司都想⽤统⼀的平台去处理遇到的问题,减少开发和维护的⼈⼒成本和部署平台的物⼒成本。
兼容性
Spark
可以⾮常⽅便地与其他的开源产品进⾏融合。⽐如,
Spark
可以使⽤
Hadoop
的
YARN
和
Apache Mesos
作为它的资源管理和调度器,器,并且可以处理所有Hadoop
⽀持的数据,包括
HDFS
、
HBase
和
Cassandra
等。这对于已经部署Hadoop
集群的⽤户特别重要,因为不需要做任何数据迁移就可以使⽤
Spark
的强⼤处理能⼒。
Spark
也可以不依赖于第三⽅的资源管理和调度器,它实现了Standalone
作为其内置的资源管理和调度框架,这样进⼀步降低了Spark
的使⽤⻔槛,使得所有⼈都可以⾮常容易地部署和使⽤
Spark
。此外,
Spark
还提供了在
EC2
上部署Standalone的
Spark
集群的⼯具。