&">nbsp; Spark是一个由加州大学伯克利分校(UC Berkeley AMP)开发的一个分布式数据快速分析项目。它的核心技术是弹性分布式数据集(Resilient distributed datasets),提供了比Hadoop更加丰富的MapReduce模型,可以快速在内存中对数据集进行多次迭代,来支持复杂的数据挖掘算法和图计算算法。
Spark使用Scala开发,使用Mesos作为底层的调度框架,可以和 hadoop和Ec2紧密集成,直接读取hdfs或S3的文件进行计算并把结果写回hdfs或S3,是Hadoop和Amazon云计算生态圈的一部分。Spark是一个小巧玲珑的项目,项目的core部分的代码只有63个Scala文件,充分体现了精简之美。
Spark 之依赖
Map Reduce模型:作为一个分布式计算框架,Spark采用了MapReduce模型。在它身上,Google的Map Reduce和Hadoop的痕迹很重,很明显,它并非一个大的创新,
而是微创新。在基础理念不变的
前提下,它借鉴,模仿并依赖了先辈,加入了一点改进,极大的提升了MapReduce的效率。函数式编程:Spark由Scala写就,而支持的语言亦是Scala。其原因之一就是Scala支持函数式编程。这一来造就了Spark的代码简洁,二来使得基于Spark开发的程序,也特别的简洁。一次完整的MapReduce,Hadoop中需要创建一个Mapper类和Reduce 类,而Spark只需要创建相应的一个map函数和reduce函数即可,代码量大大降低。Mesos:Spark将分布式运行的需要考虑的事情,都交给了Mesos,自己不Care,这也是它代码能够精简的原因之一。HDFS和S3:Spark支持2种
分布式存储系统:HDFS和S3。应该算是目前最主流的两种了。对文件系统的读取和写入功能是Spark自己提供的,
借助Mesos分布式实现。
Spark 与Hadoop的对比
Spark的中间数据放到内存中,对于迭代运算效率更高。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来提高可用性。