《Spark Streaming实时流式大数据处理实战》 ——3 Spark编程模型

举报
华章计算机 发表于 2020/02/22 14:56:35 2020/02/22
【摘要】 本节书摘来自华章计算机《Spark Streaming实时流式大数据处理实战》 —— 书中第3章,第3.1节,作者是肖力涛 。

第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的内部存储结构。


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。