java.lang.unsatifiedLinkError:org.apache.hadoop.io.nativeio.nativeio$windows.createdirectorywithmode0

cu6pst1q  于 2021-05-29  发布在  Hadoop
关注(0)|答案(4)|浏览(522)

我无法解决这个异常,我已经阅读了hadoop文档和所有相关的stackoverflow问题。
my 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)
...

我在我的应用程序(通过maven pom.xml)中包含以下依赖项,所有这些都在版本2.6.0-cdh5.13.0中:hadoop common、hadoop hdfs、hadoop client、hadoop minicluster
我的文件系统变量是一个有效的(hadoop公共)文件系统(org.apache.hadoop.fs.filesystem)。
我从下载了hadoop文件https://github.com/steveloughran/winutils/tree/master/hadoop-2.6.0/bin. 我将winutils.exe和版本2.6.0中的所有其他文件存储到本地文件系统的c:\temp\hadoop\bin下。我用c:\temp\hadoop添加了路径变量hadoop\u 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

(见https://hadoop.apache.org/docs/r2.6.0/hadoop-project-dist/hadoop-common/nativelibraries.html)
我知道,这个异常可能是由hadoop版本不匹配引起的,但是我检查了导入的hadoop是否与本地存储的hadoop版本匹配。
我正在使用Windows10x64系统和intellij。
有人知道,我能检查什么,甚至,我做错了什么吗?
更新:我用以下vm选项运行main

-Dhadoop.home.dir=C:/Temp/hadoop
-Djava.library.path=C:/Temp/hadoop/bin

如果不指定lib路径,我会得到:

org.apache.hadoop.util.NativeCodeLoader  - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
e0bqpujr

e0bqpujr1#

出现此异常的原因是:
我正在通过maven pom导入2.6.0-cdh5.13.0,但是我下载了2.6.0版本中的预构建文件。这些都缺少在cdh5.13.0变体中所做的更改(cdh是cloudera的平台,包括hadoop生态系统)。因此,两个版本确实存在冲突。
如果我导入hadoop common、hadoop hdfs、hadoop client,比如2.6.0而不是2.6.0-cdh5.13.0,异常就会消失(我甚至不需要设置vm选项)。
看到了吗http://archive-primary.cloudera.com/cdh5/cdh/5/hadoop-2.6.0-cdh5.13.0/hadoop-project-dist/hadoop-common/nativelibraries.html

bihw5rsg

bihw5rsg2#

对我来说,设置vm参数-djava.library.path=c:\devtools\winutils master\hadoop-3.0.0解决了这个问题。

9vw9lbht

9vw9lbht3#

检查java版本。如果java是32位版本,则需要卸载并重新安装64位版本的hadoop。
check命令:
java-d32-版本(无错误,如果是32版本)
java-d64-版本(无错误(如果是64版本)

8cdiaqws

8cdiaqws4#

从hadoop-3.0.0下载hadoop.dll和winutils.exe文件并获得解析
https://github.com/steveloughran/winutils/tree/master/hadoop-3.0.0/bin

相关问题