一.Spark是什么
Spark是一种快速,通用,可扩展的大数据分析引擎。2009年诞生于加州大学伯克利分校AMPLab,2010年开源,2013年6月成为apache孵化项目。2014年成为apache顶级项目。
目前,Spark生态系统已发展成为一个包含多个子项目的生态系统,他的子项目包括:
1.Spark SQL
2.Spark Streaming
3.GraphX
4.MLLib
Spark是基于内存计算的大数据并行计算框架(大数据计算引擎)
Spark是基于内存的开源大数据处理框架
二. Spark的特点
1.快
与Hadoop的MapReduce相比,Spark基于内存的运算要快100倍以上,基于硬盘的计算也要快10倍以上。Spark实现了高效的DAG执行引擎,可以通过基于内存来高效处理数据流。
2.易用性
支持java,scala,python,R四种语言的API,且支持交互式的python和Scala的shell。
3.通用性
一站式解决方案,离线处理,实时处理(Streaming)sql
提供了统一的解决方案,可以用于批处理,交互式查询(Spark sql),实时流处理(Spark streaming),机器学习(Spark MLlib),图计算(graphX).这些不同类型的处理都可以在同一应用中无缝使用
4.兼容性高
Spark可以使用Yarn和apache mesos作为他的资源管理和调度器,并且可以处理所有Hadoop支持的数据,包括hdfs,hbase,cassandra等。Spark也可以不使用第三方的资源管理和调度器,它实现了Standalone作为其内置的资源管理和调度框架
三.Spark和Hadoop的比较
MapReduce:
读–处理–写磁盘 读–处理–写 两步计算,磁盘存储
Spark:
读–处理–处理–(需要的时候写磁盘)–写 多步计算,内存存储
Spark是在借鉴了MapReduce基础之上发展而来的,其继承了分布式计算的优点并改进了MapReduce明显的缺陷。
Spark和Hadoop的区别:
首先,Spark把中间数据放到内存中,迭代运算效率高,而MapReduce中间计算结果需要落地,保存到磁盘上,这样势必会影响整体速度。而Spark支持DAG图的分布式并行计算的编程框架,减少了迭代过程中数据的落地,提高了效率。(延迟加载)
其次,Spark容错性高。Spark引进了弹性分布式数据集RDD(Resilient Distributed Dataset)的抽象,它是分布在一组节点中的只读集合,这些集合是弹性的,如果数据集一部分丢失,则可以根据“血统”(即允许基于数据衍生过程)对他们进行重建。另外在RDD计算时可以通过CheckPoint来实现容错。
最后,Spark更加通用。MapReduce中提供了map和reduce两种操作,Spark提供的数据操作类型有很多,大致分为:Transformations和Actions两大类。Transformations包括map,filter,flatMap,ample,groupByKey,reduceByKey,union,join,cogroup,mapValues,sort等多种操作类型。Actions包括collect,reduce,lookUp和sava等操作。
Spark支持的开发语言更多,包括Scala,Java,Python,R四种语言。
总结:Spark是MapReduce的替代方案,而且兼容HDFS,Hive,可容入Hadoop的生态系统,以弥补mapredece的不足。