前言
前一篇文章搭建了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或者域名信息是否寫對了,這些都是自己馬虎造成的,多多審查。