Spark比Hadoop快的主要原因:在内存核算战略和先进的DAG调度等机制的协助下,Spark能够用更快速度处理一样的数据集。
1.spark基于内存、消除了冗余的HDFS读写
MapReduce在每次执行时都要从磁盘读取数据,计算完毕后都要把数据存放到磁盘上。 Hadoop每次shuffle(分区合并排序等……)操作后,必须写到磁盘,而Spark是基于内存的。Spark在shuffle后不一定落盘,可以cache到内存中,以便迭代时使用。如果操作复杂,很多的shufle操作,那么Hadoop的读写IO时间会大大增加。少磁盘IO操作
2.DAG优化操作、消除了冗余的MapReduce阶段
Hadoop的shuffle操作一定连着完整的MapReduce操作,冗余繁琐。map-reduce-map-reduce-map-reduce。而Spark基于RDD提供了丰富的算子操作,DAG调度等机制。它可以把整个执行过程做一个图,然后进行优化。DAG引擎有向无环图,shuffle过程中避免不必要的sort操作、 且reduce操作产生shuffle数据,可以缓存在内存中。
3.JVM的优化、Task启动(线程池)
Spark Task的启动时间快。Spark 使用多线程池模型来减少task启动开稍、Spark采用fork线程的方式,Spark每次MapReduce操作是基于线程的。Spark的Executor是启动一次JVM,内存的Task操作是在线程池内线程复用的。而Hadoop采用创建新的进程的方式,启动一个Task便会启动一次JVM。每次启动JVM的时间可能就需要几秒甚至十几秒,那么当Task多了,这个时间Hadoop不知道比Spark慢了多少。
这道题出得真好