执行schematool初始化MySQL Schema时出现java.lang.NoClassDefFoundError错误
执行schematool初始化MySQL Schema时出现java.lang.NoClassDefFoundError错误
嗨,我来帮你搞定这个问题!你在命令行执行schematool -dbType mysql -initSchema时碰到的这个错误,核心原因是JVM找不到Hadoop的核心配置类org.apache.hadoop.conf.Configuration,说白了就是Hadoop的相关依赖没被正确加载到类路径里。
先给你贴一下你遇到的具体错误日志,方便对照:
Error: A JNI error has occurred, please check your installation and try again Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/conf/Configuration at java.lang.Class.privateGetMethodRecursive(Unknown Source) at java.lang.Class.getMethod0(Unknown Source) at java.lang.Class.getMethod(Unknown Source)
下面是几个针对性的解决办法,你可以一步步试:
先检查Hadoop环境变量配置
首先确认HADOOP_HOME已经正确指向你的Hadoop安装目录:- Linux/macOS用户在命令行输入
echo $HADOOP_HOME,Windows用户输入echo %HADOOP_HOME%,看看是不是输出了正确的安装路径,要是空的或者路径不对,得先把这个环境变量配置好。
然后配置HADOOP_CLASSPATH,把Hadoop的核心jar包都包含进去:
Linux/macOS下可以执行:
export HADOOP_CLASSPATH=$HADOOP_HOME/share/hadoop/common/*:$HADOOP_HOME/share/hadoop/hdfs/*:$HADOOP_HOME/share/hadoop/yarn/*:$HADOOP_HOME/share/hadoop/mapreduce/*Windows下可以在系统环境变量里设置对应的路径,或者在命令行临时设置:
set HADOOP_CLASSPATH=%HADOOP_HOME%\share\hadoop\common\*;%HADOOP_HOME%\share\hadoop\hdfs\*;%HADOOP_HOME%\share\hadoop\yarn\*;%HADOOP_HOME%\share\hadoop\mapreduce\*- Linux/macOS用户在命令行输入
确保在正确的环境中执行命令
如果你是用Hive的schematool,得先确认Hive的配置文件hive-site.xml已经正确关联了Hadoop的配置,而且Hive的类路径已经自动包含了Hadoop的依赖。要是还是不行,你可以在执行schematool时显式指定Hadoop的类路径,比如:schematool -dbType mysql -initSchema -hiveconf hadoop.classpath=$HADOOP_HOME/share/hadoop/common/*:$HADOOP_HOME/share/hadoop/hdfs/*检查版本兼容性
别忘了确认Hive和Hadoop的版本是匹配的,比如Hive 3.x一般要搭配Hadoop 3.x使用,版本不兼容也可能导致这种依赖类找不到的问题。
备注:内容来源于stack exchange,提问作者Anand Hotti
相关产品推荐
相关产品推荐

