我需要配置我的 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相同的版本。仅限这些罐子 需要存在于驱动程序中,但如果您在纱线中运行 集群模式,那么你必须确保它们与你的 申请。
所以我想我错过了文件系统中的一些工件。
我认为你必须指定完整的安装 hive lib 路径,而不仅仅是将 Metastore jar 复制到你指定的目录。
这是我对 hive 3.1.3 的测试步骤:
cd /home/spark/spark-3.5.1-bin-hadoop3
export SPARK_HOME=$(pwd)
export PATH=$PATH:${SPARK_HOME}/bin
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/*
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
/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)>