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的整个流程中起着重要的作用,在后续逻辑算子阶段和物理算子阶段都会用到。

相关推荐
Data 31711 分钟前
Hive数仓操作(十七)
大数据·数据库·数据仓库·hive·hadoop
bubble小拾4 小时前
ElasticSearch高级功能详解与读写性能调优
大数据·elasticsearch·搜索引擎
ZOHO项目管理软件4 小时前
EDM平台大比拼 用户体验与营销效果双重测评
大数据
HyperAI超神经5 小时前
Meta 首个多模态大模型一键启动!首个多针刺绣数据集上线,含超 30k 张图片
大数据·人工智能·深度学习·机器学习·语言模型·大模型·数据集
Hello.Reader7 小时前
TopK算法在大数据重复数据分析中的应用与挑战
大数据·算法·数据分析
数据龙傲天7 小时前
1688商品API接口:电商数据自动化的新引擎
java·大数据·sql·mysql
Elastic 中国社区官方博客7 小时前
Elasticsearch:使用 LLM 实现传统搜索自动化
大数据·人工智能·elasticsearch·搜索引擎·ai·自动化·全文检索
Jason不在家9 小时前
Flink 本地 idea 调试开启 WebUI
大数据·flink·intellij-idea
Elastic 中国社区官方博客10 小时前
使用 Vertex AI Gemini 模型和 Elasticsearch Playground 快速创建 RAG 应用程序
大数据·人工智能·elasticsearch·搜索引擎·全文检索
CHICX122911 小时前
【Hadoop】改一下core-site.xml和hdfs-site.xml配置就可以访问Web UI
xml·大数据·hadoop