java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Windows.createDirectoryWithMode0

jas*_*sie 6 java hadoop maven cloudera-cdh

我无法解决这个异常,我已经阅读了 hadoop 文档以及我能找到的所有相关的 stackoverflow 问题。

我的 fileSystem.mkdirs(***) 抛出:

Exception in thread "main" java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Windows.createDirectoryWithMode0(Ljava/lang/String;I)V
    at org.apache.hadoop.io.nativeio.NativeIO$Windows.createDirectoryWithMode0(Native Method)
    at org.apache.hadoop.io.nativeio.NativeIO$Windows.createDirectoryWithMode(NativeIO.java:524)
    at org.apache.hadoop.fs.RawLocalFileSystem.mkOneDirWithMode(RawLocalFileSystem.java:465)
    at org.apache.hadoop.fs.RawLocalFileSystem.mkdirsWithOptionalPermission(RawLocalFileSystem.java:518)
    at org.apache.hadoop.fs.RawLocalFileSystem.mkdirs(RawLocalFileSystem.java:496)
    at org.apache.hadoop.fs.FilterFileSystem.mkdirs(FilterFileSystem.java:316)
...
Run Code Online (Sandbox Code Playgroud)

我在我的应用程序中包含以下依赖项(通过 maven pom.xml),全部采用版本 2.6.0-cdh5.13.0:hadoop-common、hadoop-hdfs、hadoop-client、hadoop-minicluster

我的文件系统变量是一个有效的(hadoop-common)文件系统(org.apache.hadoop.fs.FileSystem)。

我从https://github.com/steveloughran/winutils/tree/master/hadoop-2.6.0/bin下载了 hadoop 文件。我将 winutils.exe 和版本 2.6.0 中的所有其他文件存储到本地文件系统的 C:\Temp\hadoop\bin 下。我用 C:\Temp\hadoop 添加了路径变量 HADOOP_HOME (是的,不是 bin 目录的路径)。

未使用后备(“使用内置 java 类”),我得到:

145 [main] DEBUG org.apache.hadoop.util.NativeCodeLoader  - Trying to load the custom-built native-hadoop library...
147 [main] DEBUG org.apache.hadoop.util.NativeCodeLoader  - Loaded the native-hadoop library
Run Code Online (Sandbox Code Playgroud)

(参见https://hadoop.apache.org/docs/r2.6.0/hadoop-project-dist/hadoop-common/NativeLibraries.html

据我了解,此异常可能是由 hadoop 版本不匹配引起的,但我检查了导入的 hadoop 是否与我本地存储的 hadoop 版本相匹配。

我正在 Windows 10 x64 系统和 IntelliJ 上工作。

有人知道我可以检查什么,甚至我做错了什么吗?

更新:我使用以下虚拟机选项运行我的主程序

-Dhadoop.home.dir=C:/Temp/hadoop
-Djava.library.path=C:/Temp/hadoop/bin
Run Code Online (Sandbox Code Playgroud)

在不指定 lib 路径的情况下,我得到:

org.apache.hadoop.util.NativeCodeLoader  - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Run Code Online (Sandbox Code Playgroud)

jas*_*sie 1

出现此异常的原因是:

\n\n

我通过我的 maven pom 导入2.6.0-cdh5.13.0 ,但我下载了版本2.6.0中的预构建文件。这些缺少 cdh5.13.0 变体中所做的更改(CDH 是包含 Hadoop 生态系统的 Cloudera\xe2\x80\x99s 平台)。因此,版本确实存在冲突。

\n\n

如果我像 2.6.0 而不是像 2.6.0-cdh5.13.0 那样导入 hadoop-common、hadoop-hdfs、hadoop-client,异常就会消失(而且我什至不需要设置 VM 选项)。

\n\n

请参阅http://archive-primary.cloudera.com/cdh5/cdh/5/hadoop-2.6.0-cdh5.13.0/hadoop-project-dist/hadoop-common/NativeLibraries.html

\n