大数据改变了世界,spark改变了大数据!
Spark是一个快速的、通用的处理大数据的引擎。
Spark以内存运行时,速度比hadoop的mapreduce要快100多倍,以磁盘运行,也要快10多倍;
Spark支持java、scala、python、R和sql开发,有超过80个高层次的操作来使得并行开发更加容易。建议只使用java或scala,spark2.0以后对python的支持不是很好,优化性能的一些api并不支持python。
Spark整合了sql、streaming和复杂分析(机器学习和图计算),安装了一个spark,相当于批处理、实时流、在线分析、离线分析、机器学习、图计算一次性全部搞定了。
Spark可以运行在任何地方。
在Spark出现之前,大数据生态圈的开发过程是这样的:
比如,有这么一个大数据服务支撑平台,选择使用hadoop平台,最底层是HDFS平台,在HDFS之上有一个YARN资源调度框架;
在此之外,还需要一些框架来支持我们做一些批处理分析,于是Hadoop里自带了一个计算框架:MapReduce;
但是,我们在使用MapReduce框架去分析处理一些业务需求的时候,就需要程序员去写JAVA代码,对于部分程序员来说,编写JAVA代码来做MapReduce开发是没有问题的,但对于很多数据分析人员、领导也要去分析一些数据的时候,让他们去写JAVA代码,就不是一朝一夕能够掌握的,所以紧接着就出现了一个新的工具:Hive
Hive:通过Hive写sql语句(或者用Pig),把sql转换为Mapreduce代码去Hadoop平台上执行,试想一下,这个世界上的程序员当中,是会写sql语句的人多呢?还是会写java代码的人多呢?很明显,会写sql语句的人更多。有了Hive这个工具 ,一下子把大数据平台的开发难度就降低了。
Hive通过解析引擎把sql转换为Mapreduce代码,Mapreduce代码再提交到Yarn上运行,在Yarn的调度下去分析HDFS上的数据。
无论是Hive还是Mapreduce,底层跑的都是Mapreduce的代码,与之类似的还有一个工具叫pig,Pig和Hive只是语法不一样,它们都有自己的一套语言,都会转换成为mapreduce去执行。
1、通过Hive写sql语句(或者用Pig),把sql转换为Mapreduce代码去Yarn运行,Yarn来分析hadoop平台上的数据
2、Mapreduce直接操作hadoop,则需要程序员写java代码,不会写java,也可以通过hive来写sql进行操作map reduce
3、Mapreduce:基于磁盘的多次迭代的计算框架:
Map把结果写到磁盘
通过网络复制到reduce端的磁盘
再复制结果到磁盘
可能会有几十上百个的MapReduce,多次的磁盘和网络的复制操作,导致mapreduce很慢,不适合实时监控系统;
以上适用于一些批处理作业、高延迟的作业,这是我们在生产环境中常见的一类应用。后来有了一些需要实时处理的项目,如:淘宝双11,大厅里有一幅图,实时监控几点到几点的交易额有多少,到了100亿的时候是几点。这一类的应用就是实时流的项目。
4、解决方案:
传统意义上唯一的流处理引擎组件就是Storm,它可以做到毫秒级的实时处理;
5、使用Hbase做数据库
也就是说,在spark出现以前要架构一套大数据平台,可能包括的平台有hadoop的hdfs、yarn、mapreduce、Hive、pig、storm,处理出来的结果可能会放在另外一个数据库里:Hbase;
在Spark出现之后,大数据生态圈的开发过程是这样的:
Spark最底层有一个叫做spark core的组件,类似mapreduce的开发,我们称作spark core的开发,Spark Core里面底层的代码吸收了mapreduce框架的所有优点,但它又比mapreduce更优秀、更快:
mapreduce多次把中间结果迭代到磁盘上面,spark也有类似于mapreduce这样的操作,但是它把它的中间结果写入内存进行迭代,肯定比在磁盘里迭代更快;spark有向无环图的(DAG)执行流程,可以自动优化整个迭代过程。
更灵活:
mapreduce里只有两个操作,要么map、要么reduce,spark Core里有超过80个类似map reduce这样的操作。
Spark是如何架构的呢?
1、 最底层就是spark core,类似于以前大数据平台里的mapreduce,与前面所说的map reduce需要程序员写java代码一样,Spark Core也需要写scala或java代码来操作;
2、 不会写scala/Java代码也可以操作spark core,那就是spark sql,spark sql非常强大,它几乎拥有hive有的所有功能,hive没有的它也有;可以简单认为spark sql对应于Hive或pig,同样也可以写sql语句,转换成spark core的代码;
3、 由于spark core比mapreduce快,所以spark sql更快,spark sql远远不止是写sql语句这么简单,包括了DataFrame、DataSet等比较优秀的东西;
4、 spark streaming对应storm,是spark的实时处理项目,但实际上,到目前为止,无论是Apache的Flink(阿里封装成了Blink),还是Google贡献给Apache的Beam,都在将微批处理和流处理集成到一起,批流一体几乎成了一种趋势,因此spark也不甘示弱,在微批处理引擎spark streaming的基础上,又增加了structured streaming,把实时处理延迟级别从秒级提高到了毫秒级。
spark sql和spark streaming、structured streaming的底层都是跑spark core的东西,spark之所以牛,牛在什么地方呢?spark sql和spark streaming是可以互相转换的。无论是有限集的批处理还是无限集的流处理、图计算还是机器学习,数据模型都是可以互相无缝转换,底层都是基于spark core的rdd(弹性分布式数据集)。
Spark的4大特点:
快速:
Spark Core里面底层的代码吸收了mapreduce框架的所有优点,更快:mapreduce使用写入磁盘进行迭代,而spark core则是写入内存进行迭代
通用性:
以前大数据处理平台,需要安装:HDFS、YARN、Hive、Storm等
现在只要安装一个spark就可以了,以前所需要的这些功能,只是里面的一个jar包而已。
也就是说,安装了一个spark,批处理、实时流、在线分析、离线分析、机器学习、图计算,一次性全部搞定。
Spark处理的数据在绝大多数应用场景中,还是来自hdfs,所以spark和hadoop还是分不开。