Spark与Hadoop的比较
Spark是一种分布式计算框架,对标Hadoop的MapReduce;MapReduce适用于离线批处理(处理延迟在分钟级)而Spark既可以做离线批处理,也可以做实时处理(SparkStreaming)
①Spark集批处理、实时流处理、交互式查询、机器学习与图计算一体
②Spark实现了一种分布式的内存抽象,称为弹性分布式数据集;RDD允许用户在执行多个查询时显式地将工作集缓存在内存中,后续的查询能够重用工作集,极大提升了查询速度。
一个Hadoop的Job通常经过以下几个步骤:
①从HDFS中读取输入数据
②在Map阶段使用用户定义的mapper function,然后将结果spill到磁盘
③在Reduce阶段从各个处于Map阶段的机器读取Map计算的中间结果,使用用户自定义的reduce function,通常最后把结果写回HDFS
Hadoop的问题在于,一个Hadoop Job会进行多次磁盘读写,比如写入机器本地磁盘,或是写入分布式文件系统中(这个过程包含磁盘的读写以及网络传输)。考虑到磁盘读取比内存读取慢了几个数量级,所以像Hadoop这样高度依赖磁盘读写的架构就一定会有性能瓶颈;而且有些场景比如一些迭代性质的算法(逻辑回归)会重复利用某些Job的结果,导致触发重新计算带来大量的磁盘I/O。
Spark没有像Hadoop那样使用磁盘读写,而转用性能高得多的内存存储输入数据、处理中间结果和存储中间结果。在大数据的场景中,很多计算都有循环往复的特点,像Spark这样允许在内存中缓存写入输出,上一个Job的结果马上被下一个使用,性能自然比Hadoop Map Reduce好的多。