問題org.apache.hadoop.io.nativeio.NativeIO$Windows.createDirectoryWithMode0(Ljava/lang/String;I)V的解決方案
阿新 • • 發佈:2018-12-06
編號001(這一行為我自己為了方便起的標識,你們可以忽略……)
最近編寫了一個mapreduce程式,在eclipse中執行發現出現這個問題,百度各種方案都不行,花了好久才解決,現在把最近看過和親測過的方案整理如下,希望能讓別人早日出坑。
前提條件:
- Hadoop叢集(hadoop2.7.3)
- Java編譯環境(jdk1.8)
- 作業系統:win7
- IDE:eclipse
- hadoop外掛
下載附件
連結:https://pan.baidu.com/s/11hGqS-8d5fPCaS6-LcgM8g
提取碼:14wv
這個問題主要是hadoop.dll版本問題
-
首先將附件中的hadoop2.7.3解壓到本地一個目錄下(例如:D:\hadoop\hadoop-2.7.3,注:目錄不要有空格!!!,如果有空格之後修改配置檔案自己去百度如何轉義,jdk和hadoop目錄最好都不要有空格)
-
配置環境變數
一、新建一個環境變數
HADOOP_HOME=D:\hadoop\hadoop-2.7.3
二、在Path環境變數後面追加:%HADOOP_HOME%\bin -
到eclipse中為hadoop外掛定位安裝目錄
-
配置hadoop連線引數
5.然後連線成功我們就可以在DFSLocation看到自己hdfs中的檔案列表了
- 將附件中bin中的hadoop.dll和winutils.exe拷貝到hadoop2.7.3下的bin目錄下(應該只拷貝這兩個檔案即可,不過我在網上下載發現有好幾個其他檔案就都拷過去了,也沒什麼問題,你們可以試試只拷貝這兩個檔案能不能解決問題,可以告訴我一下)
- 將hadoop.dll檔案放在C:\Windows\System32目錄下
- 再執行程式即可執行成功!
**補充:**有的人說是這種通法解決不了問題,可以試試在程式碼中強制載入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); } }