什么是Spark?
Spark是一个分布式计算引擎,2009年诞生于UC伯克利的AMPLab,2010年开源并于2013年成为Apache顶级项目。
Spark具有如下特点:
1.快速
DAG框架
Spark采用的是DAG框架,DAG是在MapReduce框架基础上演化而来。
对于一些复杂的数据处理,比如有多个Reduce Stage,MapReduce框架中一个Reduce前面必须要有一个Map(Map-Reduce-Map-Reduce...),不能多个Reduce级联处理,这样会导致处理过程中会增加很多冗余的Map阶段,即使Map不做任何数据处理(读取HDFS数据直接输出),但是这个过程耗费了很多时间和资源。
DAG框架可以任意的组合Map/Reduce的算子(如Map-Reduce-Reduce),更加灵活更快速。
如Tez(Tez也是DAG)文档里面有例子说明,详见https://cwiki.apache.org/confluence/display/Hive/Hive+on+Tez, 其中以一个TPC-DS的例子进行了说明。
MapReduce是多进程模型,虽然可以更细粒度控制task占用的资源,但是JVM启动会消耗更多的时间,Spark则采用的是多线程模型,task启动快,不同的task可以共享内存;
Spark可以对RDD数据集进行cache,对迭代计算很友好更快速
Spark的性能优化项目Tungsten Project(https://www.slideshare.net/databricks/spark-performance-whats-next) ,对计算过程中的内存管理/CPU缓存友好等方面进行了很多优化。如WholeStageCodeGen,对火山模型(Volcano Model)进行了优化,减少了函数调用等。
2.易用
支持SQL/Scala/Java/Python/R语言
算子丰富
用户可以将算子进行组合完成数据处理,如wordcount ,只需要写几行代码,相对于MapReduce实现Map和Reduce要简单很多。