Catalyst揭秘 Day1 Catalyst本地解析】的更多相关文章

Catalyst揭秘 Day1 Catalyst本地解析 今天开始讲下Catalyst,这是我们必须精通的内容之一: 在Spark2.x中,主要会以Dataframe和DataSet为api,无论是Dataframe和DataSet,底层都依赖Catalyst和Tungsten. 根据官方的披露,后续所有的框架都会依赖Catalyst和Tungsten. 从定位上看,catalyst是在SparkSql上先做实验,后面是机器学习,现在要推到各个子框架. 基本概念 catalyst是一种解析器引擎…
Catalyst揭秘 Day6 Physical plan解析 物理计划是Spark和Sparksql相对比而言的,因为SparkSql是在Spark core上的一个抽象,物理化就是变成RDD,是SparkSql和Spark core之间的衔接点. Physical Plan也是Catalyst变成Spark作业的最后一个阶段. 生成SparkPlan 从代码,我们可以看到SparkPlan的生成包含了两个步骤,首先会调用SparkPlanner的plan方法,生成SparkPlan,调用pr…
Catalyst揭秘 Day2 Catalyst源码初探 这节课从源码角度来讲catalyst. 首先有一个观点要澄清,就是技术不是越底层就越是性能和效率更高.因为除了指令执行性能以外,更重要的是架构层次,里面的核心是数据和代码的本地性问题.如果是能在内存中或者多线程运行,很多时候Java会比C语言性能高很多. 一般对rdd的操作都没有dataframe的快,主要就是catalyst这个执行优化器的作用. SqlContext处理流程 写SparkSql的程序,有一个非常核心的东西,就是SQLC…
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揭秘 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…
Spark Tungsten揭秘 Day1 jvm下的性能优化 今天开始谈下Tungsten,首先我们需要了解下其背后是符合了什么样的规律. jvm对分布式天生支持 整个Spark分布式系统是建立在分布式jvm基础上的,jvm非常伟大的一点在于把不同机器的计算能力联合起来了,jvm也把不同机器的存储能力连接起来了. jvm是怎么做到这一点的,jvm本身就是一个软件,有自己的通讯方式以及自己的一套协议,在进行java或者scala开发的时候,就支持了一个最重要的设计模式:代理模式,基于代理模式可以…
Kakfa揭秘 Day8 DirectKafkaStream代码解析 今天让我们进入SparkStreaming,看一下其中重要的Kafka模块DirectStream的具体实现. 构造Stream 首先,从工厂方法开始,在工厂方法createDirectStream中,有两类关键内容: fromOffset:是一个HashMap,指定我们要读取的topic和Partition. Decoder:为什么需要Decoder,是因为Kafka并不对数据有任何的处理,在发送中并不进行解码,需要在接收端…