探索 Alink 初次使用出现的 ClassNotFoundException、NoClassDefFoundError、A JNI error 等问题
2023-09-09 07:28:40
[TOC]
一、问题引入
我们想使用 Alink 做一下情感分析,于是从 Maven 仓库搜了下 Alink 的 Maven 依赖,如下:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>alink-all</artifactId>
<version>2.8.0</version>
</dependency>
我们直接将它复制到项目的 pom.xml 中。
<dependencies>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>alink-all</artifactId>
<version>2.8.0</version>
</dependency>
</dependencies>
编译运行后,却出现了一系列问题,包括 ClassNotFoundException、NoClassDefFoundError 和 A JNI error。
二、问题分析
经过一番排查,我们发现这些问题的根源在于 Alink 对 Java 版本和 Hadoop 版本的依赖。
Alink 2.8.0 版本需要 Java 8 或更高版本,而我们的项目使用的是 Java 11。此外,Alink 需要 Hadoop 2.7.3 或更高版本,而我们的项目使用的是 Hadoop 3.2.1。
由于 Java 和 Hadoop 版本不兼容,导致 Alink 无法正常工作,并抛出 ClassNotFoundException、NoClassDefFoundError 和 A JNI error 等异常。
三、解决方案
为了解决这些问题,我们需要将 Java 版本和 Hadoop 版本调整到与 Alink 兼容的版本。
1. 调整 Java 版本
我们将 Java 版本调整到 Java 8。
在 Maven 项目中,我们可以通过修改 pom.xml 文件中的 <java.version>
标签来调整 Java 版本。
<properties>
<java.version>1.8</java.version>
</properties>
2. 调整 Hadoop 版本
我们将 Hadoop 版本调整到 Hadoop 2.7.3。
在 Maven 项目中,我们可以通过修改 pom.xml 文件中的 <hadoop.version>
标签来调整 Hadoop 版本。
<properties>
<hadoop.version>2.7.3</hadoop.version>
</properties>
3. 重新编译和运行
在调整完 Java 版本和 Hadoop 版本后,我们需要重新编译和运行项目。
编译成功后,运行项目,问题消失,Alink 能够正常工作。
四、总结
在使用 Alink 时,我们需要确保 Java 版本和 Hadoop 版本与 Alink 兼容。否则,可能会遇到 ClassNotFoundException、NoClassDefFoundError 和 A JNI error 等问题。
希望本文对您有所帮助。如果您在使用 Alink 时遇到其他问题,欢迎留言讨论。