Catalyst揭秘 Day1 Catalyst本地解析

Catalyst本地解析

今天开始讲下Catalyst,这是我们必须精通的内容之一:

  1. 在Spark2.x中,主要会以Dataframe和DataSet为api,无论是Dataframe和DataSet,底层都依赖Catalyst和Tungsten。
  2. 根据官方的披露,后续所有的框架都会依赖Catalyst和Tungsten。
    从定位上看,catalyst是在SparkSql上先做实验,后面是机器学习,现在要推到各个子框架。

基本概念

catalyst是一种解析器引擎,而不仅是sql解析引擎。如果研究下catalyst,可以在当中非常方便的添加你想做的任意新的优化技术,在优化技巧方面可以随意的扩展。也很少有解析器像catalyst这样可以方便的增加新的数据类型。

catalyst的数据结构是棵树状结构,并有一系列的rules的解析规则。我们以前在很多语言开发的时候,都会解析成一颗语法树,catalyst是把sql和dataframe的内容用tree来存储。第二个层面,Catalyst中有一套解析规则,怎么对树进行解析和优化。

从jvm对内存的管理来说,内存中的所有object也是树状结构的,那catalyst用一棵树在存储的话,每个节点都是类的实例,都有0个或多个子节点,并且节点是不可变,只能把一棵树从一种状态transform到另一种状态。

Tree结构解析

Catalyst主要包含两点:

  1. Tree数据结构;
  2. Rules解析规则;
  3. 优化方式;

如何理解Tree数据结构:
比如表达式 x + (5 + 10),当中包含:
Literal:5 10
Attribute:x
Action:Add

可以用下图表示:

Catalyst中使用一系列的Rules来解析和优化Tree数据结构,对于上述的树状数据结构,优化过程可以如下,把常量合并在一起。由于表达式是一个对象,对象有类型,所以可以使用模式匹配,对于不认识的类型可以忽略,并且添加新的类型会很容易,导致了我们的扩展和操作非常的方便,只要不断执行匹配规则就行。当我们写优化规则的时候,只需要考虑不同的算子,根本就不用这棵树有多大。因为catalyst会循环运用我们的规则,只到这棵树不可以被解析和优化,这让我们会很方便改变规则,也会很方便优化引擎。

tree.tranform{
        case Add(Literal(x),Literal(y)) => Literal(x+y)
        case
        ...
    }

执行过程

一般来说分为六步:

  1. SQL、Dataframe、DataSet都会变成Unrecognized Logic Plan未识别的逻辑计划,这是一棵抽象语法树,数据表和列名等都还未被识别。
  2. 用catalog来识别表和列名等东西,并且会对值进行一些简单的计算,建立Logic Plan。
  3. 运用rules对上一阶段成果进行优化,比如谓词下推,形成Optimized Logic Plan优化后的逻辑计划。
  4. 根据基于成本的考量,比如将小表进行broadcast,形成pyshical plan物理计划。 在做sparksql时,其实做不了啥太多的优化。物理计划已经是基于rdd角度的考虑了。

  1. 会根据评估模型,在很多个物理计划的选项中,选中最快的物理计划。由于有这个环节,dataframe一般情况下比直接写rdd运行快。
  2. 借助scala语言的高级特性quasiquotes,将物理计划,直接变成jvm的字节码。基于rdd进行编程。

从整个过程,我们可以看到在框架抽象的时候,并不是越底层越高效,因为如果能加入优化层次,会对开发者有很大的助力。

欲知后事如何,且听下回分解!

DT大数据每天晚上20:00YY频道现场授课频道68917580

时间: 2024-08-24 09:19:06

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

Linux本地解析文件/etc/hosts说明【原创】

windows的域名本地解析文件hosts是可以一个域名对多个IP,如果有一个IP有问题,可以去解析到其他IP Linux的本地解析文件/etc/hosts,是否也可以这样呢.下面做了个测试 先看一下#解析器查询顺序配置文件 [[email protected] ~]# cat /etc/host.conf multi on 如果想设置解析顺序,如下内容 #表示先查询本地hosts文件,如果没有结果,再尝试查找BIND dns服务器 order hosts, bind multi on 以on或

windows8 本地解析和切换到超级管理员账户下编辑该文件

win8 hosts文件路径:C:\Windows\System32\drivers\etc 我的电脑->右击"管理"->本地用户和组->双击点击右边的"用户"->双击点开Administrator用户->去掉"账号已禁用"前面的勾->重启->切换到超级管理员账户下编辑该文件

Spark Catalyst源码分析之SqlParser

Spark SQL的核心执行流程我们已经分析完毕,可以参见Spark SQL核心执行流程,下面我们来分析执行流程中各个核心组件的工作职责. 本文先从入口开始分析,即如何解析SQL文本生成逻辑计划的,主要设计的核心组件式SqlParser是一个SQL语言的解析器,用scala实现的Parser将解析的结果封装为Catalyst TreeNode ,关于Catalyst这个框架后续文章会介绍. 一.SQL Parser入口 Sql Parser 其实是封装了scala.util.parsing.co

第二篇:Spark SQL Catalyst源码分析之SqlParser

/** Spark SQL源码分析系列文章*/ Spark SQL的核心执行流程我们已经分析完毕,可以参见Spark SQL核心执行流程,下面我们来分析执行流程中各个核心组件的工作职责. 本文先从入口开始分析,即如何解析SQL文本生成逻辑计划的,主要设计的核心组件式SqlParser是一个SQL语言的解析器,用scala实现的Parser将解析的结果封装为Catalyst TreeNode ,关于Catalyst这个框架后续文章会介绍. 一.SQL Parser入口 Sql Parser 其实是

基于BIND软件实现互联网DNS解析

一.什么是DNS服务 DNS全称(Domain Name System)域名系统,因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串:DNS通过软件来进行实现域名对IP的解析:这里是通过BIND开源软件实现:BIND是开放源码软件,它允许在Internet上发布域名系统(DNS)信息,并为用户解析DNS查询:该名称绑定代表是"Berkeley Internet Name Domain"BIND是迄今为止使用最广泛

IOS 原生解析JSON 问题

服务器----WebService 返回的是JSON数据 IOS解析报错: Error Domain=NSCocoaErrorDomain Code=3840 "Unable to convert data to string around character 56." UserInfo={NSDebugDescription=Unable to convert data to string around character 56.} Code = 3840 错误 通过我将JSON写成

DNS原理总结及其解析过程详解

一.域名系统 1.域名系统概述 域名系统DNS(Domain Name System)是因特网使用的命名系统,用来把便于人们使用的机器名字转换成为IP地址.域名系统其实就是名字系统.为什么不叫“名字”而叫“域名”呢?这是因为在这种因特网的命名系统中使用了许多的“域(domain)”,因此就出现了“域名”这个名词.“域名系统”明确地指明这种系统是应用在因特网中. 我们都知道,IP地址是由32位的二进制数字组成的.用户与因特网上某台主机通信时,显然不愿意使用很难记忆的长达32位的二进制主机地址.即使

从DNS基础到在CentOS6.5上“玩着”搭建一个支持正向、反向解析的“

1.什么是DNS? (Domain Name System)域名系统. DNS其实实现的功能很简单也很有效,它能够让用户可以不用记得那些经常要访问服务器的ip地址,直接要你输入类似拼音格式的就可以访问到那些数字串的ip地址.假设以61.120.155.14(举个例子),我们总是用这些数字进行网页服务器的访问岂不是很蛋疼,毕竟很多人还是对文字甚至拼音字母更容易让正常人记忆.这就是DNS的功能. 当然,它不仅能把那些你输入的拼音字母转换成ip地址的数字串,它还支持把那些数字串转换成你想访问的实际的网

python 全栈 linux基础 (部分)网络 SSH 更名 DNS解析 元字符

nginx---> web ifconfig 查看网络配置信息 id add show 查看当前网卡信息(最小安装下) mtu 是指网卡传输的最大单元 单位:字节 网卡配置 临时配置 ifconfig 网卡名 IP地址/子网 DNS:vim /etc/resolv.conf 网关: (填加)route add default gw 网关  netmask 255.255.255.0 (删除)route del default gw 网关  netmask 255.255.255.0 查看配置:r