同期文章:
HDFS知识系统(知其然,知其所以然) – (juejin.cn)
一文了解MapReduce的宿世今生 – (juejin.cn)
Hive与Hbase,傻傻分不清 – (juejin.cn)
一、spark是什么
Spark是一个开源的大数据处理结构,由UC Berkeley AMP Lab开发,于2010年开源。它运用内存进行核算,能够对大量数据进行高速的流式处理。
要点来了,Spark运用了相似MapReduce的概念,但功用比MapReduce高很多。
事实上,spark的含义,火花,命名来历我觉得可能便是由于开发者无法忍受自己这么牛逼的人得受限于mapreduce这么慢的核算速度,才开发出这个像火花相同速度十分快的核算组件。
二、spark为什么呈现
1. MapReduce存在的问题
在大数据的时代降临之际,如何处理海量的数据是咱们一起面对的难题。
企业和组织纷繁加入了大数据的浪潮,期望从数据中挖掘出名贵的信息,以做出更正确的决议计划。但是,这些数据量庞大、多样化的数据集却让传统的数据处理工具感到力不从心。
后来MapReduce呈现了。MapReduce在分布式核算方面做得很好,也切实解决了一些大数据核算难题。但有个问题:它的核算模型对迭代式的算法支撑不行友爱。
但是在机器学习、图核算等范畴,迭代是一种十分遍及的模式,但是MapReduce每次都需要将中心成果写入磁盘,这使得迭代变得适当低效。
现在,数据的高速发展需要一个一个更快、更灵活、更简略运用的数据处理结构。这个解决方案不仅仅要能够处理大规划数据集,还要能够很好地支撑迭代式算法。
这时,Apache Spark闪亮上台。Spark采用了内存核算的思想,将中心成果存储在内存中,防止了频繁的磁盘读写,大大提高了处理速度。
当然这样的内存开支也造成了内存资源越发珍贵。
所以,咱们完全能够以为,spark是针对MapReduce的改善。
2、spark相对于MapReduce的改善
Spark在功用、功用、易用性等多方面做了改善,供给了一个更强大、通用的大数据处理结构。
- 功用上的改善
Spark根据内存核算,能够缓存数据到内存中,防止每次都从磁盘读取数据,而且Spark有更高效的DAG履行引擎, 功用比MapReduce高10-100倍。
- 支撑更多的数据处理场景
MapReduce更适合批处理和一遍读写的场景。而Spark供给了Spark SQL、Spark Streaming、GraphX、MLlib等组件,能够支撑批处理、流式处理、迭代算法、图核算、机器学习等多种数据处理场景。
- 供给更易用的API
Spark供给了比MapReduce更高级、更易用的API,如DataFrames、DataSet等,降低了编程复杂度。
- 更好的兼容性
Spark能够经过Spark on YARN很好地与其他大数据技能栈(如Hadoop)兼容共享资源。
- 对开发者更友爱
Spark运用Scala等言语开发,这些言语对开发者更友爱。并供给了丰富的高级API。
3. 具体的数据对比
以下经过一个具体的数据对比来体现Spark相比MapReduce的功用提升:
场景:对1TB规划的文本数据进行WordCount统计
履行环境:
- 硬件标准:CPU 24核,内存256GB,网卡千兆
- 软件标准:Hadoop 2.7.2,Spark 2.3.1
测验成果:
测验项目 | MapReduce | Spark |
---|---|---|
运转时刻 | 1605秒 | 54秒 |
CPU平均运用率 | 96% | 78% |
内存运用率 | 27% | 68% |
调度次数 | 24次 | 1次 |
读写HDFS次数 | 24次 | 2次 |
剖析:
-
运转时刻:Spark比MapReduce快了近30倍,Spark运用内存运算大大提升了处理速度。
-
CPU运用率:MapReduce CPU运用接近满,Spark还有空闲能够承载更多工作。
-
内存运用率:Spark运用内存缓存提高运算速度,内存运用率高。
-
调度&读写HDFS次数:MapReduce的多次调度和读写HDFS是其低效的首要原因。
三、Spark的架构
1. 一个中心RDD
Spark RDD(弹性分布式数据集)是Spark中一个中心的概念。
RDD是Spark对分布式数据的基本笼统,它代表一个不可变、可分区、里边的元素可并行核算的调集。首要特征包含:
-
分区:RDD按照分区存储,每个分区的数据在履行时都是在一个节点上核算的。
-
只读:RDD是只读的,对RDD的修改得到的实际上是一个新的RDD。
-
来历:RDD可能来自HDFS文件,另一个RDD的转化,或许HDFS输出等。
-
核算:RDD的核算经过确定性的操作(transformations)表示,这些操作会生成一个新RDD。
-
持久化:RDD能够被缓存在内存中,用于提高重用效率。
-
容错:RDD的分区能够重新核算,供给了容错才能。
-
依靠:RDD之间存在依靠关系,RDD的履行依靠底层的RDD。
RDD的特色使得Spark能够高效地对分布式数据进行并行核算。开发人员首要需要对RDD进行转化操作,而Spark结构会担任底层的调度、容错、依靠办理等工作,然后简化了分布式核算程序的开发。因此RDD是Spark简略易用且高效的来历。
2.多个组件
- Spark Core
Spark Core包含了Spark的基本功用,如使命调度、内存办理、过错恢复、与存储系统交互等模块。Spark Core 中最基本的笼统是弹性分布式数据集(RDD)。
- Spark SQL
Spark SQL能够看作是Spark对结构化数据的支撑。它供给了一个编程笼统叫做DataFrame,而且能够经过SQL或许 HiveQL进行查询。Spark SQL供给高功用的复杂剖析。
- Spark Streaming
Spark Streaming用来处理实时流数据,内部运用微批次(micro-batch)的办法来对流数据进行处理。
- MLlib
MLlib是Spark供给的机器学习算法库,包含分类、回归、聚类、协同过滤等算法。
- GraphX
GraphX 是Spark对图核算的支撑,供给了图(vertex)和边(edge)的笼统,并支撑图上的迭代核算。
3. 数据处理流程
Spark以编程办法经过转化和举动来定义核算,DAG图担任履行计划的生成,整个履行过程完全由Spark结构主动办理。
graph LR
A[读取数据源] -->B[创立RDD]
B --> C[RDD转化]
C --> D[RDD举动]
D --> E[输出成果]
A-->F[缓存RDD]
F-->C
B-->G[DAG图]
C-->G
D-->G
G-->H[使命调度]
H-->I[使命履行]
I-->E
-
Spark从数据源中读取数据,创立初始的RDD。
-
经过RDD的转化操作(transformations),得到新的RDD。转化是延迟履行的。
-
对RDD进行举动操作(actions),触发作业履行,并输出成果。
-
RDD能够经过persist()办法缓存,防止重核算。
-
转化和举动操作构成DAG履行图,提交给DAGScheduler进行使命调度。
-
DAGScheduler生成履行计划,提交给TaskScheduler进行使命调度。
-
Spark Executor履行使命并回来成果。