谈下spark和hadoop

Spark及其生态圈概述

1.Spark 产生背景:面对Hadoop中MapReduce框架的局限性和框架的多样化特点,使得spark诞生。Spark的产生源于Matei Zaharia博士的论文------An Architecture for Fast and General Data。

框架的局限性主要由4个方面:

1)代码繁琐(需要自己定义Map类和Reduce类以及在main方法的配置)。

2)只支持Map和Reduce方法。

3)执行效率低下,Map阶段的数据写入到磁盘和Reduce阶段从磁盘上读取数据,MapReduce中间数据的交互都是通过磁盘完成的,无行中增加了数据读取时间。

4)不适合迭代多次、交互式、流式的处理,对于机器学习和数据挖掘是不方便的。

框架的多样化主要体现在3个方面:

1)批处理(离线):由MapReduce、Hive、Pig完成。

2)流式处理(实时):由Storm、JStorm完成。

3)交互式计算:由Impala完成。对于不同的业务场景,需要借助于不同的业务框架,使得运维成本增加。

2.Spark概述和特点1.速度很快,对内存上的数据,运行在Spark上的应用程序与Hadoop的MapReduce相比快100个数量级,对于磁盘上的数据,快10个数量级。

谈下spark和hadoop

之所以运行速度快的原因是因为:

1)Spark是基于内存的计算框架,这就使得读取更方便。

2)Apache提供了个更高级的DAG(有向无环图)的执行引擎,这个引擎能够支持数据流的处理和内存的数据计算。

3)Hadoop的Map作业和Reduce作业是以进程的方式运行的,启动和销毁需要一定的开销,对于Spark而言,它的作业是基于线程的,作业的执行和销毁在线程池进行,使得作业的开销少。

4)易用性,首先能够支持Java、ScalaPython和R语言多种语言开发,其次,提供了超过80个的高级别计算API,使得更加容易的构建应用程序,而且可以启动交互式的命令行的方式来执行。

5)通用性:能够联合SQL、streaming(交互式流处理)和复杂的分析操作,在spark之上还有MLlib(machine learning)、GraphX(graph),实现在一个应用程序里面各个框架的无缝对接。

 

6)运行模式:spark可以运行在hadoop、Mesos、standalone或者云端,可以访问HDFS、Cassandra、HBase和S3多种数据源。

谈下spark和hadoop

谈下spark和hadoop

3.Spark发展历史:

2009 年由Matei Zaharia在加州大学柏克莱分校AMPLab 开创,并于2010年开源。

2013 年 6 月,该项目被捐赠给Apache 软件基金会。

2014年发布了1.0版本并支持SQL、ML和GraphX。

2015年提出了DataFrames、Tungsten以及ML pipelines的操作。

2016年7月正式发布了2.0版本。

 谈下spark和hadoop

4. 对于Spark的官方调查

1)Spark应用领域,在软件方面,包括Saas、Web和mobile,IT咨询方面、银行金融方面、教育领域、医疗、运输、电信行业、广告、销售、市场等等。

2)Spark在业务场景方面:68%用于BI、有52%方面用于数据处理,44%用于推荐等。

3)对于Spark的关注点,有91%的人看中了Spark的性能。

4)对于环境部署方面,80%人运行在yarn上。使得数据科学家和工程师能够协同工作。

5. Spark和Hadoop的对比:

Hadoop生态系统:

对于Hadoop生态系统来说:最下面是Hadoop的分布式文件系统HDFS,用来存储文件和数据,在HDFS之上有分布式资源管理和调度的yarn和分布式计算框架yarn,在yarn之上有Facebook开源的用来解决海量结构化日志数据统计的方案,构建在Hadoop之上的数据仓库,使用HDFS进行数据的存储,使用MapReduce进行数据的计算,R语言用于完成数据的统计工作,Mahout目的是快速的构建高可用和可扩展的机器学习环境,pig功能跟hive功能类似,Oozie是一个工作流引擎,方便作业管理。左边Zookeeper是分布式协调式服务,Sqoop是分布式交换服务。最右边是HBase是构建在HDFS之上的分布式列式存储系统,适用于海量数据的查询和处理。

谈下spark和hadoop

对于Spark生态系统来说:(BDAS:Berkeley Data Analytics Stack)

最下面是mesos是一个分布式管理框架,Tachyon是分布式基于内存的存储系统,之上是spark,在往上是在MLlib用来支持机器学习的、GraphX用来支持图表的、spark streaming用来支持流式计算的,Spark SQL 用来支持数据查询和处理的。

 谈下spark和hadoop

1)Hadoop与Spark系统生态圈对比:对于批处理而言,在Hadoop中,可以使用MapReduce,在Spark中可以使用RDD来进行操作,对于SQL查询来说,在Hadoop中可以使用Hadoop,在Spark中可以使用Spark SQL,对与流式处理来说,在Hadoop中可以使用Kafka对接Storm,在Spark中使用Spark Streaming,在机器学习方面,Hadoop中使用Mahout,在Spark中使用MLlib。

2)Mapreduce和Spark对比:

对于mapreduce而言,首先从HDFS把数据读进来,把结果处理完以后再放到HDFS中,下一个作业继续从HDFS中读出来,依次类推,数据间共享只能借助与HDFS完成。对于spark而言,数据处理完放在内存中,下一个作业直接从内存中读取数据,对序列换化和磁盘网络的开销是很有帮助的。