引言
Exceptionin thread "main" java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)
at org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Native Method)
at org.apache.hadoop.io.nativeio.NativeIO$Windows.access(NativeIO.java:570)
at org.apache.hadoop.fs.FileUtil.canRead(FileUtil.java:977)
之前一直在本地(windows 64 bit )的 Eclipse+hadoop2.5.2(64 bit)+jdk 64下调试,由于近期的任务是通过JNative完成Java调用DCMTK(C++),而JNative的运行要求是jdk 32 bit,故现在更改环境为Eclipse+JDK 32 bit+hadoop 32bit (hadoop2.2.0,2.5.1之前都是32位的)。
为了解决这个困扰很久的问题,进行了诸多尝试,最后的成功方案是:
hadoop-2.2.0\bin的hadoop.dll放到C:\Windows\System32下,然后重启电脑,还是出现这样的问题。
然后,我们下载对应hadoop源代码,hadoop-2.2.0-src.tar.gz解压,hadoop-2.2.0-src\hadoop-common-project\hadoop-common\src\main\java\org\apache\hadoop\io\nativeio下NativeIO.java 复制到对应的Eclipse的project,然后修改435行为return true如图所示:
错误终于一去不复返了,顺利运行了!心累啊,这么个问题困扰了一天!