MAPREDUCE服务 MRS-配置列统计值直方图Histogram用以增强CBO准确度:配置场景

时间:2024-04-10 09:06:36

配置场景

Spark优化sql的执行,一般的优化规则都是启发式的优化规则,启发式的优化规则,仅仅根据逻辑计划本身的特点给出优化,没有考虑数据本身的特点,也就是未考虑算子本身的执行代价。Spark在2.2中引入了基于代价的优化规则(CBO)。CBO会收集表和列的统计信息,结合算子的输入数据集来估计每个算子的输出条数以及字节大小,这些就是执行一个算子的代价。

CBO会调整执行计划,来最小化端到端的查询时间,中心思路2点:

  • 尽早过滤不相关的数据。
  • 最小化每个算子的代价。

CBO优化过程分为2步:

  1. 收集统计信息。
  2. 根据输入的数据集估算特定算子的输出数据集。

表级别统计信息包括:记录条数;表数据文件的总大小。

列级别统计信息包括:唯一值个数;最大值;最小值;空值个数;平均长度;最大长度;直方图。

有了统计信息后,就可以估计算子的执行代价了。常见的算子包括过滤条件Filter算子和Join算子。

直方图为列统计值的一种,可以直观的描述列数据的分布情况,将列的数据从最小值到最大值划分为事先指定数量的槽位(bin),计算各个槽位的上下界的值,使得全部数据都确定槽位后,所有槽位中的数据数量相同(等高直方图)。有了数据的详细分布后,各个算子的代价估计能更加准确,优化效果更好。

该特性可以通过下面的配置项开启:

spark.sql.statistics.histogram.enabled:指定是否开启直方图功能,默认为false。

support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_1967.html