一 Spark SQL运行架构

Spark SQL对SQL语句的处理和关系型数据库类似,即词法/语法解析、绑定、优化、执行。Spark SQL会先将SQL语句解析成一棵树,然后使用规则(Rule)对Tree进行绑定、优化等处理过程。Spark SQL由Core、Catalyst、Hive、Hive-ThriftServer四部分构成:

Core: 负责处理数据的输入和输出,如获取数据,查询结果输出成DataFrame等

Catalyst: 负责处理整个查询过程,包括解析、绑定、优化等

Hive: 负责对Hive数据进行处理

Hive-ThriftServer: 主要用于对hive的访问

1.1 TreeNode

逻辑计划、表达式等都可以用tree来表示,它只是在内存中维护,并不会进行磁盘的持久化,分析器和优化器对树的修改只是替换已有节点。

TreeNode有2个直接子类,QueryPlan和Expression。QueryPlam下又有LogicalPlan和SparkPlan. Expression是表达式体系,不需要执行引擎计算而是可以直接处理或者计算的节点,包括投影操作,操作符运算等

1.2 Rule & RuleExecutor

Rule就是指对逻辑计划要应用的规则,以到达绑定和优化。他的实现类就是RuleExecutor。优化器和分析器都需要继承RuleExecutor。每一个子类中都会定义Batch、Once、FixPoint. 其中每一个Batch代表着一套规则,Once表示对树进行一次操作,FixPoint表示对树进行多次的迭代操作。RuleExecutor内部提供一个Seq[Batch]属性,里面定义的是RuleExecutor的处理逻辑,具体的处理逻辑由具体的Rule子类实现。

整个流程架构图:

二 Spark SQL运行原理

2.1 使用SessionCatalog保存元数据

在解析SQL语句之前,会创建SparkSession,或者如果是2.0之前的版本初始化SQLContext,SparkSession只是封装了SparkContext和SQLContext的创建而已。会把元数据保存在SessionCatalog中,涉及到表名,字段名称和字段类型。创建临时表或者视图,其实就会往SessionCatalog注册

2.2 解析SQL,使用ANTLR生成未绑定的逻辑计划

当调用SparkSession的sql或者SQLContext的sql方法,我们以2.0为准,就会使用SparkSqlParser进行解析SQL. 使用的ANTLR进行词法解析和语法解析。它分为2个步骤来生成Unresolved LogicalPlan:

# 词法分析:Lexical Analysis,负责将token分组成符号类

# 构建一个分析树或者语法树AST

2.3 使用分析器Analyzer绑定逻辑计划

在该阶段,Analyzer会使用Analyzer Rules,并结合SessionCatalog,对未绑定的逻辑计划进行解析,生成已绑定的逻辑计划。

2.4 使用优化器Optimizer优化逻辑计划

优化器也是会定义一套Rules,利用这些Rule对逻辑计划和Exepression进行迭代处理,从而使得树的节点进行和并和优化

2.5 使用SparkPlanner生成物理计划

SparkSpanner使用Planning Strategies,对优化后的逻辑计划进行转换,生成可以执行的物理计划SparkPlan.

2.6 使用QueryExecution执行物理计划

此时调用SparkPlan的execute方法,底层其实已经再触发JOB了,然后返回RDD

spark基础之spark sql运行原理和架构相关推荐

  1. Spark SQL运行原理和架构

    一 Spark SQL运行架构 Spark SQL对SQL语句的处理和关系型数据库类似,即词法/语法解析.绑定.优化.执行.Spark SQL会先将SQL语句解析成一棵树,然后使用规则(Rule)对T ...

  2. mysql的sql执行原理图_性能测试MySQL之SQL运行原理

    一,MySQL运行原理 两个一样的图 1,SQL语句执行的过程详细说明 如上图所示,当向MySQL发送一个请求的时候,MySQL到底做了什么: a, 客户端发送一条查询给服务器. b, 服务器先检查查 ...

  3. spark基础之Spark SQL和Hive的集成以及ThriftServer配置

    如果希望Maven编译Spark时支持Hive,需要给定-Phive -Phive-thriftserver.比如比如:mvn -Pyarn -Phadoop-2.6 -Dhadoop.version ...

  4. spark基础之调度器运行机制简述

    一 概述 驱动程序在启动的时候,首先会初始化SparkContext,初始化SparkContext的时候,就会创建DAGScheduler.TaskScheduler.SchedulerBacken ...

  5. spark基础之shuffle机制和原理分析

    一 概述 Shuffle就是对数据进行重组,由于分布式计算的特性和要求,在实现细节上更加繁琐和复杂 在MapReduce框架,Shuffle是连接Map和Reduce之间的桥梁,Map阶段通过shuf ...

  6. spark基础之spark streaming的checkpoint机制

    一 什么类型的数据需要使用checkpoint? Spark Streaming是最需要进行容错的,因为一般都是7 * 24小时运转,所以需要将足够的信息checkpoint到容错的存储系统上,比如H ...

  7. Spark基础 之 Spark的介绍

    一. 什么是Spark? Spark是一个分布式计算框架,是由Scala语言编写完成的,是apache基金会下的顶级开源项目 ,和Mapresuce的作用一样,可以完成对数据的计算. Spark与Ma ...

  8. spark on yarn 完全分布式_Spark编程笔记(1)-架构基础与运行原理

    引言 根据IBM前首席执行官郭士纳的观点,IT领域每隔十五年就会迎来一 次重大变革 .当前我们正处于第三次信息浪潮(2010年前后),物联网.云计算和大数据技术突飞猛进. 信息爆炸是我们当前所需要解决 ...

  9. Spark大数据技术与应用 第一章Spark简介与运行原理

    Spark大数据技术与应用 第一章Spark简介与运行原理 1.Spark是2009年由马泰·扎哈里亚在美国加州大学伯克利分校的AMPLab实验室开发的子项目,经过开源后捐赠给Aspache软件基金会 ...

最新文章

  1. 经典论文复现 | InfoGAN:一种无监督生成方法
  2. xhtml中的五个块元素
  3. click事件在什么时候出发_超全的js事件机制amp;事件委托
  4. 王道考研 计算机网络11 数据链路层 封装成帧 透明传输 流量控制 停止-等待协议 后退N帧协议GBN 选择重传协议SR
  5. PyTorch中Tensor的基本用法与动手学深度学习的预备知识
  6. spring bean
  7. android热门消息推送横向测评![转]
  8. web测试与app测试异同
  9. 如何保障大数据平台的安全性
  10. 所有IT人的大恩人永远的离开了
  11. 《数字图像处理》--冈萨雷斯(第十章)
  12. vscode 显示/设置隐藏文件夹
  13. 你画我猜---websocket
  14. 上传图片的方法(大白话讲解)
  15. 苹果开发者账号个人级升级为公司级
  16. 【翻译】MED 3D: TRANSFER LEARNING FOR 3D MEDICAL I MAGE ANALYSIS
  17. vue-element-admin入坑之切换中文版
  18. Python编程基础:函数的使用
  19. 如何做好一名软件实施顾问
  20. UnusualDeepLearning-task1

热门文章

  1. mysql启动失败2005_数据库2005服务启动不了
  2. Vue简介及HelloWord编写
  3. Linux(Centos7)下使用RPM方式安装MySQL5.7
  4. java并发编程之线程的生命周期详解
  5. 【系统架构设计师】软考高级职称,来自订阅者真实反馈,从理论、实践、技巧让你掌握论文写作秘诀
  6. android view stop,android – onDestroyView片段永远不会在onStop之后调用
  7. java + testng wsdl 测试_在测试中使用XPATH断言的策略
  8. 北京理工大学计算机学院乔磊,邸慧军_北京理工大学计算机学院
  9. openssh漏洞_技术干货 | OpenSSH命令注入漏洞复现(CVE202015778)
  10. 算法提高 超级玛丽(java)