SparkSQL运行原理

1.SparkSQL的运行简化流程

  • 进行DataFrame|Dataset|SQL编程;
  • Spark会将编写的代码转换并生成一个逻辑计划;
  • Spark会将此逻辑计算转换生成一个重计划,同时在底层以执行的代码进行优化;
  • Spark将这个优化了的物理计划提交到集群上执行,底层上是基于RDD的操作;

2.SparkSQL核心组件

SparkSQL是Spark的核心模块之一,通过查看源码中的sql模块发现,它主要由四大部分组成(core, catalyst, hive和hive-thriftserver),它支持SQL查询和DataFrame API。SparkSQL的核心是Catalyst优化器。

SparkSQL四大模块

源码

  • core: 负责处理数据的输入与输出,可以从不同的数据源获取数据转换为DataFrame/Dataset;
  • catalyst: Spark中的优化器,负责处理查询语句的处理,包括SQL解析、逻辑计划、优化、物理计划等;
  • hive:兼容Hive, 支持对Hive数据的处理;
  • hive-thriftserver: 提供客户端和JDBC/ODBC连接;

3.Spark优化器catalyst

SparkSQL会先将SQL语句进行解析形成一个树(Tree), 然后使用Rule对Tree进行绑定,优化等处理,通过模式匹配对不同类型的节点采用不同的操作。

而SparkSQL的查询优化器是catalyst, 它负责语句的解析(parse), 绑定,优化和根据逻辑执行计划生成物理执行计划等过程,catalyst是SparkSQL最核心的部分。

catalyst

4.SparkSQL运行原理

  1. 使用SessionCatalog保存元数据

SparkSQL在解析SQL前需要初始化SparkSession, 它定义了SparkSQL的切入点,在输入SQL前会加载SessionCatalog, 初始化SparkSession时会把元数据保存在SessionCatalog中,包括库名,表名,字段,字段类型,是否可以为空等,这些元数据将会在解析未绑定的逻辑计划上使用到。

  1. 使用Antlr生成未绑定的逻辑计划(Logical Plans)

Spark2.0版本起使用Antlr进行词法和语法解析,Antlr会构建一个按照关键字生成的语法树,也就是生成的未绑定的逻辑计划。

  1. 使用Analyzer绑定逻辑计划

在这个阶段Analyzer 使用Analysis Rules,结合SessionCatalog元数据,对未绑定的逻辑计划进行解析,生成已绑定的逻辑计划。

  1. 使用Optimizer优化逻辑计划

Optimizer(优化器)的实现和处理方式同Analyzer类似,在该类中定义一系列Rule,利用这些Rule对逻辑计划和Expression进行迭代处理,达到树的节点的合并和优化。

  1. 使用SparkPlanner生成可执行计划的物理计划

SparkPlanner使用Planning Strategies对优化的逻辑计划进行转化,生成可执行的物理计划。

  1. 使用QueryExecution执行物理计划

5.SparkSQL运行图解

Spark运行图解

sparksql 操作hive_三十六、图解SparkSQL运行原理相关推荐

  1. 程序员编程艺术第三十六~三十七章、搜索智能提示suggestion,附近点搜索

    第三十六~三十七章.搜索智能提示suggestion,附近地点搜索 作者:July.致谢:caopengcs.胡果果. 时间:二零一三年九月七日. 题记 写博的近三年,整理了太多太多的笔试面试题,如微 ...

  2. OpenCV学习笔记(三十六)——Kalman滤波做运动目标跟踪 OpenCV学习笔记(三十七)——实用函数、系统函数、宏core OpenCV学习笔记(三十八)——显示当前FPS OpenC

    OpenCV学习笔记(三十六)--Kalman滤波做运动目标跟踪 kalman滤波大家都很熟悉,其基本思想就是先不考虑输入信号和观测噪声的影响,得到状态变量和输出信号的估计值,再用输出信号的估计误差加 ...

  3. NeHe OpenGL教程 第三十六课:从渲染到纹理

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  4. 三十六、rsync通过服务同步、Linux系统日志、screen工具

    三十六.rsync通过服务同步.Linux系统日志.screen工具 一.rsync通过服务同步 该方式可以理解为:在远程主机上建立一个rsync的服务器,在服务器上配置好各种应用,然后本机将作为客户 ...

  5. 嵌入式实时操作系统ucos-ii_「正点原子NANO STM32开发板资料连载」第三十六章 UCOSII 实验 1任务调度...

    1)实验平台:alientek NANO STM32F411 V1开发板2)摘自<正点原子STM32F4 开发指南(HAL 库版>关注官方微信号公众号,获取更多资料:正点原子 第三十六章 ...

  6. 【正点原子FPGA连载】第三十六章 基于OV5640的PL以太网视频传输实验-摘自【正点原子】领航者ZYNQ之FPGA开发指南_V2.0

    1)实验平台:正点原子领航者ZYNQ开发板 2)平台购买地址:https://item.taobao.com/item.htm?&id=606160108761 3)全套实验源码+手册+视频下 ...

  7. 实验三十六 Windows Server 2012 RDS桌面虚拟化之七VDI虚拟桌面的更新和维护

    实验三十六 Windows Server 2012 RDS桌面虚拟化之七VDI虚拟桌面的更新和维护 在远程桌面服务中,往往需要定期对虚拟桌面更新补丁或应用程序,以往的方法是一台一台的更新:但是在Win ...

  8. VTK学习笔记(三十六)VTK图像填充

    VTK学习笔记(三十六)VTK图像填充 1.官方示例 2.其他例子 总结 1.官方示例 来自官方示例代码,自己只是添加了理解. 代码: #include <vtkCamera.h> #in ...

  9. [Python从零到壹] 三十六.图像处理基础篇之图像算术与逻辑运算详解

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

最新文章

  1. Mongodb aggregation 基本操作示例
  2. java 枚举 或运算_Objective-C 枚举 中位运算 的使用
  3. 上传本地代码到gitHub过程详解
  4. Cmake的CMakeLists.txt写法示例
  5. MyBatis中if,where,set标签
  6. 蓝牙信号强度检测app_基于蓝牙技术的智能插座方案
  7. 操作系统已经向SQL Server 返回了错误21
  8. 【Day13】说一下 Vue 组件的通信方式都有哪些?(父子组件,兄弟组件,多级嵌套组件等等)
  9. 使用devops的团队_为什么每个开发团队都应该在2019年采用DevOps文化
  10. Java基础02 位运算符<<、>>
  11. python装饰器详解51-python装饰器使用实例详解
  12. elasticsearch工作笔记002---Centos7.3安装最新版elasticsearch-7.0.0-beta1-x86_64.rpm单机版安装
  13. 下方向键_求助:Deepin-linux-opencv方向键
  14. java 开源 cms_17个开源免费的Java CMS
  15. 农夫山泉病毒性营销方案策划
  16. RT-Thread Env工具下 scons命令构建工程 SConscript和Kconfig修改示例
  17. 关于webpack下载loader出现的问题(ERROR in ./src/img/timg.jpg Module build failed: ValidationError: File Loade)
  18. 使用zxing生成带logo的二维码图片,自动调节logo图片相对二维码图片的大小
  19. cocos2dx 2.2 安装跟以往的不同
  20. ups服务器未能登录,UPS电源常见故障大全

热门文章

  1. web前端基础(11html5和css)
  2. SQLyog创建表示的bug
  3. 山东大学计算机应用基础期中测试,山东大学期末考试计算机应用基础模拟题三套题.pdf...
  4. 完全弄懂如何用pycharm安装pyqt5及其相关配置
  5. MFC实现mysql备份_MySQL如何自动备份 - MySQL - VC中文网-VC-MFC编程论坛 - Powered by Discuz!...
  6. anaconda中安装xgboost_在windows64位Anaconda3环境下安装XGBoost
  7. Ubuntu 想在 Windows 的 WSL 中做到领先
  8. 简单的动态JavaScript Ajax函数
  9. orm mysql nodejs_【译】Nodejs最好的ORM
  10. java时间的整的表达式_Quartz中时间表达式的设置-----corn表达式