无法在 Spark 3.5.1 中配置 Hive Metastore 客户端 jar

问题描述 投票:0回答:1

我需要配置我的 Spark 3.5.1 应用程序,以便它使用特定版本的 Hive Metastore 客户端。

我阅读了我可以使用的文档

spark.sql.hive.metastore.jars
spark.sql.hive.metastore.jars.path

所以我尝试了这个:

spark.sql.hive.metastore.version: "2.3.9"
spark.sql.hive.metastore.jars: "path"
spark.sql.hive.metastore.jars.path: "/usr/lib/spark/hive/jars/*"

我之前将 jar

hive-metastore-2.3.9.jar
复制到了文件夹
/usr/lib/spark/hive/jars/*

我得到的错误是:

24/12/06 15:34:10 INFO ApplicationMaster: Unregistering ApplicationMaster with FAILED (diag message: User class threw exception: java.lang.NoClassDefFoundError: org/apache/hadoop/hive/metastore/api/AlreadyExistsException
    [...]
Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hive.metastore.api.AlreadyExistsException
    at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:445)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:592)
    at org.apache.spark.sql.hive.client.IsolatedClientLoader$$anon$1.doLoadClass(IsolatedClientLoader.scala:281)
    at org.apache.spark.sql.hive.client.IsolatedClientLoader$$anon$1.loadClass(IsolatedClientLoader.scala:270)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525)
    ... 86 more
)

所以我想我错过了该文件夹中的一些罐子(即使

AlreadyExistsException
位于hive-metastore中)。

有人有文件夹中必须包含的 jar 列表吗?文档说:

...这个类路径必须包含所有 Hive 及其依赖项, 包括正确版本的 Hadoop。提供的罐子应该是 与spark.sql.hive.metastore.version相同的版本。仅限这些罐子 需要存在于驱动程序中,但如果您在纱线中运行 集群模式,那么你必须确保它们与你的 申请。

所以我想我错过了文件系统中的一些工件。

apache-spark hadoop hive-metastore
1个回答
0
投票

我认为你必须指定完整的安装 hive lib 路径,而不仅仅是将 Metastore jar 复制到你指定的目录。

这是我对 hive 3.1.3 的测试步骤:

  1. 设置环境
cd /home/spark/spark-3.5.1-bin-hadoop3
export SPARK_HOME=$(pwd)
export PATH=$PATH:${SPARK_HOME}/bin
  1. 设置conf/spark-defaults.conf
spark.sql.hive.metastore.version        3.1.3
spark.sql.hive.metastore.jars           path
spark.sql.hive.metastore.jars.path      /home/hive/apache-hive-3.1.3-bin/lib/*
  1. 将 commons-collections-3.2.2.jar 复制到 /home/hive/apache-hive-3.1.3-bin/lib/*
cp $SPARK_HOME/jars/commons-collections-3.2.2.jar /home/hive/apache-hive-3.1.3-bin/lib/*

如果你不这样做,你将得到以下异常:

Caused by: java.lang.ClassNotFoundException: org.apache.commons.collections.CollectionUtils
        at java.net.URLClassLoader.findClass(URLClassLoader.java:387)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
        at org.apache.spark.sql.hive.client.IsolatedClientLoader$$anon$1.doLoadClass(IsolatedClientLoader.scala:274)
        at org.apache.spark.sql.hive.client.IsolatedClientLoader$$anon$1.loadClass(IsolatedClientLoader.scala:263)        at java.lang.ClassLoader.loadClass(ClassLoader.java:351)        
... 64 more
  1. 运行spark-sql进行测试,可以看到schema版本为3.1.0。
/home/spark/spark-3.5.1-bin-hadoop3# spark-sql
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
24/12/10 23:58:22 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
2024-12-10T23:58:24,886 INFO [main] org.apache.hadoop.hive.conf.HiveConf - Found configuration file null
Hive Session ID = 020e5eba-c9b9-46d2-8fec-30b825ca3b24
.
.
.
org.apache.hadoop.hive.metastore.MetaStoreDirectSql - Using direct SQL, underlying DB is DERBY
2024-12-10T23:58:26,270 INFO [main] org.apache.hadoop.hive.metastore.ObjectStore - .
.
.
.
Version information not found in metastore. metastore.schema.verification is not enabled so recording the schema version 3.1.0
.
.
.
Spark master: local[*], Application Id: local-1733846303879
spark-sql (default)>
© www.soinside.com 2019 - 2024. All rights reserved.