Catalyst揭秘 Day2 Catalyst源码初探
Catalyst揭秘 Day2
Catalyst源码初探
这节课从源码角度来讲catalyst。
首先有一个观点要澄清,就是技术不是越底层就越是性能和效率更高。因为除了指令执行性能以外,更重要的是架构层次,里面的核心是数据和代码的本地性问题。如果是能在内存中或者多线程运行,很多时候Java会比C语言性能高很多。
一般对rdd的操作都没有dataframe的快,主要就是catalyst这个执行优化器的作用。
SqlContext处理流程
写SparkSql的程序,有一个非常核心的东西,就是SQLContext。
SQLContext是基于SparkContext来构建的SQL和dataframe数据处理的上下文,会做一部分解析和驱动工作之后,还是会把执行以rdd的方式交给SparkContext来执行。
从源码的注释看,SQLContext是处理结构化数据的入口,允许我们创建dataframe,并可以基于dataframe进行sql查询。

首先,通过catalog,我们可以对plan进行初步处理,比如确定表名和表中的列名,生成Logical plan。

其内部核心是一个Hashmap,key是表名,value是LogicalPlan,主要提供了对表管理的一系列方法。

sqlParser负责对SQL语法进行分词,构建并返回一个语法树。

其中ParserDialect是核心,parse方法会负责具体的分词处理。

analyzer是真正的语法分析器,进行最原始的语法解析,变成logic plan。

Optimizer里面有一系列的优化规则,里面都是模式匹配,可以随意加规则,而且也不需要知道所有的东西。

SparkPlanner 优化物理执行计划,包含了一系列的优化策略,来优化我们物理执行的过程。

QueryExecution,是SQL执行执行上下文,负责生成结果。

QueryExecution中,会生成RDD。

至此,我们完整走了一遍流程,可以看到sql经过一系列处理后,生成了RDD,这个印证了昨天说的整个流程过程。
结果展现
那么这个生成的RDD后续会如何使用,我们简单的看一句SQL的结果展现:
从show方法开始:

show中会调用take方法,进而调用head方法。

head方法主要调用了collect方法。这里主要是对语句进行执行。

之后会执行SparkPlan中的execute方法生成RDD。

而其最终,会调用到RDD的collect方法,生成Job,进行运行。

欲知后事如何,且听下回分解!
DT大数据每天晚上20:00YY频道现场授课频道68917580
Catalyst揭秘 Day2 Catalyst源码初探的更多相关文章
- Catalyst揭秘 Day1 Catalyst本地解析
Catalyst揭秘 Day1 Catalyst本地解析 今天开始讲下Catalyst,这是我们必须精通的内容之一: 在Spark2.x中,主要会以Dataframe和DataSet为api,无论是D ...
- Kakfa揭秘 Day9 KafkaReceiver源码解析
Kakfa揭秘 Day9 KafkaReceiver源码解析 上一节课中,谈了Direct的方式来访问kafka的Broker,今天主要来谈一下,另一种方式,也就是KafkaReceiver. 初始化 ...
- Kakfa揭秘 Day7 Producer源码解密
Kakfa揭秘 Day7 Producer源码解密 今天我们来研究下Producer.Producer的主要作用就是向Kafka的brokers发送数据.从思考角度,为了简化思考过程,可以简化为一个单 ...
- Kakfa揭秘 Day6 Consumer源码解密
Kakfa揭秘 Day6 Consumer源码解密 今天主要分析下Consumer是怎么来工作的,今天主要是例子出发,对整个过程进行刨析. 简单例子 Example中Consumer.java是一个简 ...
- Kakfa揭秘 Day3 Kafka源码概述
Kakfa揭秘 Day3 Kafka源码概述 今天开始进入Kafka的源码,本次学习基于最新的0.10.0版本进行.由于之前在学习Spark过程中积累了很多的经验和思想,这些在kafka上是通用的. ...
- Spark Streaming揭秘 Day26 JobGenerator源码图解
Spark Streaming揭秘 Day26 JobGenerator源码图解 今天主要解析一下JobGenerator,它相当于一个转换器,和机器学习的pipeline比较类似,因为最终运行在Sp ...
- Spark Streaming揭秘 Day22 架构源码图解
Spark Streaming揭秘 Day22 架构源码图解 今天主要是通过图解的方式,对SparkStreaming的架构进行一下回顾. 下面这个是其官方标准的流程描述. SparkStreamin ...
- Servlet源码初探
年底,公司的事情告一段落,就来捣鼓一下这个Servlet源码,为下一步的spingmvc源码初探做准备 1.Servlet接口 public interface Servlet { void init ...
- Spring Boot 揭秘与实战 源码分析 - 工作原理剖析
文章目录 1. EnableAutoConfiguration 帮助我们做了什么 2. 配置参数类 – FreeMarkerProperties 3. 自动配置类 – FreeMarkerAutoCo ...
随机推荐
- Asp.Net 之 服务器端控件与客户端控件的区别
服务器控件,即Asp.Net的控件,控制这些控件必须经过服务器处理,然后响应用户,代码在服务器端解释执行,生成根据用户的浏览器而定的html元素. 客户端控件,即普通Html控件,使用script控制 ...
- DAG上动态规划
很多动态规划问题都可以转化为DAG上的最长路,最短路,或路径计数问题. 硬币问题: 有N中硬币,面值分别为v1,v2,v3,……vn,每种都无穷多,给定非负整数S,可以选用多少个硬币,使他们的总和恰好 ...
- Mac OS X 配置 Apache+Mysql+PHP 详细教程
网上的教程已经有很多,这里简洁的记录一下.以 Mac OS X Mavericks 10.9.X 为例. 先附上如何进入指定目录文件夹,按键盘 Command + Shift + G ,然后输入指定目 ...
- java笔记01-反射
--2013年7月26日17:56:35 写文章之前,参考了这篇:http://www.cnblogs.com/Quincy/archive/2011/06/19/2084557.html 评价:这个 ...
- TensorFlow安装与测试
官网:http://tensorflow.org/安装步骤:1.sudo apt-get install python-pip python-dev python-virtualenv 2.virtu ...
- Java 文件名操作的相关工具类
项目中的操作文件名的工具类: import java.io.File; import java.util.regex.Matcher; import java.util.regex.Pattern; ...
- Eclipse 中引用其他项目及项目打包
1.建立工程project1; 2.建立class文件ClassA: package com.test; public class ClassA{ public static String getCl ...
- 《JavaScript模式》读书笔记
简介 在软件开发过程中,模式是指一个通用问题的解决方案.一个模式不仅仅是一个可以用来复制粘贴的代码解决方案,更多地是提供了一个更好的实践经验.有用的抽象化表示和解决一类问题的模板. 对象有两大类: 本 ...
- Nginx - SSI Module
SSI, for Server Side Includes, is actually a sort of server-side programming language interpreted by ...
- (转)mysql、sqlserver、oracle的默认事务的隔离级别
1.mysql的默认事务的隔离级别:可重复读取(repeatable read); 2.sqlserver的默认事务的隔离级别:提交读取(read committed); 3.oracle的默认事务的 ...