《Spark Streaming实时流式大数据处理实战》 ——3 Spark编程模型
第3章 Spark编程模型
通过前面章节的学习,我们已经能够自己开发Spark程序,并部署到自己的集群上运行。这个过程很有趣,但是我们看到的只是表面的东西,以及Spark最后运行的结果,其内部的运行机制和原理我们并不清楚。
为了更好地进行Spark Streaming的实战演练,本章从Spark编程原理出发,一步步探寻,并最终对Spark Streaming的运行机制和原理进行了解和掌握,为后续的Spark Streaming实战打下基础。
3.1 RDD概述
对于大量的数据,Spark在内部保存计算的时候,都是用一种叫做弹性分布式数据集(Resilient Distributed Datasets,RDD)的数据结构来保存的,所有的运算以及操作都建立在RDD数据结构的基础之上。
在Spark开山之作Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing这篇paper中(以下简称RDD Paper),Matei等人提出了RDD这种数据结构,文中开头对RDD的定义是:
A distributed memory abstraction that lets programmers perform in-memory computations on large clusters in a fault-tolerant manner.
也就是说RDD设计的核心点为:
* 内存计算;
* 适合于计算机集群;
* 有容错方式。
论文中阐述了设计RDD的难点在于如何提供有效的容错机制(Fault tolerance efficiently)。在以往的设计中,会将内存进行集群抽象,比如分布式共享内存、键值存储(Redis)和数据库等,这种方式是细粒度(fine-grained)的更新一个可变状态,相应的容错方式也需要进行机器间的数据复制和日志传输,这会加大网络开销和机器负担。
而RDD则使用了粗粒度的(coarse-grained)转换,即对于很多相同的数据项使用同一种操作(如map、filter、join)。这种方式能够通过记录RDD之间的转换从而刻画RDD的继承关系(lineage),而不是真实的数据,最终构成一个DAG(有向无环图),这种结构使得当发生RDD丢失时,能够利用上下图中的信息从其祖辈RDD中重新计算得到。下面详细介绍RDD的内部存储结构。
- 点赞
- 收藏
- 关注作者
评论(0)