bug填坑|hadoop使用


前言

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章