我无法解决此异常,我已经阅读了hadoop docu和我可以找到的所有相关的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)
...
我在我的应用程序中包含以下依赖项(通过maven pom.xml),都在2.6.0-cdh5.13.0版本中:hadoop-common,hadoop-hdfs,hadoop-client,hadoop-minicluster
我的文件系统变量是有效的(hadoop通用)文件系统(org.apache.hadoop.fs.FileSystem)。
我从https://github.com/steveloughran/winutils/tree/master/hadoop-2.6.0/bin下载了hadoop文件。 我将版本2.6.0中的winutils.exe和所有其他文件存储到C:\ Temp \ hadoop \ bin下的本地文件系统中。 我在路径变量HADOOP_HOME中添加了C:\ Temp \ hadoop(是的,不是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匹配,版本明智。
我正在Windows 10 x64系统和IntelliJ中工作。
每个人都有一个主意,我可以检查甚至是我做错了什么?
更新: 我使用以下VM选项运行主服务器
-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
答案 0 :(得分:3)
对我来说,设置VM参数-Djava.library.path = C:\ devTools \ winutils-master \ hadoop-3.0.0 解决了这个问题。
答案 1 :(得分:1)
此异常的原因是:
我正在通过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选项)。
答案 2 :(得分:0)
从hadoop-3.0.0下载hadoop.dll和winutils.exe文件并得到解决
https://github.com/steveloughran/winutils/tree/master/hadoop-3.0.0/bin
答案 3 :(得分:-1)
检查您的Java版本。如果Java是32位版本,则需要卸载并使用hadoop的64位版本重新安装。
检查命令:
java -d32 -version;(如果为32版本,则没有错误)
java -d64 -version;(如果为64版本,则没有错误)