Catalyst揭秘 Day5 optimizer解析】的更多相关文章

Catalyst揭秘 Day5 optimizer解析 Optimizer是目前为止中catalyst中最重要的部分.主要作用是把analyzed logicalPlan变成optimized LogicalPlan.optimizer和analyzer都继承自RuleExecutor.所以表现形式上都差不多.在analyzer基础上理解起来会比较简单. 总体分析 Optimizer类似analyzer,里面有一系列的batches,里面包含了一系列的rules,每个rule都有个迭代次数.为什…
Catalyst揭秘 Day4 analyzer解析 今天继续解析catalyst,主要讲一下analyzer,在sql语句的处理流程中,analyzer是在sqlparse的基础上,把unresolved logical plan生成logcal plan. Analyzer定义 在analyzer构造的时候,会传入catalog和functionRegistry,其中catelog用来存放用户指定的表名等信息,functionRegistry存放自定义函数,主要用来将未解析的属性和关系进行转…
Catalyst揭秘 Day3 sqlParser解析 今天我们会进入catalyst引擎的第一个模块sqlparser,它是catalyst的前置模块. 树形结构 从昨天的介绍我们可以看到sqlParser会返回一个logicalPlan,它是TreeNode的子类. TreeNode,作为一个树形抽象类,SQL语法的解析的时候,所有的元素都是TreeNode,可能是叶子节点,也可能是树枝节点,可能有0个或多个子节点,其方法都是对树的操作. 通过SQLParser,会把我们的sql语句变成一颗…
Catalyst揭秘 Day6 Physical plan解析 物理计划是Spark和Sparksql相对比而言的,因为SparkSql是在Spark core上的一个抽象,物理化就是变成RDD,是SparkSql和Spark core之间的衔接点. Physical Plan也是Catalyst变成Spark作业的最后一个阶段. 生成SparkPlan 从代码,我们可以看到SparkPlan的生成包含了两个步骤,首先会调用SparkPlanner的plan方法,生成SparkPlan,调用pr…
Catalyst揭秘 Day1 Catalyst本地解析 今天开始讲下Catalyst,这是我们必须精通的内容之一: 在Spark2.x中,主要会以Dataframe和DataSet为api,无论是Dataframe和DataSet,底层都依赖Catalyst和Tungsten. 根据官方的披露,后续所有的框架都会依赖Catalyst和Tungsten. 从定位上看,catalyst是在SparkSql上先做实验,后面是机器学习,现在要推到各个子框架. 基本概念 catalyst是一种解析器引擎…
Catalyst揭秘 Day8 Final 外部数据源和缓存系统 今天是Catalyst部分的收官,主要讲一些杂项内容. 外部数据源处理 什么叫外部数据源,是SparkSql自己支持的一些文件格式,以及一些自己自定义格式的文件开发. 让我们从文件的读取api开始,可以看到最终会创建一个DataFrame,当中比较关键的是relation方法. 首先,会以反射方式获取provider. 我们以json文件为例,其provider为json.DefaultSource.可以看到继承自HadoopFs…
Catalyst揭秘 Day7 SQL转为RDD的具体实现 从技术角度,越底层和硬件偶尔越高,可动弹的空间越小,而越高层,可动用的智慧是更多.Catalyst就是个高层的智慧. Catalyst已经逐渐变成了所有Spark框架的解析优化引擎,RDD是通用抽象的数据结果,RDD+Catalyst就构成了Spark的新底层.Catalyst是在RDD基础上进行封装,一旦优化了Catalyst,所有的子框架就都得到了优化. 执行过程 在昨天,我们已经看到SparkPlan会通过prepareForEx…
Catalyst揭秘 Day2 Catalyst源码初探 这节课从源码角度来讲catalyst. 首先有一个观点要澄清,就是技术不是越底层就越是性能和效率更高.因为除了指令执行性能以外,更重要的是架构层次,里面的核心是数据和代码的本地性问题.如果是能在内存中或者多线程运行,很多时候Java会比C语言性能高很多. 一般对rdd的操作都没有dataframe的快,主要就是catalyst这个执行优化器的作用. SqlContext处理流程 写SparkSql的程序,有一个非常核心的东西,就是SQLC…
Spark Streaming揭秘 Day5 初步贯通源码 引子 今天,让我们从Spark Streaming最重要的三个环节出发,让我们通过走读,逐步贯通源码,还记得Day1提到的三个谜团么,让我们开始解密吧. 1.创建StreamingContext StreamingContext是Spark Streaming是运行基础,也是负责管理和其运行的重要组件. 我们需要特别注意下面这段代码: 可以看到,StreamingContext内部包涵了一个SparkContext,这个可以告诉我们St…
Kakfa揭秘 Day5 SocketServer下的NIO 整个Kafka底层都是基于NIO来进行开发的,这种消息机制可以达到弱耦合的效果,同时在磁盘有很多数据时,会非常的高效,在gc方面有非常大的优势,而socketServer就是其中的代表. 今天会分析下socketServer,分析下其中三个核心对象 acceptor.processor.handler 概述 首先让我们看下socketServer的说明: 这是一个采用Java NIO开发的socket Server,有一个accept…