spark1.x-sql-架构原理
来源:互联网 发布:js跨域方法 编辑:程序博客网 时间:2024/05/22 07:49
整体架构
详解
源码结构
catalyst
sql
hive
hive-thriftserver
原理
SQLText
–>Parsing
–>Unresolved Logical Plan
–>Binding & Analyzing
–>logical plan
–>optimizing
–>optimized logical plan
–>query planning
–>physical plan
可能生成多种物理计划
通过方法 评估 哪种方案 最快 节省资源 最少
一个树的结构 比如:
PROJECT name
||
select
students
||
WHERE age<=18
SqlParser–>DataFrame(unresolved LogicalPlan tree的语法树)
–>RDD
–>transformation action
–>SQLContext executor.sql()
–>QueryExecution–>Analyzer.apply()
–>resolved Logicalplan 与数据源绑定
不知道表在哪里?
临时表在哪里
Resolved LogicalPlan 与 SQL中的数据源
(studentDF.registerTemplate(‘students’)) 进行绑定
知道从哪个数据源中查询
query excution
anlayzer的apply()方法执行结束后得到Resolved LogicalPlan
Analysis && binding
通过cacheManager 执行缓存的操作
如果之前已经缓存过执行计划 再次执行 使用缓存中的数据
optimizer
batches是非常非常重要的
封装了每一个Spark sql版本中 可以对逻辑执行计划执行的优化策略
optimizer重点是理解它的各种优化策略
调用Optimizer的apply() 方法
针对Resolved LogicalPal调用Optimizer 进行优化
获得优化后的逻辑执行计划
优化策略建议的方式编写SQL语句
Combiner 其实就是合并limit语句
比如 你的SQL语句中 有多个limit子句 取一个并集就可以
尽量避免值出现null 出现 否则数据倾斜
直接计算获得常量 尽量给出
UnionPuushDown 将Union下推 filter pushdown 将union where 下推到子查询中 尽量早的执行union操作和where 操作
避免在外层查询中 针对大量的数据 两张大表 执行where 操作
合并fitlter 就是合并where子句 比如子查询中有针对某个字段的where 子句
外层查询中也有针对同样一个字段的where子句
那么 此时可以合并where子句 只保留一个即可 取并集即可
我们自己写SQL的时候 也要注意到这个where使用
如果针对一个字段 写一次就好
列裁剪 要查询的列
生成Optimized LogcalPlan
SparkPlanner
逻辑执行计划 具体化 物化
PrepareforExecutor()
SparkPlanner生成一个可以执行的sparkplan 物理执行计划
已经绑定到了物理的数据源
知道对各个表的join
如果进行jion 包括jion的时候 默认spark内部会对小表进行广播
生成 SparkPlan (Physical Plan).executor()
- spark1.x-sql-架构原理
- spark1.x-架构
- spark1.x-rdd运算原理
- spark1.x-spark-sql-数据倾斜解决方案
- spark1.x-spark-sql性能优化
- spark1.x-streaming
- spark1.x学习之路
- Spark1.x编译与安装
- Spark1.x RDD基本操作
- Spark1.X视频教程完整版下载
- Spark1.0.x入门指南
- Spark1.0.x入门指南
- Spark1.0.x入门指南
- Spark1.x编译(二)
- spark1.x-性能优化策略
- Spark1.0.0 运行架构基本概念
- Spark1.0.0 运行架构基本概念
- Spark1.0.0 运行架构基本概念
- python3下安装matplotlib2.02
- 分享时的缩略图不显示问题
- 电子商务网站源码HTML5+CSS3+JavaScript
- 汉诺塔问题
- Ubuntu16.04 opencv3 python2.7 caffe(CPU_ONLY)
- spark1.x-sql-架构原理
- centos7.0中安装androidstudio 启动模拟器出问题,原因是32库引起的
- 浏览器中在线预览pdf文件(不使用插件)
- Struts2使用MethodFilterInterceptor来实现方法拦截器
- Android平台Native开发与JNI机制详解
- Android通过wifi连接手机(不需要root)
- 如何对一个算法进行复杂度分析
- 事务的隔离级别,加锁的细节,以及两者之间的关系。 同时也说明了 索引 与 锁 之间的关系,以及死锁成因的简化的情况
- 第一行代码+Android+第2版 笔记第二天