sparksql解析流程
1、sparkSql处理核心:Catalyst工作流程(本质:把sql、dataframe相结合,以树tree的形式来存储、优化)
2、catalyst工作流程
1)Parser(解析器):SqlParser生成LogicPlan Tree
主要是先进行词法分析,再进行语法非分析
词法分析:将输入的sql语句串解析为一个一个的token
语法分析:在词法分析的基础上,将单词序列组合成各类语法短语,组成各个LogicPlan
2)Analyser:遍历整个语法树,对树上的每个节点进行数据类型绑定以及函数绑定。
根据元数据表解析为包含必要列的表,并且相应字段解析为相应的数据类型,相应的计算逻辑解析为对应的函数。
3)Optimizer:是Catalyst的核心
基于规则优化实际上对语法树再做一次遍历,模式匹配能够满足特定细节的节点,再进行相应的等价变换
经典规则:谓词下推、常量累加、和列值裁剪
4)Physical Planning:物理计划层
用物理操作算子产生一个或者多个物理计划。然后用cost模型选择一个物理计划。目前基于 cost-based的优化仅仅用于选择join算法。
对已知的很小的relations,sparksql会选择使用Spark 的提供的点对点的广播功能实现 Broadcast join。
3、内存管理 Tungsten 内存管理器-- off-heap
本质:突破JVM内存管理限制,分配堆外内存。
JVM:GC带来时间开销,可能出现“假死” 情况
sparksql解析流程的更多相关文章
- HTML页面加载和解析流程详细介绍
浏览器加载和渲染html的顺序 1. IE下载的顺序是从上到下,渲染的顺序也是从上到下,下载和渲染是同时进行的. 2. 在渲染到页面的某一部分时,其上面的所有部分都已经下载完成(并不是说所有相关联的元 ...
- html页面加载和解析流程
HTML页面加载和解析流程 用户输入网址(假设是个html页面,并且是第一次访问),浏览器向服务器发出请求,服务器返回html文件: 浏览器开始载入html代码,发现<head>标签内有一 ...
- 用户访问网页流程、DNS 解析流程
一.用户访问流程 二.DNS解析流程 DNS( Domain Name System)是“域名系统”的英文缩写,是一种组织成域层次结构的计算机和网络服务命名系统,它用于 TCP/IP 网络,它所提供的 ...
- Android中measure过程、WRAP_CONTENT详解以及 xml布局文件解析流程浅析
转自:http://www.uml.org.cn/mobiledev/201211221.asp 今天,我着重讲解下如下三个内容: measure过程 WRAP_CONTENT.MATCH_PAREN ...
- 简单理解DNS解析流程(一)
0x0 简单理解dns DNS服务器里存着一张表 表中放着域名和IP地址,域名和IP地址以映射关系保存,即一对一 浏览器访问某个域名,实际上是访问它的ip地址 所以浏览器需要知道域名对应的ip地址 如 ...
- DVB-subtitle解析流程浅
DTV包含SUBTITLE和TTX. PMT中分别有不同的描述符对应,如下图的TTX descripter=0x56.语言ISO-639="fin" subtitle descri ...
- Vue 路由导航解析流程
Vue Router完整的导航解析流程
- BeanDefinition 解析流程【解析所有配置类】
BeanDefinition 解析流程 BeanDefinition 解析入口:ConfigurationClassPostProcessor#postProcessBeanDefinitionReg ...
- Vue Router 路由守卫:完整的导航解析流程
完整的导航解析流程 1 导航被触发. 2 在失活的组件里调用离开守卫. 3 调用全局的 beforeEach 守卫. 4 在重用的组件里调用 beforeRouteUpdate 守卫 (2.2+). ...
随机推荐
- Python+Requests+异步线程池爬取视频到本地
1.本次项目为获取梨视频中的视频,再使用异步线程池下载视频到本地 2.获取视频时,其地址中的Url是会动态变化,不播放时src值为图片的地址,播放时src值为mp4格式 3.查看视频链接是否存在aja ...
- Python+pytest知识点回顾
pip install pytest pytest 单元测试框架 pytest高于unittest测试框架 unittest测试类需要继承unittest.TestCase类 pytest不需要继承, ...
- android10Binder(五)java世界的binder:AndroidFramework
java世界的binder:AndroidFramework 目录 java世界的binder:AndroidFramework 一.前言 二.SystemServer进程的open.mmap 三.A ...
- shell脚本(10)-流程控制while
一.while循环介绍 while循环与for一样,一般不知道循环次数使用for,不知道循环的次数时推荐使用while 二.while语法 while [ condition ] #条件为真才会循环, ...
- 第四篇--git 上传可能出现的问题
1. Q:fatal: TaskCanceledException encountered. A task was canceled. A:$ git config --system --unset ...
- SQL修改列名,增加列,删除列语句的写法
1.修改数据表名 ALTER TABLE [表名.]OLD_TABLE_NAME RENAME TO NEW_TABLE_NAME; 2.修改列名 ALTER TABLE [表名.]TABLE_NAM ...
- (JAVA2)写博客的好帮手:Typora
(二)写博客的好帮手:Typora 推荐文本编辑器 :Typora 文件后缀 : xxx.md 安装步骤 打开浏览器搜索Typora 进入官网后,点击Download(下载) 选择自己的操作系统 选择 ...
- js学习笔记之日期倒计时DOM操作
1.访问html元素 getElementById() 方法 返回对拥有指定 id 的第一个对象的引用,只有dom对象有效 getElementsByName() 方法 返回指定名称的对象集合 g ...
- 一文带你认识LPWA通信技术
摘要:为了满足越来越多的远距离物联网设备的连接需求,LPWA应用而生. 本文分享自华为云社区<常见物联网通信技术之LPWA通信技术>,作者:爱吃面包的猫. 如果你比较关注物联网圈的话,想必 ...
- Optional解决空指针
Java 8 Optional 类 Java 8 新特性 Optional 类是一个可以为null的容器对象.如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象. O ...