前言
前一篇文章搭建了hadoop集群,这篇文章,针对的是window上做开发时的日常踩坑。
bug1
这个问题一开始挺郁闷的,HADOOP_HOME and hadoop.home.dir are unset
服务器设置环境变量的时候,HADOOP_HOME这个我是有设置的,但这个hadoop.home.dir are unset却是第一次见到。
解决
找了些文章,有些竟然说还需要在windows上部署一个和服务器上版本一样的hadoop。。这想想就觉得不可能这么坑吧,程序员都是比较懒的,要不然就不会有那么多框架、组件了,肯定有其他好的解决办法。然后找到如下的解决办法:
去GitHub,根据你的hadoop版本下载对应的版本bin文件(原来window上开发,和服务器集群交互时,需要winutil.exe模拟linux下的目录环境?)版本对应对某些hadoop版本来说可能有要求,我是hadoop2.10的,并没有对应的版本,但也能用。
ps:竟然有人用这个东西来赚积分,看到的时候果断关掉网页。。。
我用的springboot,直接在启动的时候加入hadoop.home.dir
设置,注意,不用指定到bin文件夹
,否则,也会报错,默认读取的时候会自动补上/bin。
public class HadoopApplication {
public static void main(String[] args) {
System.setProperty("hadoop.home.dir", "F:\\hadoop-common-2.2.0-bin-master");
SpringApplication.run(HadoopApplication.class);
}
}
bug2
这个是在编写MapReduce时候遇到的java.lang.UnsatisfiedLinkError:
,也是有点醉了,找了些资料解决:
java.lang.UnsatisfiedLinkError:
org.apache.hadoop.io.nativeio.
NativeIO$Windows.access0
(Ljava/lang/String;I)Z
解决
原来windows上开发,还需要添加一个库,叫做hadoop.dll
文件,这个文件在上面下载bin文件夹里头就有。同样在启动的时候进行加载。
@SpringBootApplication
public class HadoopApplication {
public static void main(String[] args) {
System.setProperty("hadoop.home.dir", "F:\\hadoop-common-2.2.0-bin-master");
// 加载库文件
System.load("F:\\hadoop-common-2.2.0-bin-master\\bin\\hadoop.dll");
SpringApplication.run(HadoopApplication.class);
}
}
总结
上面的解决方案,是基于自己的linux集群上的hadoop2.10版本和本地windows开发环境而总结出的解决方案。除此之外,也还需要注意自己上传到hdfs的地址是否有误,ip或者域名信息是否写对了,这些都是自己马虎造成的,多多审查。