Spark原理(一)

Point 1:什么是Spark?
Spark是UC Berkeley AMP lab所开源的类Hadoop MapReduce的通用的并行计算框架,Spark基于map reduce算法实现的分布式计算,拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的map reduce的算法。

Point 2:Spark架构
Spark原理(一)

Point 3:Spark和Hadoop的对比
● Spark的中间数据放到内存中,对迭代运算效率更高。(根据spark官网给出的对比测试结果,当spark所有的计算都在内存中进行时,spark要比hadoop快两个数量级100多倍;当spark计算应用到磁盘时,spark的计算速度也是hadoop的10x倍)
● Spark更适合于迭代运算比较多的ML(机器学习)和DM(数据模型)运算。因为在spark里面,有RDD的抽象概念。
● Spark比hadoop更通用:
● spark提供的数据集操作类型有很多种,不像hadoop只提供了Map和Reduce两种操作。比如:map、Filter、flatmap、sample、groupByKey、reduceByKey、union、join、cogroup、mapValues、sort、partionBy等多种操作类型,spark把这些操作称为Transformations。同时还提供Count、collect、reduce、lookup、save等多种actions操作;
这样多种多样的数据集操作类型,给开发上层应用的用户提供了方便。各个处理节点之间的通信模型不再像hadoop那样就是唯一的data Shuffle一种模式。用户可以命名,物化,控制中间结果的内存、分区等。可以说编程模型比hadoop更灵活;
不过由于RDD的特性,spark不适用那种异步细粒度更新状态的应用,例如web服务的存储或者增量的web爬虫和索引。就是对于那种增量修改的应用模型不适合。
● 容错性:在分布式数据集计算时通过checkpoint来实现容错,而checkpoint有两种方式,一个是checkpoint data,一个是logging the updates。用户可以控制采用那种方式来实现容错。
● 可用性:spark通过提供丰富的Scala、java、Python API及交互式shell来提高可用性。

Point 4:Spark与Hadoop的结合
Spark可以直接对HDFS进行数据的读写,同样支持Spark on YARN。Spark可以与MapReduce运行于同样集群中,共享存储资源与计算,数据仓库Spark SQL实现上借用hive,几乎与hive完全兼容。

Point 5:Spark的适用场景
● Spark是基于内存的迭代计算框架,适用于需要多次操作特定数据集的应用场合。需要反复操作的次数越多,所需读取的数据量越大,受益越大,数据量小但计算密度较大的场合,受益就相对较小。
● 由于RDD的特性,Spark不适用那种异步细粒度更新状态的应用。例如web服务的存储或者增量的web爬虫和索引。就是对于那种增量修改的应用模型不适合。
● 总的来说Spark的适用比较广泛且比较通用。

Point 6:Spark的运行模式
● 本地模式【local】
● Standalone模式
● Mesoes模式
● Yarn模式

Point 7:Spark生态系统
● Spark SQL(hive on spark):Spark SQL基本上就是在Spark的框架基础上提供和hive一样的HiveQL命令接口,为了最大程度的保持和Hive的兼容性,Spark SQL使用了Hive的API来实现query Parsing和Logic Plangeneration,最后的PhysicalPlan execution阶段用Spark代替hadoop MapReduce。通过配置Spark SQL参数,Spark SQL可以自动在内存中缓存特定的RDD,实现数据重用,进而加快特定数据集的检索。同时,Spark SQL通过UDF用户自定义函数实现特定的数据分析算法,使得SQL数据查询和运算分析都能结合在一起,最大化RDD的重复使用。
● Spark streaming:构建在Spark上处理stream数据的框架,基本的原理是将Stream数据分成小的时间片段,以类似batch批量处理的方式来处理这小部分数据。Spark Streaming构建在Spark上,一方面因为Spark的低延时执行引擎可以用于实时计算,另一方面相比基于Record的其他处理框架(如storm),RDD数据集更容易做高效的容错处理。此外小批量处理的方式使得它可以同时兼容批量和实时数据处理的逻辑和算法。方便了一些需要历史数据和实时数据联合分析的特定应用场合。
● MLlib:是spark对常用的机器学习的实现库,同时包括相关的测试和数据生成器。MLlib目前支持四种常见的机器学习问题:二元分类,回归,聚类以及协同过滤,同时也包括一个底层的梯度下降优化基础算法。
● Graphx:一些图的常用算法在Spark上的并行化实现,同时提供了丰富的API接口。图的并行化处理一直是一个非常热门的话题,这里头的重点有两个,一是如何将图的算法并行化,二是找到一个合适的并行化处理框架。Spark作为一个非常优秀的并行处理框架,将一些并行化的算法移到其上面就成了一个很自然的事情。最熟悉的图计算如:pageRank。

Point 8:Spark在业界的使用
Spark项目在2009年启动,2010年开源, 现在使用的有:Berkeley, Yahoo! Research & others, 京东,淘宝等