Spark系列之二——一个高效的分布式计算系统

时间:2022-01-17 03:29:30

1、什么是Spark?

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

2、Spark的架构?

    Bagel(Pregel on Spark)              Shark(Hive on Spark)          Streaming Spark

 

                                                    Spark

 

    Map Reduce                                        RDD                                            FP

 

    本地运行模式 独立运行模式                    EC2  Mesos                               YARN

 

    HDFS                Amazon S3, Hypertable, HBase, etc

3、Spark与Hadoop的对比?

    Spark的中间数据放到内存中,对于迭代运算效率更高。

        Spark更适合于迭代运算比较多的ML和DM运算。因为在Spark里面,有RDD的抽象概念。

    Spark比Hadoop更通用。

        Spark提供的数据集操作类型有很多种,不想Hadoop只提供了Map和Reduce两种操作。比如map, filter, flatMap,sample,groupByKey,union,join,cogroup,mapValues,sort,pationBy等多种操作类型,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来提高可用性。

4、Spark与Hadoop的结合?

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

5、Spark的适用场景?

    Spark是给予内存的迭代计算框架,适用于需要多次操作特定数据集的应用场合。需要反复操作的次数越多,所需去读的数据量越大,受益越大,数据量小但是计算密度较大的场合,受益就相对较小。

    由于RDD的特性,Spark不适用哪种异步细粒度更新状态的应用,例如web服务的存储或者是增量的爬虫和索引。就是对于那种增量修改该的应用模型不适合。

    总的来说Spark的使用面比较广泛且比较通用。

6、运行模式?

    本地模式

    Standalone模式

    Mesoes模式

    yarn模式

7、Spark生态系统?

    Shark(Hive on Spark):Shark基本上就是在Spark的框架基础上提供和Hive一样的HiveQL命令接口,为了最大程度的保持和Hive的兼容性,Shark使用了Hive的API来实现query Parsing和Logic Plan generation,最后的PhysicalPlan execution阶段用Spark代替Hadoop MapReduce。通过配置Shark参数,Shark可以自动在内存中混村特定的RDD,实现数据重用,进而加快特定数据集的检索。同时,Shark通过UDF用户自定义函数实现特定的数据分析学习算法,使得SQL数据查询和运算分析能结合在一起,最大化RDD的重复使用。

    Spark streaming:构建在Spark上处理Stream数据的框架,基本的原理是将Stream数据分成小的时间片段(几秒),以类似batch批量处理的方式来处理这小部分数据。Spark Streaming构建在Spark上,一方面是因为Spark的低延迟执行引擎(100ms+)可以用于实时计算,另一方面相比于基于Record的其他处理框架(如Storm),RDD数据集更容易做高效的容错处理。此外小批量处理的方式使得它可以同时兼容批量和实时数据处理的逻辑和算法。方便了一些需要历史数据和实时数据联合分析的特定应用场合。

    Bagel:Pregel on Spark,可以用Spark进行图计算,这是个非常有用的小项目。Bagel自带了一个例子,实现了Google的PageRank算法。

8、在业界的使用?

    Spark项目在2009年启动,2010年开园,现在使用的有:Berkeley,Princeton,Klout,Foursquare,Conviva,Quantifind,Yahoo! Research &others,淘宝等,豆瓣也在使用Spark的Python克隆版Dpark。

9、Spark核心概念?

    Resilient Distributed Dataset(RDD)弹性分布数据集

        RDD是Spark的最基本抽象,是对分布式内存的抽象使用,是吸纳了以操作本地集合的方式来操作分布式数据集的抽象实现。RDD是Spark最核心的东西,它表示已被分区,不可变的并能够被并行操作的数据结合,不同的数据集格式对应不同的RDD实现。RDD必须是可序列化的。RDD可以cache到内存中,每次对RDD数据集的操作之后的结果,都可以存放到内存中,下一个操作可以直接从内存中输入,省去了MapReduce大量的磁盘IO操作。这对于迭代运算比较常见的机器学习算法,交互式数据挖掘来说,效率提升比较大。