1. 程式人生 > >IntelliJ IDEA2018配置Hadoop2.7.2閱讀環境並執行偽分散式

IntelliJ IDEA2018配置Hadoop2.7.2閱讀環境並執行偽分散式

1. 下載hadoop原始碼並編譯

$ sudo tar -zxvf hadoop-2.7.2-src.tar.gz

將解壓縮的原始碼包,複製到/usr/local目錄下:

$ sudo cp -rf hadoop-2.7.2-src /usr/lcoal

② 根據hadoop-2.7.2-srcBUILDING.txt中的要求,配置好編譯環境。

      可以參考另一篇博文hadoop原始碼編譯環境配置

③ 編譯Hadoop2.7.2原始碼 進入/usr/local/hadoop-2.7.2-src進行原始碼編譯,編譯命令如下:

$ mvn clean package -Pdist,native -DskipTests -Dtar

編譯成功,資訊顯示如下(後面部分,不完整): 在這裡插入圖片描述

2. 配置IntelliJ IDEA2018的maven環境

① maven路徑配置 (1)未開啟專案,通過configure–>Settings開啟;如果已經打開了專案,可以通過File–>Settings開啟,如圖: 在這裡插入圖片描述 (2)在搜尋框中輸入maven,選擇左側Maven選項,在Maven home directory:中,選擇自己剛剛配置好的maven home路徑: 在這裡插入圖片描述User setting file:中,選擇剛剛配置好的,本機的settings.xml檔案: 在這裡插入圖片描述 下面的Local repository:,idea會自動檢測,如上圖所示。 ② maven的JDK配置

選擇左側Importing選項,設定JDK for importer,改為剛剛安裝的jdk home路徑(也可以忽略這一步): 在這裡插入圖片描述

3. 以maven方式匯入編譯好的hadoop原始碼:

(1)選擇Import Project,匯入已經存在的hadoop專案: 在這裡插入圖片描述 (2)選擇編譯好的hadoop原始碼(自己這裡叫hadoop-plugin),點選OK: 在這裡插入圖片描述 (3)在Import project from external model中選擇Maven(一般idea已經自動選擇好了),點選OK: 在這裡插入圖片描述 (4)接下來的視窗中,不需要選擇任何選項,直接點選Next: 在這裡插入圖片描述 (5)接下來的視窗中,不需要選擇任何選項,直接點選Next: 在這裡插入圖片描述

(6)接下來的視窗中,org.apache.hadoop:hadoop-main:2.7.2已經被選中,直接點選Next: 在這裡插入圖片描述 (7)選擇配置好的JDK版本(Name)以及路徑(JDK home path),點選Next: 在這裡插入圖片描述 (8)首先檢查檔案路徑是否正確,再點選Finish: 在這裡插入圖片描述 等待idea自己完成匯入,就已經OK了。

4. 開啟hadoop偽分散式環境:

hadoop分散式環境需要Namenode、Datanode、Resourcemanager、Nodemanager四個基本程序,通過找到Namenode.javaDatanode.javaResourcemanager.javaNodemanager.java中的main()函式,開啟hadoop偽分散式環境。 ① 開啟Namenode程序 (1)通過快捷鍵Ctrl+N,搜尋namenode,找到位於包org.apache.hadoop.hdfs.server.namenode中的NameNode類,點選開啟: 在這裡插入圖片描述 (2)在程式碼框中,右鍵選擇Debug 'NameNode.main()',通過debug的方式開啟Namenode程序: build完成後報錯如下: 在這裡插入圖片描述 解決方法: 這是因為不同模組之間的依賴未新增,找不到的類,屬於hadoop-common模組。

  • 點選選單File-->Project structure,在左側欄選擇Module,在中間的列表中選擇hadoop-hdfs,在中上位置的tab中,選擇Dependencies。在中間的依賴列表中,找到hadoop-common,將其scope更改為Provided在這裡插入圖片描述

  • 勾選hadoop-common,點選Apply,發現彈出錯誤: 在這裡插入圖片描述

  • 重新在中間欄找到hadoop-streaming,選擇Source,點選最右邊的/../conf後面的x,在彈出的視窗中點選Yes: 在這裡插入圖片描述

  • 再重新回到hadoop-hdfs,重新勾選hadoop-common點選Apply,再點選OK即可。

  • 再點選選單欄Run-->Edit configuration,在出現的視窗中,勾選Include dependencies with 'Provided' scope,點選OK,重新以debug方式執行NameNode.main()在這裡插入圖片描述 (3)重新執行以後,發現NameNode程序啟動成功,但是自動退出。這是因為首次執行NameNode,需要進行格式化(format): 在這裡插入圖片描述 解決方法: 點選選單欄Run-->Edit configuration,在出現的視窗中,在Program arguments處新增-format,點選OK,再重新debug執行: 在這裡插入圖片描述 debug執行的結果如下,因為我這裡已經格式化過,所以需要我自己決定是否重新格式化: 在這裡插入圖片描述 (4)點選選單欄Run-->Edit configuration,在出現的視窗中,在Program arguments處去除剛剛新增的-format,點選OK,再重新debug執行。發現NameNode程序還是啟動成功,但是又自動退出:

解決方法: 找到hadoop-hdfs-->src-->main,右鍵單擊,選擇Mark Directory as-->Source root,設定好後,main目錄資料夾圖示變成下圖所示: 在這裡插入圖片描述 (5)重新debug執行,發現NameNode程序啟動成功,並未退出! 在這裡插入圖片描述 ② 開啟Datanode程序 (1)通過快捷鍵Ctrl+N,搜尋datanode,找到位於包org.apache.hadoop.hdfs.server.datanode中的DataNode類,點選開啟: 在這裡插入圖片描述

(2)在程式碼框中,右鍵選擇Debug 'DataNode.main()',通過debug的方式開啟DataNode程序: build報錯如下: 在這裡插入圖片描述 解決方法: 點選選單欄Run-->Edit configuration,在出現的視窗中,勾選Include dependencies with 'Provided' scope,點選OK,重新以debug方式執行DataNode.main()在這裡插入圖片描述 (3)由於自己已經格式化過namenode,再次格式化namenode之前,之前應該刪除/tmp目錄下的所有檔案,我的是/tmp/hadoop-lucy原因: 當我們執行檔案系統格式化時,會在namenode資料資料夾(即配置檔案中dfs.name.dir在本地系統的路徑)中儲存一個current/VERSION檔案,記錄namespaceID,標誌了所有格式化的namenode版本。如果我們頻繁的格式化namenode,那麼datanode中儲存(即dfs.data.dir在本地系統的路徑)的current/VERSION檔案只是你地第一次格式化時儲存的namenode的ID,因此就會造成namenode和datanode之間的ID不一致。

③ 開啟ResourceManager程序 (1)通過快捷鍵Ctrl+N,搜尋resourcemanager,找到位於包org.apache.hadoop.yarn.server.resourcemanager中的ResourceManager類,點選開啟: 在這裡插入圖片描述

(2)在程式碼框中,右鍵選擇Debug 'ResourceManager.main()',通過debug的方式開啟ResourceManager程序: build報錯如下: 在這裡插入圖片描述 解決方法: 點選選單欄Run-->Edit configuration,在出現的視窗中,勾選Include dependencies with 'Provided' scope,點選OK,重新以debug方式執行ResourceManager.main()在這裡插入圖片描述

④ 開啟NodeManager程序 (1)通過快捷鍵Ctrl+N,搜尋nodemanager,找到位於包org.apache.hadoop.yarn.server.nodemanager中的NodeManager類,點選開啟: 在這裡插入圖片描述 (2)在程式碼框中,右鍵選擇Debug 'NodeManager.main()',通過debug的方式開啟NodeManager程序: build報錯如下: 在這裡插入圖片描述 解決方法: 點選選單欄Run-->Edit configuration,在出現的視窗中,勾選Include dependencies with 'Provided' scope,點選OK,重新以debug方式執行NodeManager.main()在這裡插入圖片描述