零基础入门 Spark
吴磊
前 FreeWheel 机器学习研发经理
19171 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 38 讲
零基础入门 Spark
15
15
1.0x
00:00/00:00
登录|注册

02 | RDD与编程模型:延迟计算是怎么回事?

你好,我是吴磊。
在上一讲,我们一起开发了一个 Word Count 小应用,并把它敲入到 spark-shell 中去执行。Word Count 的计算步骤非常简单,首先是读取数据源,然后是做分词,最后做分组计数、并把词频最高的几个词汇打印到屏幕上。
如果你也动手实践了这个示例,你可能会发现,在 spark-shell 的 REPL 里,所有代码都是立即返回、瞬间就执行完毕了,相比之下,只有最后一行代码,花了好长时间才在屏幕上打印出 the、Spark、a、and 和 of 这几个单词。
针对这个现象,你可能会觉得很奇怪:“读取数据源、分组计数应该是最耗时的步骤,为什么它们瞬间就返回了呢?打印单词应该是瞬间的事,为什么这一步反而是最耗时的呢?”要解答这个疑惑,我们还是得从 RDD 说起。

什么是 RDD

为什么非要从 RDD 说起呢?首先,RDD 是构建 Spark 分布式内存计算引擎的基石,很多 Spark 核心概念与核心组件,如 DAG 和调度系统都衍生自 RDD。因此,深入理解 RDD 有利于你更全面、系统地学习 Spark 的工作原理。
其次,尽管 RDD API 使用频率越来越低,绝大多数人也都已经习惯于 DataFrame 和 Dataset API,但是,无论采用哪种 API 或是哪种开发语言,你的应用在 Spark 内部最终都会转化为 RDD 之上的分布式计算。换句话说,如果你想要对 Spark 作业有更好的把握,前提是你要对 RDD 足够了解。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文通过一个生动的薯片制作故事,深入介绍了RDD(弹性分布式数据集)在Spark分布式内存计算引擎中的重要性。首先对比了RDD和数组的特点,阐述了RDD的活动范围、数据定位等方面的不同之处。随后详细介绍了RDD的四大属性:数据分片、分片切割规则、RDD依赖和转换函数,并通过薯片制作的流程形象地解释了这些属性。强调了RDD作为Spark分布式计算引擎的基石,无论采用何种API或开发语言,应用在Spark内部最终都会转化为基于RDD的分布式计算。最后,提到了进一步了解RDD的编程模型和延迟计算的重要性,指导读者如何进行代码实现,并避免在实现业务逻辑时埋下性能隐患。通过本文的阅读,读者可以快速了解RDD的重要性及其在Spark分布式内存计算引擎中的应用,为进一步学习Spark提供了基础知识。文章内容生动有趣,通过薯片制作的故事引人入胜,让读者更好地理解了RDD的属性和在Spark中的应用。同时,通过对RDD编程模型和延迟计算的讲解,为读者提供了实际的编程指导和性能优化建议。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《零基础入门 Spark》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(16)

  • 最新
  • 精选
  • cfwseven
    作者大大能说一下,为什么action算子要设置成延迟计算吗

    作者回复: 好问题~ 严谨的说,不是要把action算子设置成延迟计算,而是Spark在实现上,选择了Lazy evaluation这种计算模式。 TensorFlow同样也采用了类似的计算模式。这种模式有什么好处、或者说收益呢? 我的理解是:优化空间。 和Eager evaluation不一样,lazy evaluation先构建计算图,等都构建完了,在付诸执行。这样一来,中间就可以打个时间差,引擎有足够的时间和空间,对用户代码做优化,从而让应用的执行性能在用户无感知的情况下,做到最好。 换个角度说,引擎选择lazy evaluation,其实是注重“用户体验”(开发者)的一种态度~

    2021-10-27
    3
    32
  • GAC·DU
    从两者的整体流程来看,结果都是不可逆的,但是WordCount可以设置Cache和Checkpoint,方便加速访问和故障修复,而土豆加工流程却不可以。土豆加工流程是DAG的概图。

    作者回复: Perfect~

    2021-09-13
    20
  • 怎样知道程序里哪个算子最耗时,现在薯片生产速度很慢,我想知道最耗时生产环节是哪个(清洗,切割,还是烘烤)?

    作者回复: 好问题,不过老弟这是典型的单机思维,为什么这么说呢? 在过程编程里面,清洗、切割、烘烤,是独立的操作,各自耗时不同,确实可以计算出来,不同环节的耗时。 但是在Spark里面,我们基本上没有办法区分这些不同操作的独立耗时。 1)一方面是,在分布式环境中,某一个操作的耗时,需要看全局节点的统计值,而不是某个机器上的执行时间 2)再者,在Spark里面,同一个Stage里面的操作,比如这里的清洗、切割还有烘烤,他们其实会被Whole Stage Code Generation优化为一份代码,在这一份代码里面,不会在区分这些不同的操作了,所以对于他们各自的执行时间,更是无从计算了。老弟可以重点关注后面课程部分的调度系统和Tungsten优化,来熟悉这些细节。 实际上,在Spark里面,我们往往不会特别关注某种操作的耗时,而主要是关注哪里是Shuffle,哪里有数据集频繁访问、扫描的现象,这些才是Spark主要的性能瓶颈

    2022-01-13
    3
    12
  • 燃料喷射器
    从两者不同点看,workdcount切切实实为延迟计算,而土豆工坊的流程为切实发生的。

    作者回复: 很棒的视角~ 一个是延迟计算(Lazy evaluation),一个是“及早求值”(Early evaluation)

    2021-09-16
    2
    5
  • zx
    计算wordcount的时候文件路径写错了,但是却是在reduceByKey这一步报错,这步并不是action算子,这是和partitions属性有关吗

    作者回复: 和partitions属性无关哈~ 不过,在reduceByKey抛异常,倒是有点意思,这说明Spark在这个环节,检查了文件路径并报错。不过,检查路径不代表trigger执行哈,真正的触发执行,还是要等到Action那一步~

    2021-11-01
    4
  • welldo
    "我们再来看 RDD 的 partitioner 属性,这个属性定义了把原始数据集切割成数据分片的切割规则。在土豆工坊的例子中,“带泥土豆”RDD 的切割规则是随机拿取,也就是从麻袋中随机拿取一颗脏兮兮的土豆放到流水线上。后面的食材形态,如“干净土豆”、“土豆片”和“即食薯片”,则沿用了“带泥土豆”RDD 的切割规则。换句话说,后续的这些 RDD,分别继承了前一个 RDD 的 partitioner 属性。" ----------------------- 老师, 看完这段话和土豆流水线的图片, 我有几个疑问. 1. rdd分为<value>类型和<key,value>类型,数据分区方式只作用于<Key,Value>形式的数据。 并且刚开始没有任何分区方式,直到遇到包含shuffle的算子时,才会使用“分区方式”,比如hash分区。 问题1:那么,一坨数据,在成为<key,value>类型的rdd的时候(假如4片),分片方式,是不是平均分成4份呢? 2. <value>类型的rdd,没有分区器,那么它刚刚生成的时候,也是平均分吗?

    作者回复: 任何一个分布式数据集,RDD也好、DataFrame、Dataset也好,都是有分区、并行度、分区器这些个概念的哈,跟是否Shuffle没有关系 Shuffle只是改变了原始数据集的分区方式,而已。 对于HDFS、S3上的分布式数据集,原始的分区数,或者说并行度,就是HDFS、S3中文件原始的分区数,二者一致。 对于那些在Driver端读的单机文件、或是创建的数据集,可以人为指定分区数(并行度),比如parallelize。 总之,不管是哪类数据,数据集一旦进入Spark,是一定有并行度、分区数这个概念的,哪怕并行度是1。 老弟还要好好消化一下这些“土豆”啊,哈哈~

    2021-10-14
    3
    4
  • LJK
    Action中漏了一个reduce,今天才注意到reduceByKey是transformation而reduce是action

    作者回复: 是的,感谢提醒~

    2021-09-18
    4
  • 田大侠
    作者大大有个问题问一下 这里的依赖关系有个比较明显的差别 1.map计算是一个数据分片依赖于前一个RDD“数据分片”,就是说在同一个分片上可以连续计算直到reduce之前 2.reduce计算是依赖关系前面一个RDD的所有的数据集 spark实际计算的时候要等前面所有的map计算完成才能进行reduce操作 上面的我的两个理解是否有偏差?

    作者回复: 理解的非常到位,没有任何问题~ 满分💯

    2022-02-19
    2
  • Eazow
    请问土豆工坊图是用什么画滴那?

    作者回复: draw.io,有在线版,也有APP~

    2021-11-24
    2
  • xuchuan
    都是来料加工,目标都是高效率生产。

    作者回复: 赞👍,正解~

    2021-10-17
收起评论
显示
设置
留言
16
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部