SPARKSQL3.0-Spark兼容多版本Hive源码分析

本文深入分析SparkSQL3.0如何兼容不同版本的Hive,主要通过HiveExternalCatalog和HiveClient实现。讲解了Spark通过三种方式构建HiveClient,包括内置版本、用户指定版本和Maven下载版本。关键在于IsolatedClientLoader类,它利用自定义ClassLoader实现不同Hive版本的隔离。此外,文章还介绍了HiveClientImpl和shim接口,shim用于解决不同Hive版本API冲突,通过反射调用相应版本的实现。最后,文章给出了使用Spark兼容多版本Hive的注意事项和配置方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、前言

阅读本节需要先掌握Catalog基础知识

Spark对Hive的所有操作都是通过获取Hive元数据[metastore]帮助spark构建表信息从而调用HDFS-API对原始数据的操作,可以说Spark兼容多版本Hive就是在兼容Hive的Metastore

二、源码分析

在catalog一节中我们知道spark对hive操作是通过HiveExternalCatalog,而HiveExternalCatalog对hive的DDL、DML操作都是使用内部的HiveClient变量,如下:

image-20221103123338523

image-20221129113020675

接下来我们看HiveUtils.newClientForMetadata函数:


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Light Gao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值