spark与mr的异同
1.
MR:抽象层次低,需要使用手工代码来完成程序编写,使用上难以上手;
Spark:Spark 采用RDD 计算模型,简单容易上手。
2.
MR:只提供map 和reduce 两个操作,表达能力欠缺;
Spark:Spark 采用更加丰富的算子模型,包括map、flatmap、groupbykey、reducebykey 等;
3.
MR:一个job 只能包含map 和reduce 两个阶段,复杂的任务需要包含很多个job,这些job 之间的管理以来需要开发者自己进行管理;
Spark:Spark 中一个job 可以包含多个转换操作,在调度时可以生成多个stage,而且如果多个map 操作的分区不变,是可以放在同一个task 里面去执行;
4.
MR:中间结果存放在hdfs 中;
Spark:Spark 的中间结果一般存在内存中,只有当内存不够了,才会存入本地磁盘,而不是hdfs;
5.
MR:只有等到所有的map task 执行完毕后才能执行reduce task;
Spark:Spark 中分区相同的转换构成流水线在一个task 中执行,分区不同的需要进行shuffle 操作,被划分成不同的stage 需要等待前面的stage 执行完才能执行。
6.
MR:只适合batch 批处理,时延高,对于交互式处理和实时处理支持不够;
Spark:Spark streaming 可以将流拆成时间间隔的batch 进行处理,实时计算。