当前位置: 首页 > news >正文

SparkSQL之Catelog体系

按照SQL标准的解释,在SQL环境下Catalog和Schema都属于抽象概念。在关系数据库中,Catalog是一个宽泛的概念,通常可以理解为一个容器或数据库对象命名空间中的一个层次,主要用来解决命名冲突等问题。
在Spark SQL系统中,Catalog主要用于各种函数资源信息和元数据信息(数据库、数据表、数据视图、数据分区与函数等)的统一管理。Spark SQL的Catalog体系涉及多个方面,不同层次所对应的关系如下图所示。
请添加图片描述
具体来讲,Spark SQL中的Catalog体系实现以SessionCatalog为主体,通过SparkSession(Spark程序入口)提供给外部调用。一般一个SparkSession对应一个SessionCatalog。本质上,SessionCatalog起到了一个代理的作用,对底层的元数据信息、临时表信息、视图信息和函数信息进行了封装。如上图所示,SessionCatalog的构造参数包括6部分,除传入Spark SQL和Hadoop配置信息的CatalystConf与Configuration外,还涉及以下4个方面的内容。

  1. GlobalTempViewManager(全局的临时视图管理):对应DataFrame中常用的createGlobal-TempView方法,进行跨Session的视图管理。GlobalTempViewManager是一个线程安全的类,提供了对全局视图的原子操作,包括创建、更新、删除和重命名等。在GlobalTempViewManager内部实现中,主要功能依赖一个mutable类型的HashMap来对视图名和数据源进行映射,其中的key是视图名的字符串,value是视图所对应的LogicalPlan(一般在创建该视图时生成)。需要注意的是,GlobalTempViewManager对视图名是大小写敏感的。
  2. FunctionResourceLoader(函数资源加载器):在Spark SQL中除内置实现的各种函数外,还支持用户自定义的函数和Hive中的各种函数。这些函数往往通过Jar包或文件类型提供,FunctionResourceLoader主要就是用来加载这两种类型的资源以提供函数的调用。需要注意的是,对于Archive类型的资源,目前仅支持在YARN模式下以spark-submit方式提交时进行加载。
  3. FunctionRegistry(函数注册接口):用来实现对函数的注册(Register)、查找(Lookup)和删除(Drop)等功能。一般来讲,FunctionRegistry的具体实现需要是线程安全的,以支持并发访问。在Spark SQL中默认实现是SimpleFunctionRegistry,其中采用Map数据结构注册了各种内置的函数。
  4. ExternalCatalog(外部系统Catalog):用来管理数据库(Databases)、数据表(Tables)、数据分区(Partitions)和函数(Functions)的接口。顾名思义,其目标是与外部系统交互,并做到上述内容的非临时性存储,同样需要满足线程安全以支持并发访问。如上图所示,ExternalCatalog是一个抽象类,定义了上述4个方面的功能。在Spark SQL中,具体实现有InMemoryCatalog和HiveExternalCatalog两种。前者将上述信息存储在内存中,一般用于测试或比较简单的SQL处理;后者利用Hive原数据库来实现持久化的管理,在生产环境中广泛应用。

总体来看,SessionCatalog是用于管理上述一切基本信息的入口。除上述的构造参数外,其内部还包括一个mutable类型的HashMap用来管理临时表信息,以及currentDb成员变量用来指代当前操作所对应的数据库名称。SessionCatalog在Spark SQL的整个流程中起着重要的作用,在后续逻辑算子阶段和物理算子阶段都会用到。

http://www.lryc.cn/news/226950.html

相关文章:

  • 【操作系统面试题(32道)与面试Linux命令大全】
  • Qt TCP/IP网络通信
  • 全域旅游“一机游”智慧旅游平台解决方案:PPT全文48页,附下载
  • Ubuntu 22.04 (WSL2) 安装 libssl1.1
  • Unity 跑酷游戏全部脚本(完结)
  • 凯美瑞 vs 太空船:Web3 游戏生长的两条路径
  • (一)正点原子I.MX6ULL kernel6.1移植
  • 计算机服务器中了mallox勒索病毒怎么解决,勒索病毒解密,数据恢复
  • CSS3实现动态旋转加载样式
  • 【LeetCode刷题-二分查找】--658.找到K个最接近的元素
  • 新方向!文心一言X具身智能,用LLM大模型驱动智能小车
  • mysql.sock找不到怎么解决?
  • 微信小程序刷新当前页面(亲测有效)
  • 通过拉普拉斯特征映射降维
  • 【信息安全原理】——传输层安全(学习笔记)
  • GBDT减少模型偏差、随机森林减小模型方差
  • 使用IDEA工具处理git合并后的冲突的细节
  • 快速下载ChatGLM系列模型
  • 【数据结构】顺序表 | 详细讲解
  • 100天精通风控建模(原理+Python实现)——第1天:什么是风控建模?
  • HTML转义字符
  • 【STM32】
  • U盘不可以访问的维护
  • SpringCloud 微服务全栈体系(十三)
  • ROC 曲线详解
  • 113.路径总和II
  • 【Linux】WSL安装Kali及基本操作
  • Linux基础开发工具之调试器gdb
  • Apache APISIX 的 Admin API 默认访问令牌漏洞(CVE-2020-13945)漏洞复现
  • Clickhouse学习笔记(3)—— Clickhouse表引擎