1. 程式人生 > 實用技巧 >Hadoop3.2.1的eclipse外掛編譯嘗試

Hadoop3.2.1的eclipse外掛編譯嘗試

目錄

Hadoop3.2.1的eclipse外掛編譯嘗試(失敗)


內容

環境及軟體:

  • VMware workstation pro 15

  • CentOS 8

  • jdk1.8_202

  • Eclipse-Oxygen

  • Hadoop-3.2.1

  • ant元件

  • hadoop-eclipse-plugin原始檔

流程:

  1. 編譯準備
  2. hadoop-eclipse-plugin原始檔分析
  3. 編譯檔案修改
  4. 根據java錯誤日誌進行修改
  5. 最後的失敗

編譯準備

  1. 先準備Hadoop環境,安裝VMware、CentOS虛擬機器、jdk、Hadoop、ant元件、eclipse,可以百度或看我之前的筆記。

  2. 在Github下載hadoop-eclipse-plugin原始檔:

    原2x版本:https://github.com/winghc/hadoop2x-eclipse-plugin

    有人提交的3x版本:https://github.com/Woooosz/eclipse-hadoop3x

    兩個版本其實都一樣(最後問題都卡在同一個地方),但是,所謂的3x版本需要的編譯檔案比2x版本還少,估計不靠譜。


hadoop-eclipse-plugin原始檔分析

為了儘可能成功地編譯外掛,最好對原始檔結構有所瞭解,在參考學習許多博文和對原始檔測試、分析、大膽猜測後,大致得出以下結構(由於不會ivy和ant,可能有些地方不對):

  • 首先,原始檔的根目錄有以下檔案和資料夾:

    • release資料夾

      裡面存放的是已經編譯好的jar包,距今已有至少6年的歷史,適用於2.6及以下版本。

    • ivy.xml檔案和ivy資料夾

      用於專案依賴管理,有關ivy知識可以百度瞭解(因為我也不會),稍後我們需要修改ivy資料夾中的libraries.properties檔案(用於儲存要用的軟體、依賴包的版本資訊)以適應新版本Hadoop,xxx.properties都屬於配置檔案,用於儲存配置資訊。

    • src資料夾

      外掛的主要資料夾,功能實現和介面、構建檔案等都在裡面

  • 進入src資料夾

    • 首先我們能看到一個ivy.xml和ivy資料夾,我也不知道有啥用,刪掉也對外掛編譯沒有影響,和根目錄下的ivy結構內容完全一樣,可能是特殊設定?
    • 另外是一個contrib資料夾
  • 再進入src下的contrib資料夾

    • build.xml

      根據裡面的資訊,推測是正常構建失敗後,用於測試修復的檔案。

    • build-contrib.xml

      為build.xml構建流程儲存的路徑、檔案等配置資訊。

    • eclipse-plugin資料夾

      顧名思義,是真正的外掛資料夾

  • contrib資料夾

    • ivy.xml和ivy資料夾

      使用的是根目錄下ivy資料夾,根目錄大概是一種全域性設定,在這裡可以設定版本資訊,猜測是可以覆蓋原來的版本資訊(註釋這樣寫的,沒試過)。

    • build.xml和build.properties

      主要的構建檔案,會引用ivy和其他檔案所儲存的配置資訊包括依賴包版本號、各種檔案路徑等,之後我們需要在這裡編輯檔案資訊。

    • src資料夾

      類似於我們在java專案中的src包,儲存外掛實現的各種java包、類,實現對eclipse和hadoop的介面、操作等功能,大致功能根據包類的命名可以搞清楚,不多細說。

    • resources資料夾

      儲存在外掛在eclipse中要用到的圖片、提示資訊等,通過src中相應功能的類呼叫

    • makePlus.sh

      儲存了一個示例命令,麼啥用。

    • plugin.xml

      裡面是構建編譯src內外掛操作、ui、介面構建需要的資訊,感覺不需要更改。


編譯檔案修改

​ 對於3x版本的Hadoop,依賴jar包的版本和數量發生了不少變化,而所使用的eclipse的版本也發生了變化,這是我認為外掛無法使用的主要原因,為此,需要對外掛原始檔進行修改,在對很多博文學習參考大概有以下幾點需要修改:

​ 簡略地講,我們需要通過修改build.xml檔案來達到成功構建的目的,為此我們不妨先通過執行編譯命令來看看哪裡會出錯:

在contrib資料夾下:

ant jar -Dversion=Hadoop版本號 -Dhadoop.version=Hadoop版本號 -Declipse.home=eclipse根目錄路徑 -Dhadoop.home=Hadoop根目錄路徑

​ 然後我們會發現:跑到一半停住不動了??會在這裡停住:

ivy-resolve-common:

​ 這是因為在build過程中會有對ivy的依賴項查詢,由於我也不知道的原因,這裡查不到,而且根據我對某個檔案的分析,會停留很長時間。

​ 但事實上,在plugin中並沒有用到有關內容,所以我們可以直接刪除了事:

開啟build.xml檔案,刪除相關內容:

<target name="compile" depends="init, ivy-retrieve-common" unless="skip.contrib">

修改為:

<target name="compile" unless="skip.contrib"> 

這樣,我們就可以繼續build。

繼續執行命令,將碰到第二個問題:xxx檔案無法拷貝,因為找不到。

這是由於版本造成的問題,開啟build.xml,在檔案末尾我們可以看到copy了大量jar檔案,細看path內容,我們會發現檔名稱是引用變數,這些變數儲存在根目錄下ivy資料夾的libraries.properties檔案中。

從上面可以知道,這個檔案是用來儲存版本配置資訊的,我們需要更改裡面的版本為我們的hadoop的版本,通過對build.xml檔案的分析,我們需要根據 hadoop根目錄/share/hadoop/common/lib下jar包的不同版本修改改/ivy/libraries.properties中的對應版本號

這裡我推薦原2x版本Github下一個大佬提交的版本資訊->Update libraries.properties,同時還有他提交的build.xml檔案->Update build.xml,這是他為2.8版本做的,十分詳盡,我們可以參考他進行修改,當然,新版本也會有其他的改動,適當刪減,然後在build.xml內對於沒有的jar包刪除copy項,對於新增的jar包增加copy項,最終達到build完成的目的。

在修改完版本號後我們便可以再次編譯,編譯成功後,會在hadoop2x-eclipse-plugin-master/build/contrib路徑下生成了jar包:hadoop-eclipse-plugin-x.x.x.jar,其他的檔案不用理,只是把jar包裡的檔案列出來而已。

然後我們可以百度Hadoop-eclipse外掛啟動過程來啟動外掛


根據java錯誤日誌進行修改

當然,還有內容,說明仍然無法使用,使用之前生成的jar包,會發現右鍵Add New Location無反應,到目前為止,我們無從得知到底是哪發生錯誤。

這裡我們可以根據一個知乎大佬的方法進行排查:

連結:https://zhuanlan.zhihu.com/p/38630695

大致來說,就是根據java的錯誤日誌分析引發錯誤的原因,併成功找到兩個缺失的jar包:

woodstox-core-x.x.x.jar

stax2-api-x.x.x.jar

依舊是利用前面的方法進行新增。


最後的失敗

然而的然而,最後還是不能用。

前面提到,外掛能否使用,取決於以下3點:

  • Hadoop版本
  • Eclipse版本
  • Hadoop配置資訊

可能是因為Hadoop配置的原因,導致最後無法遠端連線Hadoop,錯誤提示是無法例項化hadoop的使用者組資訊類,沒找到相關依賴包或更有效資訊。

無奈使用了2x版本。


比較有價值的參考:

hadoop外掛的正常使用

2x版本的外掛

不知道是誰做的3x版本外掛,比起2x依賴項優點少

解決問題的案例,同時給了知乎大佬的連結

知乎大佬通過java日誌排查問題

怎麼看Java錯誤日誌

解決hadoop 叢集啟動常見錯誤辦法

https://blog.csdn.net/forking2009/article/details/77250533

基於idea的hadoop外掛-HadoopIntellijPlugin

hadoop異常

Hadoop叢集引數和常用埠

ERROR org.apache.hadoop.security.UserGroupInformation

hadoop 常見錯誤及解決辦法.doc

Could not initialize class org.apache.hadoop.conf.Configuration