Spark-01 spark简介

前言:大牛说由spark入手比较合适

1.spark简介

        spark是个计算框架,不存东西。MapReduce是Hadoop里面做计算的,也不存东西,出现比spark早,自从spark活跃起来后mc的很多程序就被重写为spark程序了。spark的api使用起来也比较简单。

  spark起源于2009年加州大学伯克利分校的实验室,20年成为开源项目,2014年就变成了apache的顶级项目。这里用spark2.3.

2,spark与MapReduce(mc)的比较

2-1 优缺点比较

  yarn、Mapreduce、hdfs是hadoop的三大组件,mapreduce计算框架有如下缺点:

  a.可编程性差。有很多模板代码,每写一次都要重复模板代码。

       b.缺乏通用的计算引擎。例如:现在设计一个大数据平台,需要它可以离线计算、流处理,机器学习。方案一:用hadoop做离线计算、storm流处理、tensorflow做机器学习;方案二:只用spark,因为spark这三种都有。那么我们很容易选择方案二。当然了,大公司可能都用,但是那是因为历史原因,以前只有mc,现在也暂时换不了全部的spark。

        c.计算速度慢。一个问题,是基于磁盘计算快还是内存快?当然是内存,内存比磁盘快几十倍。mc计算过程会存磁盘,spark会优先使用内存进行计算,内存不足的情况下才会选用磁盘。

总之,作为mc的后来者,spark提供了相当的便利性,代码差不多只有mc的1/10(例子是官网的wordCount程序)。

  spark是一个通用的计算引擎。批处理,交互式分析、流处理、机器学习、图计算都是ojbk的。storm比sparksteamnig延迟小,如果延迟性要求大的话用storm是对的。

  2014年的排序比赛如下,我们后续调优时也是考虑下面这些,数据量,计算节点,cpu核心数,内存大小等等。

  

2-2设计思想

       spark还是继承了mc的优点的,比如说Hadoop的架构设计思想就是数据不动代码动,计算处理应该移动到数据所在位置。spark继承了这一设计思想,在此之上提供了内存计算、执行计划等优化。

  ps:

  代码不动数据动:无论是做java也好安卓也好都是把数据从库里面抓出来计算,处理结果展示到界面。代码没动,动的是数据。

  数据不动代码动:100个T的数据就不能上面这么做了,抓100个T的数据到内存里面算java就oom了。数量太大,从一个磁盘拷贝过去另一个太费时间,把几个k的代码发送到数据所在那里就快很多了,hadoop和spark都是这种思想。当然了,数据不动代码动复杂度提高了。我那么多个节点分别计算,可是我最后要一起排序,这就是带来复杂度的原因。代码怎么发到数据处,spark和mc都会帮你干。

  与mapreduce不同,Spark的每个job不局限于两个stage(阶段),可以有任意的stage。spark不是将复杂算法分成多个job,而在job中包含多个stages,使得spark可以进行更多优化,例如最小化shuffle数据以及磁盘IO。

2-3 spark工具栈

  sparkCore类似于j2se,上面的四个箱子类似于4个基于j2se做的框架。上面四个框架是用的最多的,但是底层用的都是sparkCore的东西。

  a.sparkCore:spark的主要执行引擎,spark的所有功能都基于这个引擎,它提供了spark的主要功能,比如任务的调度,内存管理、故障恢复和处理存储。

  b.sparkSQL:处理结构化数据,通过SQL和Hive查询语言(HQL)查询数据。

  c.sparkStreaming:流处理,用于处理流数据。

  d.MLib:提供了机器学习算法,如分类、聚类和协同过滤。

  e.GraphX:图计算,可以操作像社交网络中包含的关系图。

猜你喜欢

转载自www.cnblogs.com/daysn/p/11365826.html