spark官网地址:http://spark.apache.org/
1、什么是spark?
1)、spark是2008年诞生于加州大学伯克利分校AMP实验室开发的通用大数据框架。2010年开源,2013年6月成为apache孵化项目,2014年2月成为apache顶级项目。
2)、spark是一种快速、通用、可扩展的大数据分析引擎。
3)、spark是用scala进行编写的框架,为了更好学习spark,需要先学习scala多范式编程语言。
官方定义:
翻译过来:apache spark是用于大规模数据(large-scala data)处理的统一(unified)分析引擎。
2、spark四大特点
spark使用scala语言进行实现,它是一种面向对象、函数式编程语言。
它能够像操作本地集合一样轻松的操作分布式数据集。
spark具有运行速度快、易于使用、通用性强、随处可运行 四大特点。
2.1、速度快(speed)
由于spark支持内存计算,并且使用DAG(有向无环图)执行引擎支持无环数据流,所以官方宣称其在内存中的运算速度要比hadoop的MapReduce快100倍,在硬盘中要快10倍。
那么spark和MapReduce相比,为什么速度要快?
1)、spark处理数据时,可以将中间处理结果数据存储到内存中。
2)、spark job调度以DAG方式,并且每个任务Task执行以线程(Thread)方式,并不是像MapReduce以进程(Process)方式执行。
注:什么是有向无环图(DAG)?
如上图,图1是有向树、图2是DAG有向无环、图3是有向图。它们都是一种数据结构。
如果一个有向图无法从任意顶点出发,经过若干条边回到该点,则这个图就是有向无环图。
如上图,4612是一条路径,465是一条路径,并且图中不存在从顶点经过若干条边后能回到该点。
在spark中,有向无环图的连贯关系被用来表达RDD之间的依赖关系,其中顶点表示RDD、以及产生该RDD的操作算子,有方向的边表示算子之间的相互转化。
2.2、易于使用(Ease of use)
spark支持java、scala、python、R语言和SQL语言在内的多种语言
2.3、通用性强(generality)
在spark的基础上,spark还提供Spark SQL(结构化数据处理)、spark Streaming(流式任务处理)、MLlib(机器学习算法库)、Graph(提供图形和图形并行化计算)
我们可以在一个应用中无缝的使用这些工具库
2.4、随处可运行(Runs Everywhere)
spark支持多种运行方式,包括在hadoop和mesos上,也支持standalone的独立运行模式,同时也可以运行在云kubernetes(spark2.3开始支持)上。
3、spark的运行模式
spark框架编写的应用程序可以运行在本地模式、集群模式、云服务,方便我们开发、测试和生产部署。
3.1、本地模式(Local Mode)
将spark应用程序中任务Task运行在一个本地JVM process进程中,通常开发测试使用。
3.2、集群模式(Cluster Mode)
将spark应用程序运行在集群上。比如:Hadoop Yarn集群、Standalone(spark自带集群)、Apache Mesos集群
1)、yarn集群模式:一般生产环境使用,将spark应用运行在yarn集群之上,由yarn负责资源管理,spark负责任务调度和计算。
好处是:计算资源按需伸缩,集群利用率高,共享底层存储,避免数据跨集群迁移。
2)、standalone集群模式:开发测试以及生产环境使用,类似yarn架构,典型的master/slave模式,使用zookeeper搭建高可用,避免master单点故障问题。
3)、mesos集群模式:国内使用较少,运行在mesos资源管理器框架之上,由mesos负责资源管理,spark负责任务调度和计算。
3.3、云服务:Kubernetes模式
spark2.3支持将spark应用运行在k8s上