1. 程式人生 > >問題org.apache.hadoop.io.nativeio.NativeIO$Windows.createDirectoryWithMode0(Ljava/lang/String;I)V的解決方案

問題org.apache.hadoop.io.nativeio.NativeIO$Windows.createDirectoryWithMode0(Ljava/lang/String;I)V的解決方案

編號001(這一行為我自己為了方便起的標識,你們可以忽略……)

最近編寫了一個mapreduce程式,在eclipse中執行發現出現這個問題,百度各種方案都不行,花了好久才解決,現在把最近看過和親測過的方案整理如下,希望能讓別人早日出坑。
前提條件:

  1. Hadoop叢集(hadoop2.7.3)
  2. Java編譯環境(jdk1.8)
  3. 作業系統:win7
  4. IDE:eclipse
  5. hadoop外掛

下載附件
連結:https://pan.baidu.com/s/11hGqS-8d5fPCaS6-LcgM8g
提取碼:14wv

這個問題主要是hadoop.dll版本問題

  1. 首先將附件中的hadoop2.7.3解壓到本地一個目錄下(例如:D:\hadoop\hadoop-2.7.3,注:目錄不要有空格!!!,如果有空格之後修改配置檔案自己去百度如何轉義,jdk和hadoop目錄最好都不要有空格)

  2. 配置環境變數
    一、新建一個環境變數
    HADOOP_HOME=D:\hadoop\hadoop-2.7.3
    二、在Path環境變數後面追加:%HADOOP_HOME%\bin

  3. 到eclipse中為hadoop外掛定位安裝目錄
    在這裡插入圖片描述

  4. 配置hadoop連線引數
    在這裡插入圖片描述

5.然後連線成功我們就可以在DFSLocation看到自己hdfs中的檔案列表了
在這裡插入圖片描述

  1. 將附件中bin中的hadoop.dll和winutils.exe拷貝到hadoop2.7.3下的bin目錄下(應該只拷貝這兩個檔案即可,不過我在網上下載發現有好幾個其他檔案就都拷過去了,也沒什麼問題,你們可以試試只拷貝這兩個檔案能不能解決問題,可以告訴我一下)
  2. 將hadoop.dll檔案放在C:\Windows\System32目錄下
  3. 再執行程式即可執行成功!

**補充:**有的人說是這種通法解決不了問題,可以試試在程式碼中強制載入hadoop.dll檔案試試

static {
    try {
    	System.load("D:/Hadoop/hadoop-2.7.3/bin/hadoop.dll");
    } catch (UnsatisfiedLinkError e) {
      System.err.println("Native code library failed to load.\n" + e);
      System.exit(1);
    }
}

參考:https://blog.csdn.net/wyxeainn/article/details/81413544