新手写hadoop代码遇到的UnsatisfiedLinkError、IO、FileNotFoundException问题

系统环境

window10 64位+hadoop 2.10.1 +IntelliJ IDEA 2020.3.1 x64
说明:在对文件里的内容进行统计时,接连报了好几个问题,搞到凌晨1点多都没有解决好,求一个新手的心里阴影面

报错信息

1、FileNotFoundException

Caused by: java.io.FileNotFoundException: java.io.FileNotFoundException: HADOOP_HOME and hadoop.home.dir are unset. -see https://wiki.apache.org/hadoop/WindowsProblems
Caused by: java.io.FileNotFoundException: HADOOP_HOME and hadoop.home.dir are unset.
	at org.apache.hadoop.util.Shell.checkHadoopHomeInner(Shell.java:454)

2、IOException

Exception in thread "main" java.io.IOException: Cannot run program "E:\大数据开发工具\hadoop-2.10.1\bin\winutils.exe": CreateProcess error=216, 该版本的 %1 与你运行的 Windows 版本不兼容。请查看计算机的系统信息,然后联系软件发布者。
	at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
	at org.apache.hadoop.util.Shell.runCommand(Shell.java:925)

3、UnsatisfiedLinkError

Exception in thread "main" java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z

解决方法

在网上搜了一些解决方法,大致分为三类
1、在hadoop的bin目录下下载相应的hadoop.dll、hdfs.dll、winutils.exe,并将hadoop.dll放在c:\windows\system32 下的、重起IDEA即可。
这里方法没有成功
2、手工加载hadoop.dll

  public static void main(String[] args) throws InterruptedException, IOException, ClassNotFoundException {

         //手动加载hadoop.dll解决nativeio.NativeIO$Windows.access0错误
        **System.load("E:\\大数据开发工具\\hadoop-2.10.1\\bin\\hadoop.dll");**
        //一、初始化一个JOB
        Configuration configuration = new Configuration();
        Job job = Job.getInstance(configuration,"WordCount");

3、直接修改相应的源码
修改方式见参考资料中的网址**,本人没有验证过**

最终是采用第二种方案解决了该问题。
说明 :本机上已经安装好hadoop,设置HADOOP环境变量并加载入的系统PATH路径里去

总结与思考

1、新手遇到问题解决起来太费时间了,但收获也在于此
2、第三类解决方式直击问题本身,后面应该尝试修改源码
3、网上有很多的解决方法,但错误是自己经历的,应该记下来
4、这里没有找到hadoop2.10.1对应的hadoop.dll、hdfs.dll、winutils.exe三个文件,我是使用的2.9.2版本,有需要的网友可以留言
5、没有搞懂为什么了官网的hadoop2.10.1源码包没有包含上面三个文件

参考资料

https://www.cnblogs.com/jhxxb/p/10723369.html
https://www.cnblogs.com/duking1991/p/6111490.html
https://blog.csdn.net/weinichendian/article/details/72960220

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值