返回

探索 Alink 初次使用出现的 ClassNotFoundException、NoClassDefFoundError、A JNI error 等问题

人工智能

[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 时遇到其他问题,欢迎留言讨论。