百度脑图链接:
spark对比hadoop的优势
hadoop | spark | |
速度 | 中间结果存放在hdfs上 | 中间数据存在内存里,内存放不下会存在本地,不会存在hdfs上 |
reduceTask需要等mapTask全部结束后才执行 | 相同分区的转换构成流水线,放在同一个task中运行。 分区不同的转换中间需要shuffle,放在不同的stage中,需要等前面的stage完成 | |
时延高,只适合batch操作。 对于交互式数据操作和实时处理支持不足。 | 时延低,可以处理micro batch操作 | |
对迭代式数据处理性能比较差 | 在内存中缓存数据,提高迭代式计算的性能 | |
编程模型 | 抽象层次低,需要手工编写代码来完成计算,使用上难易上手 | 基于RDD的抽象,使数据逻辑处理的代码非常简短。 |
只提供两个操作:Map和Reduce,欠缺表达力。 | 提供很多转换和动作,很多基本操作,如join、groupBy等。 | |
一个job只有map和reduce两个阶段,复杂的计算需要大量job来完成,job之间的依赖关系是由开发者自己管理的。 | 一个job可以包含多个RDD转换操作,在调度时可以生成多个stage。如果多个map操作的RDD分区不变,可以放在同一个task中运行。 | |
处理逻辑隐藏在代码细节中,没有整体逻辑。 | 在Scala中,通过匿名函数和高阶函数,RDD的转换操作支持流式API,可以提供处理逻辑的整体视图,代码不包含具体的操作实现细节,逻辑更清晰。 | |
Spark的适用场景:
Spar'k是基于内存的迭代计算框架,适用于需要多次操作特定数据的应用场景,需要反复操作的次数越多,受益越大。
不适用场景:
1、数据量小,但是计算密度较大的场景;
2、因为RDD的不可变性,Spark不适用于异步细粒度更新状态的应用场景,例如Web服务的存储,或者是增量的web爬虫和索引,即,不支持增量修改的应用模型。
参考文档
1、Spark:一个高效的分布式计算系统(1):http://developer.51cto.com/art/201309/410276.htm