大数据体系和 SQL | 青训营笔记

129 阅读3分钟

这是我参与「第四届青训营 」笔记创作活动的第1天

第一节课「SQL Optimizer 解析」的内容主要包含 4 个方面:大数据体系和 SQL、常见的查询优化器、查询优化器的社区开源实践、SQL 相关的前沿趋势。这篇文章为大数据体系和 SQL 的相关内容,包括大数据体系和 SQL 的处理流程。

大数据体系

  • 基础设施:ECS、存储、VPC
  • 存储系统:HDFS、HBase、NAS、Object Store、数据湖
  • 资源调度:YARN、K8S
  • 分析引擎
    • 批式分析:Spark、Hive、MapReduce
    • 实时分析:Flink
    • 交互分析:Presto、ClickHouse、Doris
  • 消息队列:Kafka、Pulsar、NSQ
  • 权限管控:Apache Ranger、GDPR
  • 数据开发:Airflow、DAG
  • 业务应用:BI 报表、数据挖掘、营销分析、精准推荐

SQL 的处理流程

SQLParserASTAnalyzerLogical PlanOptimizerPhysical PlanExecutor\xrightarrow[]{\text{SQL}}\text{Parser}\xrightarrow[]{\text{AST}}\text{Analyzer}\xrightarrow[]{\text{Logical Plan}}\text{Optimizer}\xrightarrow[]{\text{Physical Plan}}\text{Executor}
  • Parser

    • 把文本变成抽象语法树结构(AST)
    • 词法分析:拆分字符串,提取关键字、字符串、数值等 token
    • 语法分析:将 token 组装成 AST node, 最终得到 AST
  • Analyzer

    • 检查并绑定 Database, Table, Column 等元信息
    • SQL 的合法性检查,比如数据库、表和列名是否存在,列的数据类型是否正确,MIN, MAX, AVG 的输入是否是数值
    • 将 AST 转换成逻辑计划树(AST -> Logical Plan)
  • Logical Plan

    • 逻辑地描述 SQL 对应的分步骤计算操作
    • 计算操作:算子,定义了对数据集合的计算操作(过滤,排序,聚合,连接)
  • 查询优化

    • SQL 是一种生命式语言,用户只描述做什么,没有告诉数据库怎么做
    • 目标:找到一个正确的且执行代价最小的物理执行计划
    • 查询优化器是数据库的大脑,最复杂的模块,很多相关问题都是 NP
    • 一般 SQL 越复杂,join 的表越多,数据量越大,查询优化的意义就越大,因为不同执行方式的性能差别可能有成百上千倍
  • Physical Plan

    • 优化器的输出是一个分布式的物理执行计划
    • 目标:在单机 Plan 的基础上最小化数据移动和最大化本地 Scan,生成 Plan Fragment Tree
    • 一个 Plan Fragment 封装了在一台机器上对数据集的操作逻辑。每个 Plan Fragment 可以在每个 executor 节点生成 1 个或多个执行实例,不同执行实例处理不同的数据集,通过并发来提升查询性能。
    • Plan 分布式化的方法是增加 shuffle 算子,执行计划树会以 shuffle 算子为边界拆分为Plan Fragment。
  • Executor

    • Executor 按照物理执行计划扫描和处理数据,充分利用机器资源
    • 单机并行:cache, pipeline, SIMD
    • 多机并行:一个 fragment 对应多个实例

个人总结

之前学过数据库相关的课程所以对 SQL 的语法很了解,但是对 SQL 的处理流程完全不了解。第一节课的第一部分让我对大数据体系有了更全面的认识,对 SQL 的处理流程也有了更多了解。

参考