apache-spark - 当 shuffle 分区大于 200 时会发生什么(数据帧中的 spark.sql.shuffle.partitions 200(默认情况下))
问题描述
spark sql 聚合操作,它对数据进行洗牌,即 spark.sql.shuffle.partitions 200(默认情况下)。当 shuffle 分区大于 200 时,性能会发生什么变化。
当分区数大于 2000 时,Spark 使用不同的数据结构进行随机记账。因此,如果分区数接近 2000,则将其增加到 2000 以上。
但我的问题是当 shuffle 分区大于 200(比如说 300)时会发生什么行为。
解决方案
根据为作业分配足够资源的相对大集群上的典型工作负载,默认选择 200。否则,应根据 2 个因素选择此数字 - 可用内核数和分区大小(建议将分区保持在 100Mb 附近)。选择的分区数应该是可用核心数的倍数,但不应该很大(通常是核心数的 1-3 倍)。如果分区数大于默认值,则不应更改 Spark 的行为 - 它只会增加 Spark 需要执行的任务数)。
你可以在 Spark + AI 峰会 2019上观看这个演讲——它涵盖了很多关于 Spark 程序优化的细节,包括分区数量的选择。
推荐阅读
- vb.net - 如何在 Visual Basic 中将全局变量分配给标签?
- html - 如何在 html 中创建带有侧边栏的轮播?
- python - Tensorflow GD 不会改变 tf.Variables
- sublimetext3 - Sublime Shortcut: Key-Binding 将每个 HTML 属性放在 <> 标记内的新行上
- php - Blueimp jQuery-File-Upload 与 codeigniter 上传并重命名和调整图像大小
- node.js - isModified 并预先保存 mongoose...Nodejs
- javascript - Javascript - 当函数触发使用去抖动机制时删除事件侦听器
- sql - 如何在不应用透视功能的情况下为不同字段创建列
- javascript - 使用 Underscore.js 过滤列
- javascript - html按钮在移动设备中不起作用