org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z 解决方案

解决下面两种异常的思路及其方案:

一:org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z
二:(null) entry in command string: null chmod 0700

发现问题:在windows上运行WordCount程序报错Exception in thread "main" java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z,但是在Linux上运行正常

1. 发现一篇帖子说:缺少hadoop.dllwinutils.exe

第一步:按照网上的方法本地hadoop的bin目录下缺少hadoop.dll 和 winutils 这两个东西,经过一顿操作把这两个文件放到hadoop的bin目录下依然不行

2. 发现一篇帖子说:将hadoop.dll文件放到C:\Windows\System32

这一步的时候我很疑惑,因为在环境变量中PATH引用了hadoop的bin目录,为什么hadoop.dll会读不到呢,不管了经过一顿操作重启了几遍依然不行,

3. 发现一篇帖子说:将winutils文件也放到C:\Windows\System32

这个时候也很疑惑但是一顿操作重启好几次依然不行

4. 发现一篇帖子说:改这个NativeIO.Class的源码直接改成true

这个时候也很懵逼,搞个hadoop还要改源码??官方代码不好使,这么水的吗???反正一顿操作还是不行

5. 发现一篇帖子说:在程序中指定hadoop.home.dir

System.setProperty("hadoop.home.dir","hadoop的文件路径" );依然花里胡哨搞了一遍没用

6. 发现一篇帖子说:在程序中强制加载bin目录下的hadoop.dll

System.load("D:\hadoop2.7.5\bin\hadoop.dll");这个看起来有些靠谱但就这个时候发现一个没见过的错误

Can't load AMD 64-bit .dll on a IA 32-bit platform 翻译:无法在IA 32位平台上加载AMD 64位.dll

这个错误直接把我搞蒙了,因为本机是64位怎么会识别成是32位的呢。

7. 发现一篇帖子说:C:\Windows\System32这个目录不行要使用C:\Windows\SysWOW64

把hadoop.dll和winutils放到这个目录下重启依然报错

8. 经过短暂的思考后

Can't load AMD 64-bit .dll on a IA 32-bit platform这个问题描述的32位指的不是本机而是运行环境,打开cmd窗口,输入java -version发现jdk是32位的(没有显示64-Bit就代表是32位的) ,打开Linux检查java版本是64位,这个时候卸载32位的jdk,安装64位版本,WordCount运行成功

总结:
  1. 检查环境变量是正确,jdk版本等运行环境系统位数是否对应
  2. 检查bin下面是否有hadoop.dll和winutils,经过测试没有这2个文件报错
  3. 我这里本机测试system32下没有hadoop.dll和winutils文件也不会报错,因为环境变量中已经引用到了bin目录而且里面有这两个文件,后续有因为这个错误的话再回来总结
  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值