1. 程式人生 > >Hadoop 一些錯誤解決

Hadoop 一些錯誤解決

1. Input path does not exist:file:/路徑名

     這個問題肯定是core-site.xl 配置檔案中fs.defaultFS配置項配置不正確。如果是本機執行hadoop,那麼需要修改配置檔案中此配置項為hdfs://IP:Port;如果是eclipse提交到伺服器執行,需要將自己的配置檔案add bulidpath,即配置檔案右鍵---Libraries---Add Class Folder。

   問題原因  

eclipse安裝完hadoop外掛後進行的配置如下。

     第一步:選擇 Window 選單下的 Preference。開啟Preference,此時會彈出一個窗體,窗體的左側會多出 Hadoop Map/Reduce 選項,點選此選項,選擇 Hadoop 的安裝目錄(如/usr/local/hadoop,Ubuntu不好選擇目錄,直接輸入就行)。

     第二步:切換 Map/Reduce 開發檢視,選擇 Window 選單下選擇 Open Perspective -> Other,彈出一個窗體,從中選擇 Map/Reduce 選項即可進行切換。

     第三步:建立與 Hadoop 叢集的連線。點選 Eclipse軟體右下角的 Map/Reduce Locations 面板,在面板中單擊右鍵,選擇 New Hadoop Location。在彈出來的 General 選項面板中,General 的設定要與 Hadoop 的配置一致。一般兩個 Host 值是一樣的,如果是偽分散式,填寫 localhost 即可,另外我使用的

Hadoop偽分散式配置,設定 fs.defaultFS 為 hdfs://localhost:9000,則 DFS Master 的 Port 要改為 9000。Map/Reduce(V2) Master 的 Port 用預設的即可,Location Name 隨意填寫。Advanced parameters 選項面板是對 Hadoop 引數進行配置,實際上就是填寫 Hadoop 的配置項(/usr/local/hadoop/etc/hadoop中的配置檔案),如我配置了 hadoop.tmp.dir ,就要進行相應的修改。但修改起來會比較繁瑣,我們可以通過複製配置檔案的方式解決(下面會說到)。總之,我們只要配置 General 就行了,點選 finish,Map/Reduce Location 就建立好了。

     在使用 Eclipse 執行 MapReduce 程式時,會讀取 Hadoop-Eclipse-Plugin 的 Advanced parameters 作為 Hadoop 執行引數,如果我們未進行修改,則預設的引數其實就是單機(非分散式)引數,因此程式執行時是讀取本地目錄而不是 HDFS 目錄,就會提示 Input 路徑不存在。所以我們要麼修改外掛引數,要麼將配置檔案複製到專案中的 src 目錄來覆蓋引數,才能讓程式能夠正確執行。

Exception in thread "main" org.apache.hadoop.mapreduce.lib.input.InvalidInputException: 
Input path does not exist: file:/home/hadoop/workspace/WordCountProject/input

 

2.java.io.IOException: There appears to be a gap in the edit log.  We expected txid 1, but got txid 11

     啟動namenode失敗,報錯如上。 

     原因:namenode元資料被破壞,需要修復
     解決:恢復一下namenode
          hadoop namenode -recover
     一路選擇y和c,一般就OK了

      此命令相當於重新format,因此也需要刪除hadoop.tmp.dir資料夾