Spark CBO

CBO BackGround

直方图种类有:等宽直方图、等高直方图、V-优化的直方图


Enhancing Spark SQL Optimizer with Reliable Statistics

Spark Column histogram and CBO

介绍内容包括:

  • Spark table statistics 和 column statistics
  • Join Cost 在有无statistics下的计算区别
  • Spark CBO 引入的参数:
    • spark.sql.statistics.histogram.enabled : default = false,启用column histogram 信息收集
    • spark.sql.cbo.joinReorder.card.weight : 在下面公式中CostCPU 占比
    Cost = rows * weight + size * (1 - weight)
    Cost = CostCPU * weight + CostIO * (1 - weight)
    
  • SQL优化Target
  • Build侧选择 : 通过filter 算子后的估算,build side 和 probe side 可能互换
  • 优化Join 类型: SortMergeJoin 变为 BroadcastJoin
  • 优化Join Order: Left Deep Join 变为 Bushy Join

HIVE 0.14 Cost Based Optimizer (CBO) Technical Overview

CBO 三个优化效果

  • Join ordering optimization
  • Bushy join support
  • Join simplification

Equi-depth Histogram Construction for Big Data with Quality Guarantees

这个不是等高直方图算法
构建等宽直方图

  • 计算每个分区的Boundary,和 boundary size.
  • 根据目标bins数量,计算目标 boundary size
  • 合并每个分区boundary,得到近似Boundary
  • µs 为计算误差,需要关注,论文中说明在实际大数据中误差较好

Hive:percentile_approx 原理与实现

主要介绍hive中percentile_approx函数的实现。函数的四个组成部分update、merge、sum 和 uniform,为了简化问题,这里只介绍 update 和 merge。

update:

  • 填充Bin的x,y值
  • Bin满了之后,进行合并bin
    Spark CBO_第1张图片
    merge:
    merge和update类似,直接合并bin区间

Spark CBO_第2张图片

SPARK-17074 generate equi-height histogram for column

Spark 中equi-height histogram 计算,方式一还是依赖于percentile_approx 函数进行计算

Cost-Based Plan Selection Enumerate, Estimate, Select

基于前一算子的Cost,estimate 当前selection ,projection,join 等算子的cost 计算算法。

你可能感兴趣的:(spark)