-
(1)MapReduce:分布式的计算分析引擎
MR:分布式计算引擎,处理大规模的数据,主要是用于批处理操作,离线计算操作 1 - 执行效率比较低 2 - API 相对比较底层,开发效率比较慢 3 - 迭代计算非常的不方便 什么是迭代计算呢? 简单来说,在执行过程中,整个的计算任务需要划分为多个阶段,每一个阶段需要依赖于上一个阶段的执行结果,一个阶段一个阶段的进行运行,我们可以将这样的计算过程称为迭代计算
正因为MR存在这样的弊端,在一些场景中,更加希望能够有一款计算引擎执行效率更加高效,能够更好的支持迭代计算操作,也能够更加方便的使用,同时还能够处理大规模的数据,我们的spark 其实就是在这样的背景下,逐步产生出来。
Apache Spark 是一款用于处理大规模数据的分布式计算分析引擎,基于内存计算,整个Spark的核心数据结构为RDD
RDD :弹性的分布式数据集,目前将其理解为就是一个庞大的容器,整个计算都是在这个容器中完成的。
Apache Spark 最早是来源于加州伯克利分校发布一篇论文产生的,后期将其贡献给Apache,目前也是apache 旗下顶级开源项目。官方网站:spark.apache.org
整个spark 主要是基于scala语言编写的
为什么说Spark的程序运行效率快呢?
原因一:spark提供了一种全新的数据结构:RDD
通过这个数据结构,让分布试计算引擎在运算的时候可以基于内存来计算,同时能更好的进行迭代计算操作,对于MR来说,主要是基于磁盘来计算,而且是进行迭代计算的操作,需要将多个MR进行串联操作,执行效率比较低
原因二:Spark 基于线程来运行的,而MR是基于进程运行的
线程的启动和销毁的速度,要高于进程的启动和销毁的
Spark是一个分布式计算的引擎,PySpark是一个python的库,专门用于通过python语言来操作spark的python库
Spark的特点:
(1)运行速度快
原因一:基于内存运行,采用DAG(有向无环图)进行计算操作,可以将中间的结果优先保存到内存;如果内存不足也会存储到磁盘。
原因二:基于线程运行,线程的启动和销毁优于进程
Spark认为,如果基于内存,比MR快100倍;即使基于磁盘运行,也会快10倍。
(2)易用性
原因一:spark提供多种语言的客户端,可以基于多种语言来开发spark程序:Python、sql、scala、java、R
目前主推 python 和 SQL
原因二:spark 提供了更加高阶的API,而且这些API在不同的语言上,基本都是一样的。大大降低了程序员的学习成本。
(3)通用性
Spark 提供了多种组件,用于满足各种场景的处理工作
Spark core: spark 的核心库 学习spark的基础
主要是用于放置spark的核心API,内存管理的API 包括维护RDD的数据结构
Spark SQL: 通过SQL的方式来操作spark 计算框架,最为重要
Struct Streaming: 结构化流 基于Spark SQL之上的组件,用于进行流式计算(实时计算)
Spark streaming:Spark 的流式计算的框架,主要是用来进行流式计算操作(实时计算)
目前不使用,整个实时部分主要是基于Flink
Spark MLlib: Spark 的机器学习库,主要是包含一些机器学习的相关内容,比如说回归聚类。。(针对特定人群)
Spark graphx:Spark的图计算,比如说:地区的路程规划(针对特定人群)
(4)随处运行
原因一:编写的Spark程序可以运行在不同的资源调度平台上:local、yarn、spark集群 、云上调度平台
原因二:Spark 程序可以和大数据的生态圈中各种软件进行集成,便于方便的使用Spark来对接不同的软件
整个Spark集群内部数据通信的框架基于netty(通信框架)
网友评论