在网上摘取的一些关于两者的对比,待增加。。
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、对于迭代式数据处理性能比较差