spark-3.1.2兼容多版本hive

本文介绍了如何在Spark 2.3.9版本中启用Hive支持,包括直接在SparkSession实例化时的配置步骤。对于CDH版本的Hive 2.1.1,需要特别配置metastore版本、jars和uris等属性,并在程序执行后查找并保存Hive依赖包。对于3.1.2版本的Hive,配置方式类似。在避免重复下载Hive依赖时,可以通过指定本地jar路径实现。
摘要由CSDN通过智能技术生成

2.3.9版本Hive的支持

直接在实例化SparkSession时,启用hive支持即可
例如:

val spark = SparkSession
      .builder()
      .appName("Spark Hive Example")
      .config("spark.sql.warehouse.dir", warehouseLocation)
      .enableHiveSupport()
      .getOrCreate()

CDH版本Hive(2.1.1)

需要配置以下属性:
config(“spark.sql.hive.metastore.version”, “2.1.1”)
config(“spark.sql.hive.metastore.jars”, “maven”)
config(“spark.sql.hive.metastore.jars.path”, “org.apache.hive:hive-metastore:2.1.1”)

例如:

val sparkConf = new SparkConf().setMaster("local[*]").setAppName("hive")
    val spark = SparkSession.builder()
      // cdh hive 2.1.1
      .config("spark.sql.hive.metastore.version", "2.1.1")
      .config("spark.sql.hive.metastore.jars", "maven")
      .config("spark.sql.hive.metastore.jars.path", "org.apache.hive:hive-metastore:2.1.1")
      .config("hive.metastore.uris", "thrift://10.167.2.5:9083")
      .config(sparkConf).
      enableHiveSupport().
      getOrCreate()

    spark.sql("show tables;").show()

先不要运行,找到ShutdownHookManager类,在这个类的logInfo("Deleting directory " + dirPath)附近打断点,阻止spark程序运行完后删除目录

打完断点后可以执行程序了,程序会在断点处阻塞住,我们通过控制台的日志信息,找到IsolatedClientLoader的提示信息,比如:

22/05/31 23:07:03 INFO IsolatedClientLoader: Downloaded metastore jars to /private/var/folders/ng/8nk0npb11v1gt6q9tj78085r0000gn/T/hive-v2_1-11b899b2-508d-4d0a-bb38-df4b193460ac

我们找到这个目录,这个目录就是cdh-2.1.1版本hive的依赖包,我们拷贝出来

更改刚才的属性,将.config(“spark.sql.hive.metastore.jars”, “maven”)改为.config(“spark.sql.hive.metastore.jars”, “path”),
将.config(“spark.sql.hive.metastore.jars.path”, “org.apache.hive:hive-metastore:2.1.1”)改为config(“spark.sql.hive.metastore.jars.path”,“拷贝出来的目录中的jar文件,使用file:///path的方式,使用逗号连接”)

再次运行就不会再进行下载了

3.1.2版本的Hive

使用方式类似CDH版本的hive(2.1.1)
.config(“spark.sql.hive.metastore.version”, “3.1.2”)

参考

https://spark.apache.org/docs/3.1.2/sql-data-sources-hive-tables.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值