在网上摘取的一些关于两者的对比,待增加。。

spark

Spark是小数据集上处理复杂迭代的交互系统,并不擅长大数据集,也没有稳定性。

但是最近的风评已经变化,尤其是14年10月他们完成了Peta sort的实验,这标志着Spark越来越接近替代Hadoop MapReduce了。

Hadoop

Hadoop包括Yarn和HDFS以及MapReduce,说Spark代替Hadoop应该说是代替MapReduce。

hadoop mr 的算法是要做data shuffle,同时需要把需要计算的数据从hdfs 多次读出写入。

原生语言:hadoop-JAVA,Spark-scala

评注:虽然可以实现接口,但原生的语言就是好用,如果某人痛恨java,Spark给你一条生路。

计算模型:hadoop-MapReduce,Spark-DAG(有向无环图)

评注:经常有人说Spark就是内存版的MapReduce,实际上不是的。Spark使用的DAG计算模型可以有效的减少Map和Reduce人物之间传递的数据,尤其适合反复迭代的机器学习场景。而Hadoop则更擅长批处理。不过Tez也是使用的DAG计算模型,他也是Hadoop,明眼人都知道DAG计算模型比MR更好。

存储:hadoop-HDFS, Spark-RDD,HDFS

评注:spark既可以仅用内存存储,也可以在HDFS上存储,即使Spark在HDFS上存储,DAG计算模型在迭代计算上还是比MR的更有效率。

我并不觉得这两个及系统又大多的矛盾,只不过Spark一直宣称比hadoop快而已。实际上从应用场景上区分,Hadoop更适合做批处理,而Spark更适合做需要反复迭代的机器学习。

Spark的提出很大程度上是为了解决MapReduce在处理迭代算法上的缺陷。

Spark解决这一问题的方法是提供了一个更强大的primitive数据抽象模型--RDD(Resilient Distributed Datasets),

并定义了一系列转化(map,filter,sample,...)和分布式操作(reduce,collect,count...)。

hadoop的不足和局限:

1、抽象层次低,需要手工编写代码来完成,使用难以上手;

2、一个Job只有哦Map和Reduce两个阶段,复杂的计算需要大量的Job来完成,Job之间的依赖关系是由开发者自己管理的;

3、处理逻辑隐藏在代码细节中,没有整体逻辑;

4、中间结果也放在HDFS文件中;

5、时延高,只试用Batch数据处理,对于交互式数据处理、试试数据处理的支持不够;

6、对于迭代式数据处理性能比较差