Spark性能调优实战
吴磊
FreeWheel机器学习团队负责人
立即订阅
1008 人已学习
课程目录
已更新 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
登录|注册

05 | 调度系统:“数据不动代码动”到底是什么意思?

吴磊 2021-03-24
你好,我是吴磊。
在日常的开发与调优工作中,为了充分利用硬件资源,我们往往需要手工调节任务并行度来提升 CPU 利用率,控制任务并行度的参数是 Spark 的配置项:spark.default.parallelism。增加并行度确实能够充分利用闲置的 CPU 线程,但是,parallelism 数值也不宜过大,过大反而会引入过多的调度开销,得不偿失。
这个调优技巧可以说是老生常谈了,网上到处都可以搜得到。那你知道为什么 parallelism 数值过大调度开销会呈指数级增长吗?调度开销具体又是指什么呢?以及,如果不想一个数值一个数值的尝试,parallelism 数值究竟该怎么设置,才能以最少的时间获得最好的效果?如果你还没有答案,或者说还没有把握答对,接下来你就要好好听我讲。
这一讲,我会通过一个机器学习案例,来和你一起聊聊调度系统是什么,它是怎么工作的,从而帮助你摆脱调优总是停留在知其然、不知其所以然的尴尬境地。

案例:对用户兴趣特征做 Label Encoding

在机器学习应用中,特征工程几乎占据了算法同学 80% 的时间和精力,毕竟,一份质量优良的训练样本限定了模型效果的上限和天花板,我们要讲的案例就来自特征工程中一个典型的处理场景:Label Encoding(标签编码)。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《Spark性能调优实战》,如需阅读全部文章,
请订阅文章所属专栏
立即订阅
登录 后留言

精选留言(6)

  • 白音
    示例中关于读文件没太理解想请教下老师。
    Source.fromFile 用于读本地文件,所以用spark读文件不是应该用 sc.textFile 来从hdfs目录读取? 或者示例的意思是在跑这段代码之前已经将模板文件分发到了集群每个executor本地吗?

    作者回复: 对,反例的情况,需要把模板文件分发到每个executors,每个executors都需要:1 读文件,建字典;2 在千亿样本上查找字典。

    正例里面,driver读文件、建字典;executors上面,只做第二步。

    2021-03-24
    1
    1
  • L3nvy
    1.
    位置信息通过特定的字符串前缀格式标识
    executor_[hostname]_[executorid]
    [hostname]
    hdfs_cache_[hostname]

    DAGScheduler会尝试获取RDD的每个Partition的偏好位置信息,a.如果RDD被缓存,通过缓存的位置信息获取每个分区的位置信息;b.如果RDD有preferredLocations属性,通过preferredLocations获取每个分区的位置信息;c. 遍历RDD的所有是NarrowDependency的父RDD,找到第一个满足a,b条件的位置信息

    DAGScheduler将生成好的TaskSet提交给TaskSetManager进行任务的本地性级别计算

    2.
    感觉像是Spark on Kubernetes这种场景
    应该和相关存储配置有关;不太了解,猜想的话。如果是配置的Spark中间过程使用的存储是分布式存储,Node Local应该不成立;如果就是单个容器的内部空间,或者挂载到主机上的空间,应该可以成立
    2021-03-24
  • October
    老师,taskscheduler的调度是把taskset根据一定的调度算法分配给不同的executor,那么我有一个问题,executor资源的申请是在任务的三级调度之前就已经申请好了吗?如果是这样的话,executor的申请时,有没有考虑优先在数据所在的节点开启executor?
    2021-03-24
  • October
    两种实现方式都能理解,但是现阶段很难写出像老师这样的非常scala风格的代码。 如果是我的话,实现方式可能会定义一个类,这个类包含这个字典属性,在driver端都文件,完成字典属性的初始化,在exexutor查字典。
    2021-03-24
  • 对方正在输入。。。
    老师,对于第二点,如果计算和存储分离的情况,我理解的是:对于shuffleMapStage来说,node local不成立;对于resultStage来说,从外部数据源读或者从shuffle数据读,node local也都不成立
    2021-03-24
  • 毓秀靚泽
    收获颇大,以前没往这块儿想
    2021-03-24
收起评论
6
返回
顶部