【面试题】简述一下MapReduce和Spark的区别与联系

1)从功能上来说,MapReduce能够完成的各种离线批处理功能,以及常见算法(比如二次排序、TopN等),基于Spark RDD的核心编程都可以实现,而且是更好地、更容易地实现。

2)从速度上来说,基于Spark RDD编写的离线批处理程序,运行速度是MapReduce的数倍,速度上有非常明显的优势,毕竟Spark是基于内存进行计算的,当然也有部分计算基于磁盘,比如Shuffle,但是其大量Transformation操作,比如单纯的map或者filter等操作可以直接基于内存进行pipeline操作,速度性能自然大大提升。而MapReduce因为计算模型过于死板(必须是map-reduce模式),有时候即使完成一些诸如过滤之类的操作,也必须经过map-reduce过程,这样就必须经过Shuffle过程。而恰恰MapReduce的Shuffle过程又是最消耗性能的,因为Shuffle中间的过程必须基于磁盘来读写。

3)从运行方面来说,Spark也有其劣势。由于Spark是基于内存进行计算,虽然开发容易,但是真正面对大数据的时候(比如一次操作针对10亿以上级别),在没有进行调优的情况下,可能会出现各种各样的问题,比如OOM内存溢出等等,导致Spark程序可能都无法完全运行起来就报错挂掉了。但是,MapReduce即使运行缓慢,但是至少可以慢慢运行完。

4)从完善程度来说,Spark由于是新崛起的技术新秀,因此在大数据领域的完善程度不如MapReduce,比如基于HBase、Hive作为离线批处理程序的输入输出,Spark就远没有MapReduce来的完善,实现起来比较麻烦。虽然如此,但是Spark提供了Spark RDD、Spark SQL、Spark Streaming、Spark MLlib、Spark GraphX等技术组件,可以一站式地完成大数据领域的离线批处理、交互式查询、流式计算、机器学习、图计算等常见的任务,所以具有超强的通用性。

你可能感兴趣的:(Hadoop,Spark)