我无法解决这个异常,我已经阅读了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
4条答案
按热度按时间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
bihw5rsg2#
对我来说,设置vm参数-djava.library.path=c:\devtools\winutils master\hadoop-3.0.0解决了这个问题。
9vw9lbht3#
检查java版本。如果java是32位版本,则需要卸载并重新安装64位版本的hadoop。
check命令:
java-d32-版本(无错误,如果是32版本)
java-d64-版本(无错误(如果是64版本)
8cdiaqws4#
从hadoop-3.0.0下载hadoop.dll和winutils.exe文件并获得解析
https://github.com/steveloughran/winutils/tree/master/hadoop-3.0.0/bin