java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Windows.createDirectoryWithMode0
java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Windows.createDirectoryWithMode0
我无法解决这个异常,我已经阅读了 hadoop 文档和我能找到的所有相关的 Whosebug 问题。
我的 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-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 目录的路径)。
没有使用回退("using builtin-java classes"),我得到:
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
此异常的原因是:
我正在通过我的 maven pom 导入 2.6.0-cdh5.13.0,但我下载了 2.6.0[= 版本的预构建文件21=]。这些缺少 cdh5.13.0 变体中所做的更改(CDH 是包含 Hadoop 生态系统的 Cloudera 平台)。因此,版本确实有冲突。
如果我像 2.6.0 一样导入 hadoop-common、hadoop-hdfs、hadoop-client 而不是像 2.6.0-cdh5.13.0,异常就会消失(我什至不需要设置 VM 选项).
给我设置 VM 参数 -Djava.library.path=C:\devTools\winutils-master\hadoop-3.0.0
解决了问题。
检查您的 java 版本。如果java是32位版本,你需要卸载并重新安装hadoop的64位版本。
检查命令:
java -d32 -version;(没有错误,如果是32版本)
java -d64 -version;(没有错误,如果是64版本)
从 hadoop-3.0.0 下载 hadoop.dll 和 winutils.exe 文件并得到解析
https://github.com/steveloughran/winutils/tree/master/hadoop-3.0.0/bin
我在用 spark 编写 parquet 文件时遇到了同样的问题。从 hadoop-3.0.0 下载 hadoop.dll 和 winutils.exe 文件并将 hadoop.dll 移动到 C:\Windows\System32 文件夹并将 winutils.exe 移动到 C:\hadoop\bin文件夹解决了我的问题。
感谢 Shailendra Singh 分享以上内容link
我无法解决这个异常,我已经阅读了 hadoop 文档和我能找到的所有相关的 Whosebug 问题。
我的 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-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 目录的路径)。
没有使用回退("using builtin-java classes"),我得到:
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
此异常的原因是:
我正在通过我的 maven pom 导入 2.6.0-cdh5.13.0,但我下载了 2.6.0[= 版本的预构建文件21=]。这些缺少 cdh5.13.0 变体中所做的更改(CDH 是包含 Hadoop 生态系统的 Cloudera 平台)。因此,版本确实有冲突。
如果我像 2.6.0 一样导入 hadoop-common、hadoop-hdfs、hadoop-client 而不是像 2.6.0-cdh5.13.0,异常就会消失(我什至不需要设置 VM 选项).
给我设置 VM 参数 -Djava.library.path=C:\devTools\winutils-master\hadoop-3.0.0 解决了问题。
检查您的 java 版本。如果java是32位版本,你需要卸载并重新安装hadoop的64位版本。
检查命令:
java -d32 -version;(没有错误,如果是32版本)
java -d64 -version;(没有错误,如果是64版本)
从 hadoop-3.0.0 下载 hadoop.dll 和 winutils.exe 文件并得到解析
https://github.com/steveloughran/winutils/tree/master/hadoop-3.0.0/bin
我在用 spark 编写 parquet 文件时遇到了同样的问题。从 hadoop-3.0.0 下载 hadoop.dll 和 winutils.exe 文件并将 hadoop.dll 移动到 C:\Windows\System32 文件夹并将 winutils.exe 移动到 C:\hadoop\bin文件夹解决了我的问题。
感谢 Shailendra Singh 分享以上内容link