Adaptive Execution 让 Spark SQL 更智能更高效
副问题[/!--empirenews.page--]
本文转发自技能天下,原文链接 http://www.jasongj.com/spark/adaptive_execution/ 1 配景 前面《Spark SQL / Catalyst 内部道理 与 RBO》与《Spark SQL 机能优化再进一步 CBO 基于价钱的优化》先容的优化,从查询自己与方针数据的特点的角度尽也许担保了最终天生的执行打算的高效性。可是 执行打算一旦天生,便不行变动,纵然执行进程中发明后续执行打算可以进一步优化,也只能按原打算执行 CBO 基于统计信息天生最优执行打算,必要提前世成统计信息,本钱较大,且不得当数据更新频仍的场景 CBO 基于基本表的统计信息与操纵对数据的影响展望中间功效的信息,只是估算,不足准确 本文先容的 Adaptive Execution 将可以按照执行进程中的中间数据优化后续执行,从而进步整体执行服从。焦点在于两点
2 动态配置 Shuffle Partition 2.1 Spark Shuffle 道理 Spark Shuffle 一样平常用于将上游 Stage 中的数据按 Key 分区,担保来自差异 Mapper (暗示上游 Stage 的 Task)的沟通的 Key 进入沟通的 Reducer (暗示下流 Stage 的 Task)。一样平常用于 group by 可能 Join 操纵。
如上图所示,该 Shuffle 总共有 2 个 Mapper 与 5 个 Reducer。每个 Mapper 会按沟通的法则(由 Partitioner 界说)将本身的数据分为五份。每个 Reducer 从这两个 Mapper 中拉取属于本身的那一份数据。 2.2 原有 Shuffle 的题目 行使 Spark SQL 时,可通过 spark.sql.shuffle.partitions 指定 Shuffle 时 Partition 个数,也即 Reducer 个数 该参数抉择了一个 Spark SQL Job 中包括的全部 Shuffle 的 Partition 个数。如下图所示,当该参数值为 3 时,全部 Shuffle 中 Reducer 个数都为 3
这种要领有如下题目
2.3 自动配置 Shuffle Partition 道理 如 Spark Shuffle 道理 一节图中所示,Stage 1 的 5 个 Partition 数据量别离为 60MB,40MB,1MB,2MB,50MB。个中 1MB 与 2MB 的 Partition 明明过小(现实场景中,部门小 Partition 只有几十 KB 及至几十字节) 开启 Adaptive Execution 后
三个 Reducer 这样分派是由于
由上图可见,Reducer 1 从每个 Mapper 读取 Partition 1、2、3 都有三根线,是由于原本的 Shuffle 计划中,每个 Reducer 每次通过 Fetch 哀求从一个特定 Mapper 读数据时,只能读一个 Partition 的数据。也即在上图中,Reducer 1 读取 Mapper 0 的数据,必要 3 轮 Fetch 哀求。对付 Mapper 而言,必要读三次磁盘,相等于随机 IO。 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |