Spark性能调优实战
吴磊
FreeWheel机器学习团队负责人
立即订阅
1001 人已学习
课程目录
已更新 6 讲 / 共 32 讲
0/4登录后,你可以任选4讲全文学习。
课前必学 (3讲)
开篇词 | Spark性能调优,你该掌握这些“套路”
免费
01 | 性能调优的必要性:Spark本身就很快,为啥还需要我调优?
02 | 性能调优的本质:调优的手段五花八门,该从哪里入手?
原理篇 (3讲)
03 | RDD:为什么你必须要理解弹性分布式数据集?
04 | DAG与流水线:到底啥叫“内存计算”?
05 | 调度系统:“数据不动代码动”到底是什么意思?
Spark性能调优实战
15
15
1.0x
00:00/00:00
登录|注册

03 | RDD:为什么你必须要理解弹性分布式数据集?

吴磊 2021-03-19
你好,我是吴磊。
从今天开始,我们进入原理篇的学习。我会以性能调优为导向,给你详细讲讲 Spark 中的核心概念 RDD 和 DAG,以及重要组件调度系统、存储系统和内存管理。这节课,咱们先来说说 RDD。
RDD 可以说是 Spark 中最基础的概念了,使用 Spark 的开发者想必对 RDD 都不陌生,甚至提起 RDD,你的耳朵可能都已经听出茧子了。不过,随着 Spark 开发 API 的演进和发展,现在上手开发基本都是 DataFrame 或 Dataset API。所以很多初学者会认为,“反正 RDD API 基本都没人用了,我也没必要弄明白 RDD 到底是什么。”
真的是这样的吗?当然不是。

RDD 为何如此重要

首先,RDD 作为 Spark 对于分布式数据模型的抽象,是构建 Spark 分布式内存计算引擎的基石。很多 Spark 核心概念与核心组件,如 DAG 和调度系统都衍生自 RDD。因此,深入理解 RDD 有利于你更全面、系统地学习 Spark 的工作原理。
其次,尽管 RDD API 使用频率越来越低,绝大多数人也都已经习惯于 DataFrame 和 Dataset API,但是,无论采用哪种 API 或是哪种开发语言,你的应用在 Spark 内部最终都会转化为 RDD 之上的分布式计算。换句话说,如果你想要在运行时判断应用的性能瓶颈,前提是你要对 RDD 足够了解。还记得吗?定位性能瓶颈是 Spark 性能调优的第一步。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《Spark性能调优实战》,如需阅读全部文章,
请订阅文章所属专栏
立即订阅
登录 后留言

精选留言(5)

  • Shockang
    RDD的5大特性总结起来就是:3个列表,2个函数。3个列表是分区列表,依赖列表和优先位置列表;2个函数就是:计算函数和分区函数。我这样总结是为了方便记忆的,分享给大家!

    作者回复: 不错的技巧~

    2021-03-19
    11
  • joan
    preferredLocations不起作用的场景有一种是存算分离的场景,计算节点在k8s集群里,远程读取分布式文件系统,例如hdfs或者ceph等,可能接入万兆SDN网络能够有一些收益

    作者回复: 正解~

    2021-03-23
  • zxk
    preferredLocations,作业尽可能在在数据所在节点上运行,或者同个机架下等情况,都可以提升 I/O 效率。
    当数据不管落在哪个节点,都需要从远端拉取数据时,这时候作用可能就不是那么大。

    作者回复: 正解,能举例说明吗?

    2021-03-20
    2
  • L3nvy
    1. “单机模式”,不知道算不算。不知道Spark可以开多线程触发action算子,同时提交多个不相关的作业,Spark UI同时运行的job拉满 : )。之前代码都是按面向过程的思维一步一步写的。
    2. 处理数据源的时候,jdbc,读取本地文件不起作用

    作者回复: 1. 算的,非常好的单机思维案例,凡是上来就面向过程,把分布式数据集rdd、dataframe、dataset当成普通单机变量的,都是单机思维的一种表现。不停的调action,我怀疑是想迫切地看到计算结果,忽略了action会触发dag回溯。

    2.没错!通过jdbc远程访问db通常没办法保证本地性,沿着计算和存储分离的思路,再想一想,还有其他案例吗?

    2021-03-19
  • 老A
    preferredLocations 不起作用,应该在数据源是单节点情况,比如socket数据源,还有就是读取hdfs的数据块比较小不足一个split分片128M的情况,还有就是大的压缩数据块,比如snappy压缩,这种压缩不支持切分的情况。

    作者回复: 这块确实有点难,因为我们还没讲到调度系统,也还没细讲locality。再想一想,沿着计算和存储物理分离的思路哈~

    2021-03-19
收起评论
5
返回
顶部