1.spark产生的目的
spark产生:为了替代Mapreduce,解决Mapreduce计算短板
Hadoop生态体系:hdfs+zokeeper +mareduce/hive+hbase+storm+mahot+其他工具;
spark体系:hdfs+zokeeper +spark+hbase+storm+mahot+其他 工具。
2.spark的设计初衷
设计一个统一的计算引擎解决所有的各类型计算,包含计算类型:
1.离线批处理;
2.交互式查询
3.图计算
4.流失计算
5.机器学习/迭代计算
6.Spark R 科学计算,数据分析
3.spark和Mapreduce的对比之后的优势
1.减少磁盘IO
MapReduce:基于磁盘
Spark 基于内存(尽量把临时数据缓存到内存)
2.增加并行度:
MapReduce:MapTask ReduceTask 一个进程一个Task(默认)
spark:ShuffleMapTask ResultTask 使用的是一个线程
3.避免重复计算:
可以吧把数据强制缓存到内存中,以供其他的task使用。
4.可选的shuffle和排序
4.1可选的shuffle
MapReduce:提供一种通用的shuffle
Combiner Partitioner sorter
shuffle的策略是一个固定的套路
如果设置了combiner会执行Combiner
如果设置的ReduceTask的个数超过1,那么Partitioner就会执行数据的分区;
如果有reducer节段的话,那么sortre的数据排序就一定会执行。
Spark的suffle:
提供了四重shuffle策略,分别适用不同的场景;
HaahShuffle,SortShuffle
4.2可选的排序:
MapReduce:如果有reducer节段的话,那么sortre的数据排序就一定会执 行;
Spark:用户指定执行,否则不排序;
5.灵活的内存管理策略
要多少给多少,可以合理的分配到底哪个阶段哦,哪个组件,使用多少。
MapReduce:MapTask JVM在启动的时候就指定了最多能使用多少内存,如果超出OOM
Spark:worker启动了很多个进程executor,每个executor并发运行多个线程,每个线程执行一个程序;
每个executor和每一个task都会指定固定的内存大小去使用,如果excutor的内存固定,task的内存也有上限,也可能出现OOM
但是:spark的任务线程,出来能使用JVM的内存之外,还可以使用操作系统的内存。
4.Spark应用场景
目前大数据处理场景主要有以下几种类型:
1、复杂的批处理(Batch Data Processing),偏重点在于处理 海量数据的能力,至于处理
速度可忍受,通常的时间可能是在数十分钟到数小时; 2、基于历史数据的交互式查询(Interactive
Query),通常的时间在数十秒到数十分钟之间 ; 3、基于实时数据流的大数据处理(Streaming Data
Processing),通常在数百毫秒到数秒之间 ;
目前对以上三种场景需求都有比较成熟的处理框架:
第一种情况可以用 Hadoop 的 MapReduce 来进行批量海量数据处理
第二种情况可以 Impala、Kylin 进行交互式查询
第三中情况可以用 Storm 分布式处理框架处理实时流式数据
通过以上分析,总结 Spark 场景有以下几个:
1、Spark 是基于内存的迭代计算框架,适用于需要多次操作特定数据集的应用场合。需要 反复操
作的次数越多,所需读取的数据量越大,受益越大,数据量小但是计算密集度较大 的场合,受益就相对较小 ; 2、由于 RDD
的特性,Spark 不适用那种异步细粒度更新状态的应用,例如 web 服务的存 储或者是增量的 web
爬虫和索引。就是对于那种增量修改的应用模型不适合 ; 3、数据量不是特别大,但是要求实时统计分析需求 ;