天天看點

bug填坑|hadoop使用前言bug1bug2總結

hadoop使用中的bug

  • 前言
  • bug1
    • 解決
  • bug2
    • 解決
  • 總結

前言

前一篇文章搭建了hadoop叢集,這篇文章,針對的是window上做開發時的日常踩坑。

bug1

這個問題一開始挺郁悶的,

HADOOP_HOME and hadoop.home.dir are unset

伺服器設定環境變量的時候,HADOOP_HOME這個我是有設定的,但這個hadoop.home.dir are unset卻是第一次見到。

bug填坑|hadoop使用前言bug1bug2總結
bug填坑|hadoop使用前言bug1bug2總結

解決

找了些文章,有些竟然說還需要在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);
    }
}

           
bug填坑|hadoop使用前言bug1bug2總結

bug2

這個是在編寫MapReduce時候遇到的

java.lang.UnsatisfiedLinkError:

,也是有點醉了,找了些資料解決:

java.lang.UnsatisfiedLinkError: 
org.apache.hadoop.io.nativeio.
NativeIO$Windows.access0
(Ljava/lang/String;I)Z
           
bug填坑|hadoop使用前言bug1bug2總結

解決

原來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);
    }
}
           
bug填坑|hadoop使用前言bug1bug2總結

總結

上面的解決方案,是基于自己的linux叢集上的hadoop2.10版本和本地windows開發環境而總結出的解決方案。除此之外,也還需要注意自己上傳到hdfs的位址是否有誤,ip或者域名資訊是否寫對了,這些都是自己馬虎造成的,多多審查。

繼續閱讀