背景
我的运行环境是:64位windows10+vm12+cdh5.15.1
我在本地IDEA上写java代码,实现mapreduce功能,在本地环境添加了hadoop需要的jar包。运行时,连接本地虚拟机的hadoop环境,进行调试。可是,出现两个错误,分别是:
Failed to detect a valid hadoop home directory
java.io.IOException: HADOOP_HOME or hadoop.home.dir are not set.
Exception in thread "main" java.lang.UnsatisfiedLinkError:
org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z
解决方案
第一步:将VM上运行的hadoop打包,打包完点击复制,粘贴到E盘或者某个盘。
第二步:解压tar.gz文件。我使用的是7z解压的,winrar反正我没有成功。
第三步:网上找到对应版本的winutils.exe放到解压后的hadoop的bin目录下。
第四步:网上找到NativeIO.java,在IDEA项目目录建立package,名为org.apache.hadoop.io.nativeio,然后将NativeIO.java放进去。
第五步:在项目运行文件中添加:System.setProperty(“hadoop.home.dir”, “E:\hadoop-2.6.0-cdh5.15.1”),设置主目录。
到此,解决了这个问题,可以运行自己的项目!
文章提到的两个文件,链接: https://pan.baidu.com/s/1Az9yM1meOGrO4hxVI6jaFw 提取码: kvxu
补充:最近有朋友发现这样做了依旧会出现第二个错误,原来是配置了曾经的其他版本HADOOP的HADOOP_HOME,并且在Path中也有配置,删除这些之后运行正常。