Spark基本工作原理和RDD特性

1.spark的基本工作原理

1. 迭代式计算:

Spark与MapReduce最大的不用在于其迭代式计算模型:

  1. MapReduce,分为两个阶段,map和reduce,两个阶段完成,就结束了。所以我们在一个job里能做的处理很有限,只能在map和reduce里处理数据。
  2. Spark,迭代式计算模型,可以分为n个阶段,因为它是内存迭代式的。我们在处理完一个阶段以后,可以继续往下处理很多阶段,而不是只有两个阶段。所以,Spark相较于MapReduce来说,计算模型可以提供更强大的功能。


    image.png

2. 分布式

整个Spark有个提交程序的客户端,提交给集群,集群中有很多台机器,作业运行在分布式节点上的,Spark程序提交到集群运行,节点一般处理一部分数据,分布式作并行化。

3. 主要基于内存(少数情况基于磁盘)

RDD的每个partition,在spark节点上存储时,默认都是放在内存中的。但是如果说内存放不了这么多数据时,比如每个节点最多放5万数据,结果每个partition是10万数据。那么就会把partition中的部分数据写入磁盘中,进行保存。而这一切,对于用户来说,都是完全透明的。也就是说,不用管去管RDD的数据存储在哪,内存,还是磁盘。只要关注的是RDD的计算,处理等操作。所以说,RDD的这种自动进行内存和磁盘之间权衡和切换的机制,就是RDD的弹性特点所在。

2.RDD以及其特点

1.RDD是Spark提供的核心抽象,全程Resillient Distributed Dataset ,即弹性分布式数据集。
2.RDD在抽象上来说是一种元素集合,包含了数据。它是被分区的,分为多个分区,每个分区分布在集群中的不同节点上,从而让RDD中的数据可以被并行操作(分布式数据集)。一个RDD是分布式的,它被分成多个分区partition,多分区散落在spark集群中的不同节点上。
3.RDD通常通过Hadoop上的文件,即HDFS文件或者Hive表来进行创建。有时也可以通过应用程序中的集合来创造。
4.RDD最重要的特性就是,提供了容错性,可以自动从节点失败中恢复过来。即如果某个节点上RDD的partition,因为节点故障,导致数据丢失了,那么RDD会自动通过自己的数据来源从新计算该partition。这一切对使用者都是透明的。
5.RDD的数据默认情况下存放在内存中,但是在内存资源不足时,spark会自动将RDD数据写入磁盘中,这就是RDD的弹性特征。


image.png

3.Spark的核心编程

1,定义初始的RDD,就是说,要定义第一个RDD是从哪里来,读取数据,有HDFS、Linux本地文件、程序中的集合。
2.定义对RDD的计算操作,这个spark里称之为算子,map、reduce、flatmap、groupByKey等,比MapReduce提供的map和reduce强大的太多。
3.循环第二步操作,第一个计算完了以后,数据可能就会到来新的一批节点上,变成一个新的RDD,然后再次反复,针对新的RDD定义计算操作。
4.最后,就是获取最终的数据,将数据保存起来。

你可能感兴趣的:(Spark基本工作原理和RDD特性)