原文来自我的个人网站:http://www.itrensheng.com/archives/Spark_basic_knowledge
一. Spark出现的背景
在Spark出现之前,大数据计算引擎主要是MapReduce。HDFS + MapReduce的组合几乎可以实现所有的大数据应用场景。MR框架抽象程度比较高,需要我们编写Map和Reduce两个步骤(MapReduce 框架其实包含5 个步骤:Map、Sort、Combine、Shuffle以及Reduce)
每个Map和Reduce之间需要进行Shuffle(这步操作会涉及数量巨大的网络传输,需要耗费大量的时间)。由于 MapReduce 的框架限制,一个 MapReduce 任务只能包含一次 Map 和一次 Reduce,计算完成之后,MapReduce会将运算中间结果写回到磁盘中,供下次计算使用。
二.Spark简介
Spark是由加州大学伯克利分校AMP实验室开源的分布式大规模数据处理通用引擎,具有高吞吐、低延时、通用易扩展、高容错等特点。Spark内部提供了丰富的开发库,集成了数据分析引擎Spark SQL、图计算框架GraphX、机器学习库MLlib、流计算引擎Spark Streaming
相比于MapReduce的计算模型,Spark是将数据一直缓存在内存中,直到计算得到最后的结果,再将结果写入到磁盘,所以多次运算的情况下,Spark省略了多次磁盘IO。
对比 | MapReduce | Spark |
---|---|---|
速度 | 处理数据需要连续的读写磁盘 | 是MapReduce的10到100倍 |
编码难度 | 程序员来赋值每一步 | RDD高可用,失败重试 |
及时性 | 不适合做OLAP,只适合批处理 | 能兼顾批处理和OLAP |
调度 | 使用外部的调度,如Oozie | 自带调度,也可使用外部调度 |
编程语言 | Java | Scala |
SQL支持 | 本身不提供,需要外部查询引擎,如Hive | 自带Spark SQL |
可扩展性 | 最大支持14000个节点 | 最大8000节点 |
机器学习 | 外部依赖Mahout | 自带Spark MLlib |
缓存 | 能不缓存到内存中 | 可以缓存到内存中 |
安全性 | 安全特性比Spark广泛 | 不如MapReduc |