Spark原理 | 初学Spark

什么是Spark?
Spark是一个分布式计算引擎,2009年诞生于UC伯克利的AMPLab,2010年开源并于2013年成为Apache顶级项目。

image

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要简单很多。

猜你喜欢

转载自my.oschina.net/u/3611008/blog/2962261