【Spark】深入浅出理解Spark工作原理
一、Spark概述
Spark是UC Berkeley AMP Lab开源的通用分布式并行计算框架,目前已成为Apache软件基金会的顶级开源项目。Spark支持多种编程语言,包括Java、Python、R和Scala,同时Spark也支持Hadoop的底层存储系统HDFS,但Spark不依赖Hadoop。
1.1 Spark与Hadoop
Spark基于Hadoop MapReduce算法实现的分布式计算,拥有Hadoop MapReduce所具有的优点,并且具有更高的运算速度。Spark能够比Hadoop运算更快,主要原因是:Hadoop在一次MapReduce运算之后,会将数据的运算结果从内存写入到磁盘中,第二次 MapReduce运算时在从磁盘中读取数据,两次对磁盘的操作,增加了多余的IO消耗;而Spark则是将数据一直缓存在内存中,运算时直接从内存读取数据,只有在必要时,才将部分数据写入到磁盘中。除此之外,Spark使用最先进的DAG(Directed Acyclic Graph, 有向无环图)调度程序、查询优化器和物理执行引擎,在处理批量处理以及处理流数据时具有较高的性能。按照Spark官网的说法,Spark相对于Hadoop而言,Spark能够达到100倍以上的运行负载。
1.2 Spark架构及生态
Spark除了Spark Core外,还有其它由多个组件组成,目前主要有四个组件:Spark SQL、Spark Streaming、MLlib、GraphX。这四个组件加上Spark Core组成了Spark的生态。通常,我们在编写一个Spark应用程序,需要用到Spark Core和其余4个组件中的至少一个。Spark的整体构架图如下图所示: