Spark解决的问题 spark的设计初衷 spark和Mapreduce的对比 Spark的编程
1 Spark解决的问题
spark
产生:替代MapReduce
计算,解决MapReduce
计算缓慢的问题
注:Hive
解决MapReduce
编程复杂的问题
Hadoop
生态体系:hdfs
+zookeeper
+mapreduce
/hive
+hbase
+storm
+mahout
+其他工具;
hdfs
做存储zookeeper
做协调mapreduce/hive
做计算hbase
解决实时的增删改查storm
做流式处理mouaot
做机器学习
spark
体系:hdfs
+zokeeper
+spark
+hbase
+storm
+mahout
+其他工具;
2 spark的设计初衷
设计一个统一的计算引擎解,完美的融入hadoop
生态体系决所有的各类型计算;
- 1.离线批处理;
- 2.交互式查询
- 3.图计算
- 4.流失计算
- 5.机器学习/迭代计算
- 6.
Spark
支持R
语言 科学计算,数据分析
3 spark和Mapreduce的对比
3.1 减少磁盘IO
MapReduce
:基于磁盘,计算结果放到磁盘中Spark
: 基于内存(尽量把临时数据缓存到内存)
3.2 增加并行度:
MapReduce
:MapTask ReduceTask
一个进程一个Task
(默认)spark
:ShuffleMapTask ResultTask
使用的是一个线程
3.3避免重复计算:
可以把数据强制持久化到内存中,以供其他的task
使用。
3.4 可选的shuffle和排序
可选的shuffle
:
MapReduce
:提供一种通用的shuffleCombiner Partitioner sorter
,shuffle
的策略是一个固定的套路,如果设置了combiner
会执行Combiner
,如果设置的ReduceTask
的个数超过1,那么Partitioner
就会执行数据的分区;如果有reducer
节段的话,那么sorter
的数据排序就一定会执行。
Spark
:提供了四重shuffle
策略,分别适用不同的场景;HashShuffle
,SortShuffle
可选的排序:MapReduce
:如果有reducer
节段的话,那么sorter
的数据排序就一定会执行;
Spark
:用户指定执行,否则不排序;
3.5 灵活的内存管理策略
要多少给多少,可以合理的分配到底哪个阶段哦,哪个组件,使用多少。MapReduce
:MapTask JVM
在启动的时候就指定了最多能使用多少内存,如果超出就OOM
Spark
:worker
启动了很多个进程executo
r,每个executor
并发运行多个线程,每个线程执行一个程序;
每个executor
和每一个task
都会指定固定的内存大小去使用,如果excutor
的内存固定,task
的内存也有上限,也可能出现OOM,但是spark
的任务线程,出来能使用JVM的内存之外,还可以使用操作系统的内存。
4 Spark的编程
1.获取编程入口SparkContext
SqlContext/HiveContext
StreamingContext
2.通过编程入口加载数据RDD
DataFrame
DataSet
3.对数据进行处理得到结果
各种算子(80个)
4.对结果进行处理
测试:打印
线上:存储到各种数据存储地(文件系统+数据库)
5.关闭编程入口