13 | 弹性分布式数据集:Spark大厦的地基(上)
该思维导图由 AI 生成,仅供参考
为什么需要新的数据抽象模型?
RDD 的定义
- 深入了解
- 翻译
- 解释
- 总结
Spark的弹性分布式数据集(RDD)是Spark的基本数据抽象,通过分布式内存的数据抽象和并行操作,大大提高了计算效率。相较于传统的MapReduce框架,RDD在数据处理效率、并行处理和容错性方面都有显著提升,使得Spark更加可靠。RDD具有复杂的结构,包括分区、Partitioner、Dependencies等组件,支持窄依赖和宽依赖,从而实现了并行处理和失败恢复。深入研究RDD的容错机制、任务执行机制以及各种转换与动作操作,将有助于更全面地理解Spark的弹性分布式数据集。同时,对于窄依赖的理解也需要进一步探讨,特别是子RDD中的一个分区是否可以对应父RDD中的若干个分区的情况。这些问题的讨论将有助于读者更好地理解和应用RDD的特性。
《大规模数据处理实战》,新⼈⾸单¥59
全部留言(34)
- 最新
- 精选
- Milittle对于思考题:需要重点理解原文中这句话: 窄依赖就是父 RDD 的分区可以一一对应到子 RDD 的分区,宽依赖就是父 RDD 的每个分区可以被多个子 RDD 的分区使用。 这句话说明了,窄依赖的父RDD必须有一个对应的子RDD,也就是说父RDD的一个分区只能被子RDD一个分区使用,但是反过来子RDD的一个分区可以使用父RDD的多个分区。那就回复今天的思考题,第一个疑问窄依赖子RDD的分区不一定只对应父RDD的一个分区,只要满足被子RDD分区利用的父RDD分区不被子RDD的其他分区利用就算窄依赖。第二个疑问其实上面已经做了回答,只有当子RDD分区依赖的父RDD分区不被其他子RDD分区依赖,这样的计算就是窄依赖,否则是宽依赖。 最后,总结以下,就是只有父RDD的分区被多个子RDD的分区利用的时候才是宽依赖,其他的情况就是窄依赖。如果有哪里理解不对的地方,请老师指正,谢谢~
作者回复: 你说的很准确!点赞
2019-05-15667 - 追梦老师,下面这句话对吗? 一个stage的所有task都执行完毕之后,会在各个节点本地的磁盘文件中写入计算中间结果,然后Driver就会调度运行下一个stage。下一个stage的task的输入数据就是上一个stage输出的中间结果。 说明:spark的中间计算结果会直接落到磁盘上的???
作者回复: 不对,Spark的中间计算结果如果没有特别指定持久化到硬盘,都会存在内存里以方便下一次调用,这也是它运行速度比MapReduce快的主要原因。
2019-05-1644 - 吟游雪人新的RDD不就是上一步的RDD计算出的结果么?为什么说是不保存计算结果?
作者回复: 不保存计算结果指的是不写入硬盘。像MapReduce中每一步中间计算结果都要写入HDFS。新的RDD是上一步RDD计算的结果,但是并没有立刻进行计算,看过下一讲就明白了,只有碰到action操作才会开始执行,而且如果没有进行特别的缓存或者持久化操作,结果只在内存中,没有被写入硬盘,所以说不保存结果。
2019-05-1634 - 一老师好!能不能请老师讲讲Spark和Flink的对比呢?这二者谁在机器学习乃至深度学习中更有优势呢?
作者回复: 你好,在第21讲我会带大家比较Spark和Flink。
2019-05-153 - Little Spirits多个父分区到一个子分区,对于任何一个父分区而言都是pipeline的所以是窄依赖,而一个父分区到多个子分区对父分区而言不是pipeline的所以是宽依赖
作者回复: 建议看一下高赞的回答,那位同学的理解要更加全面
2019-05-161 - 明翼rdd的分区不保存数据什么意思?老师可以对rdd结构再深入讲解不?我认为子rdd在窄依赖中不会对应多个父rdd,才保障单向传递
作者回复: 就是说,分区本身不会存储数据,它只是有一个指向真正存储数据位置的reference。
2019-05-151 - 涵我想还可以算做是窄依赖,因为子RDD分区所依赖的对个父RDD分区是互斥的,所以每个子RDD分区所依赖的多个父RDD分区可以被看做一组分区。父RDD的组分区与子分区是一一对应关系,满足窄依赖可以并行计算,而无需所以父分区都计算完毕才可以开始计算的特性。
作者回复: 👍🏻
2019-05-1521 - lwenbin思考题答案应该算narrow partition. 看了spark rdd论文,对老师说的这些概念有了新的认识。 narrow partition对应的转换例如:map, filter, join(子分区join key都在一个分区), union. 其中join和union就对应了老师说的子分区来自于多个父分区。 区别在于wide partition有shuffle过程,存在对于同一个父分区中两个record, 经过转换操作后会对应到两个不同的子分区,所以这些操作例如:groupByKey, 通常的join。
作者回复: 说的对。查阅paper是一个很好的学习方法,给你点赞。
2019-05-20 - hua168老师,hadoop计算框架Map/Reduce 过时了,那另一个存储框架HDFS,也过时了吗? 现在我看很多云提供商都是对象存储实现海量需求, 现在开源的分布式存储,能在生产环境使用的,用什么了,ceph?
作者回复: HDFS我认为并没有过时,现在大部分分布式计算引擎还是与HDFS存储的数据进行交互。分布式存储系统有很多比如Amazon的Dynamo DB,Facebook曾经用的HBase等等。开源的话我没有用过很多,ceph听说还不错。
2019-05-16 - 木卫六1.窄依赖是指父 RDD 的每一个分区都可以唯一对应子 RDD 中的分区,那么是否意味着子 RDD 中的一个分区只可以对应父 RDD 中的一个分区呢? 不是的,比如coalesce这种合并分区的操作中,子rdd需要依赖父rdd的若干个分区,但它不需要全部的分区,是窄依赖 2.如果子 RDD 的一个分区需要由父 RDD 中若干个分区计算得来,是否还算窄依赖? 算。只要纪录层级没发生重新分区,全局混洗,应该都属于窄依赖吧
作者回复: 正确!
2019-05-15