1. Spark在Hadoop生态体系中的作用
- hdfs:文件存储
- zookeeper:节点协调
- mapreduce/hive:计算,其中hive是为了解决mapreduce编程复杂的问题
- hbase:实时增删改查
- storm:流处理
- mahout :机器学习
- 其他工具
而Spark的出现就是为了解决MapReduce计算缓慢的问题:
- Spark 需要替换掉Hadoop生态体系中计算部分:
1.1 能计算实施批处理 mapreduce RDD
1.2 交互式查询 hbase - Spark SQL
1.3 流式处理 storm - Spark streaming
1.4 图计算 Spark GraphX
1.5 机器学习 mahout -MLlib
1.6 科学计算,数据分析 SparkR
- 对于Hadoop生态体系中的其他成员保留:
2.1 继续使用zookeeper管理节点
2.2 继续使用HDFS,HBase作为数据存储功能
Spark在Hadoop生态体系中的作用
2. Spark相对于Hadoop做的优化
2.1 减少磁盘IO
- MapReduce:基于磁盘(所有计算结果都会去到磁盘),对于多个MapRuduce合作,会造成平凡的磁盘IO
- Spark:基于内存,所有的Task计算结果都尽量放在内存
2.2 增加并行度
- MapReduce:启动的MapTask和ReduceTake是一个JVM进程,默认情况下是一个Task一个进程
- Spark:ShuffleMapTask和ResultTask使用的是一个线程
2.3 避免重复计算
- Spark可以把数据持久化到内存中,以供其他Task使用。
2.4可选的Shuffle和排序
- 可选的shuffle:
- Map Reduce提供的是一个通用的shuffle的策略:1. 如果设置了Combiner执行Combiner;2. 如果设置的Reduce Task个数超过一, 那么Partitioner就会执行数据的分区;3. 如果有Reduce阶段的话,执行Sorter数据排序。
- Spark提供了四种shuffle策略,分别对应不同的需求场景:Hash Shuffle,SortShuffle等
- 可选的排序:
- MapReduc:如果有Reduce阶段的话,那么Sorter的数据排序就一定会执行
- Spark:用户想指定排序就排序,否则不排序
2.5 灵活的内存管理策略
Spark可以对不同阶段,不同组建,对内存灵活配置。
- MapReduce:MapTask JVM线程在启动的时候指定了内存的最大使用量。
- Spark:worker(从节点)启动了多个executor,每个executor并发运行了很多个线程thread,每个线程thread执行一个任务。而且Spark的任务线程,除了能使用JVM的内存之外,还可以使用操作系统的内存。