hadoop使用中的bug
- 前言
- bug1
-
- 解決
- bug2
-
- 解決
- 總結
前言
前一篇文章搭建了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或者域名資訊是否寫對了,這些都是自己馬虎造成的,多多審查。