○ 高可伸缩性html
○ 高容错java
○ 基于内存计算apache
○ MapReduce属于Hadoop生态体系之一,Spark则属于BDAS生态体系之一数组
○ Hadoop包含了MapReduce、HDFS、HBase、Hive、Zookeeper、Pig、Sqoop等缓存
○ BDAS包含了Spark、Shark(至关于Hive)、BlinkDB、Spark Streaming(消息实时处理框架,相似Storm)等等网络
○ BDAS生态体系图:数据结构
优点:app
○ MapReduce一般将中间结果放到HDFS上,Spark是基于内存并行大数据框架,中间结果存放到内存,对于迭代数据Spark效率高。框架
○ MapReduce老是消耗大量时间排序,而有些场景不须要排序,Spark能够避免没必要要的排序所带来的开销分布式
○ Spark是一张有向无环图(从一个点出发最终没法回到该点的一个拓扑),并对其进行优化。
Scala、Python、Java等
○ Local (用于测试、开发)
○ Standlone (独立集群模式)
○ Spark on Yarn (Spark在Yarn上)
○ Spark on Mesos (Spark在Mesos)
Driver程序启动多个Worker,Worker从文件系统加载数据并产生RDD(即数据放到RDD中,RDD是一个数据结构),并按照不一样分区Cache到内存中。如图:
○ 英文名:Resilient Distributed Dataset
○ 中文名:弹性分布式数据集
○ 什么是RDD?RDD是一个只读、分区记录的集合,你能够把他理解为一个存储数据的数据结构!在Spark中一切基于RDD
○ RDD能够从如下几种方式建立:
一、集合转换
二、从文件系统(本地文件、HDFS、HBase)输入
三、从父RDD转换(为何须要父RDD呢?容错,下面会说起)
○ RDD的计算类型:
一、Transformation:延迟执行,一个RDD经过该操做产生的新的RDD时不会当即执行,只有等到Action操做才会真正执行。
二、Action:提交Spark做业,当Action时,Transformation类型的操做才会真正执行计算操做,而后产生最终结果输出。
三、Hadoop提供处理的数据接口有Map和Reduce,而Spark提供的不只仅有map和reduce,还有更多对数据处理的接口,如图下所示:
○ 每一个RDD都会记录本身所依赖的父RDD,一旦出现某个RDD的某些partition丢失,能够经过并行计算迅速恢复
○ RDD的依赖又分为Narrow Dependent(窄依赖)和Wide Dependent(宽依赖)
○ 窄依赖:每一个partition最多只能给一个RDD使用,因为没有多重依赖,因此在一个节点上能够一次性将partition处理完,且一旦数据发生丢失或者损坏能够迅速从上一个RDD恢复
○ 宽依赖:每一个partition能够给多个RDD使用,因为多重依赖,只有等到全部到达节点的数据处理完毕才能进行下一步处理,一旦发生数据丢失或者损 坏,则完蛋了,因此在这发生以前必须将上一次全部节点的数据进行物化(存储到磁盘上)处理,这样达到恢复。
○ 宽、窄依赖示例图:
Spark经过useDisk、useMemory、deserialized、replication4个参数组成11种缓存策略。
useDisk:使用磁盘缓存(boolean )
useMemory:使用内存缓存(boolean)
deserialized:反序列化(序列化是为了网络将对象进行传输,boolean:true反序列化\false序列化)
replication:副本数量(int)
经过StorageLevel类的构造传参的方式进行控制,结构以下:
class StorageLevel private(useDisk : Boolean ,useMemory : Boolean ,deserialized : Boolean ,replication:Ini)
○ spark-submit(官方推荐)
○ sbt run
○ java -jar
提交时能够指定各类参数
1
2
3
4
5
6
7
8
|
./bin/spark-submit
--
class
<main-
class
>
--master <master-url>
--deploy-mode <deploy-mode>
--conf <key>
=
<value>
...
#
other options
<application-jar>
[application-arguments]
|
例如:
关于更详细的submit-spark参考官方文档:http://spark.apache.org/docs/latest/submitting-applications.html