当前位置: 首页 > news >正文

SparkSQL架构

Spark SQL运行架构

 Spark SQL由Core、Catalyst、Hive和Hive-Thriftserver组成

  core:负责处理数据的输入/输出,从不同的数据源获取数据(如RDD、Parquet文件和json文件等),然后将查询结果输出成DataFrame

  Catalyst:负责处理查询语句的整个过程,包括解析、绑定、优化、物理计划等,是最重要的部分

  Hive:负责对hive数据的处理

  Hive-thriftserver:提供CLI和JDBC/ODBC接口

Spark SQL的架构:

  (1)、将SQL语句通过词法和语法解析生成未绑定的逻辑计划(包含Unresolved Relation、Unresolved Function和Unresolved Attribute),然后在后续步骤中使用不同的Rule应用到该逻辑计划上。

  (2)、Analyzer使用Analysis Rules,配合数据元数据(如SessionCatalog或Hive Metastore),完善未绑定的逻辑计划的属性而转换成已绑定的逻辑计划。

    具体的流程是:先实例化一个Simple Analyzer,然后遍历预先定义好的Batch,通过父类的Rule Exector的执行方法运行Batch里面的Rules,每个Rule会对未绑定的逻辑计划进行处理,有些可以通过一次解析处理,有些需要多次迭代,迭代至FixedPoint次数迭代或达到前后两次的树结构没有变化时停止。

  (3)、Optimizer使用Optimization Rules,将绑定的逻辑计划进行合并、列裁剪、过滤器下推等优化工作后生成优化的逻辑计划。

  (4)、Planner使用Planning Strategies,对优化的逻辑计划进行转换(Transform)生成可以执行的逻辑计划。根据过去的性能统计数据,选择最佳的物理执行计划CostModel,最后可以执行的物理计划树,即得到SparkPlan。

  (5)、在最终真正执行物理执行计划前,还要进行preparations规则处理,最后调用SparkPlan的execute执行计算RDD。

  

转载于:https://www.cnblogs.com/liuzhongfeng/p/7017178.html

相关文章:

  • 两个fragment之间简单的跳转
  • Spring《六》管理Bean
  • Python开发【第四篇】:Python基础之函数
  • 【cocos2d-x 3.7 飞机大战】 决战南海I (四) 敌机管理
  • 先来认识一些UML图标
  • C# 泛型
  • Android使用Canvas画图
  • 14.6 将运算分组为事务
  • bpm功能指标
  • 《Effective Modern C++》翻译--条款4:了解怎样查看推导出的类型
  • nginx 前端调度 对后端的app的生存状态的检测
  • 《计算机科学导论》一1.6计算机科学作为一门学科
  • dede的应用
  • shell--3、Shell 传递参数
  • 网页版俄罗斯方块
  • 时间复杂度分析经典问题——最大子序列和
  • fetch 从初识到应用
  • Lsb图片隐写
  • miaov-React 最佳入门
  • vue 个人积累(使用工具,组件)
  • 基于Mobx的多页面小程序的全局共享状态管理实践
  • ------- 计算机网络基础
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 前端面试题总结
  • 数据结构java版之冒泡排序及优化
  • 吐槽Javascript系列二:数组中的splice和slice方法
  • 网络应用优化——时延与带宽
  • 消息队列系列二(IOT中消息队列的应用)
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • 进程与线程(三)——进程/线程间通信
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • #、%和$符号在OGNL表达式中经常出现
  • #13 yum、编译安装与sed命令的使用
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • (1)(1.11) SiK Radio v2(一)
  • (33)STM32——485实验笔记
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (TOJ2804)Even? Odd?
  • (二开)Flink 修改源码拓展 SQL 语法
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • .NET Core 实现 Redis 批量查询指定格式的Key
  • .NET 回调、接口回调、 委托
  • .Net开发笔记(二十)创建一个需要授权的第三方组件
  • .vimrc php,修改home目录下的.vimrc文件,vim配置php高亮显示
  • ?.的用法
  • [ 常用工具篇 ] POC-bomber 漏洞检测工具安装及使用详解
  • [100天算法】-x 的平方根(day 61)
  • [ACM] hdu 1201 18岁生日
  • [BZOJ 2142]礼物(扩展Lucas定理)
  • [BZOJ 3531][Sdoi2014]旅行(树链剖分+线段树)
  • [C# 开发技巧]实现属于自己的截图工具
  • [C#]扩展方法