使用Eclipse連接Hadoop集羣的實踐筆記

本筆記記錄如何使Linux上的Eclipse能連接到Hadoop集羣,這個配置是讓我們開發hdfs和MapReduce程序更方便一點。當然你省略這一步不厭其煩地每次選擇用 命令行編譯打包運行自己的MapReduce程序也沒關係,但是這樣每一次開發MapReduce程序都很麻煩。麻煩一次方便多次還是十分划算的。

下面我們就搞起

請確保Linux上已搭建好Hadoop集羣(這是廢話)

搭建Hadoop集羣請參考:小坨的CentOS6.4搭建hadoop集羣的實踐筆記

請確保Linux上已經裝好Eclipse(這也是廢話)

在 CentOS 中安裝 Eclipse,需要下載安裝程序,我們選擇 Eclipse IDE for Java Developers 版:

下載後執行解壓命令,將 Eclipse 安裝至 /usr/lib 目錄中:

sudo tar -zxf ~/Downloads/eclipse-java-mars-1-linux-gtk*.tar.gz -C /usr/lib

解壓後即可使用。

也可以進一步地在 CentOS 中爲程序創建桌面快捷方式,如下圖所示,點擊桌面右鍵,選擇Create Launcher,填寫名稱和程序位置(/usr/lib/eclipse/eclipse)

在這裏插入圖片描述

下載 Hadoop-Eclipse-Plugin

要在 Eclipse 上編譯和運行 MapReduce 程序,需要安裝 hadoop-eclipse-plugin,官方下載地址是:https://github.com/winghc/hadoop2x-eclipse-plugin

然後現在有個問題

  • 下載該插件是從github上下載的,github的網速慢到一匹是衆所周知的,下起來十幾KB/s差不多,建議立馬轉用碼雲下載,一兩分鐘就好了。具體操作請見:解決從GitHub下載文件慢的問題
  • 或者更省事的是到我的碼雲倉庫上下載,我已經把它拉過來了:[阿坨][hadoop2x-eclipse-plugin]。但是上面介紹的方法能解決大多數從GitHub下載文件過慢的問題。

下載下來了就解壓,注意下載下來的壓縮包是zip格式的,使用壓縮命令解壓

unzip atuo-200-hadoop2x-eclipse-plugin-master.zip 

下載下來的文件提供了hadoop-eclipse-kepler-plugin-2.6.0.jar (還提供了 2.2.0 和 2.4.1 版本的),release目錄下找。插件的版本要和hadoop的版本對應起來,如果自己想要的版本在其中找不到,那麼就需要自己編譯了。我自己的hadoop版本是2.7.7的,感jio到有點悲傷,但學習階段,一步一個jio印。如果自己的Hadoop版本是2.6.0、2.2.0、2.4.1,那麼可以跳過下面的安裝ant和編譯Hadoop-Eclipse-Plugin這兩步。

安裝ant

在編譯之前我們還缺個ant。

安裝地址:http://ant.apache.org/bindownload.cgi

可以選擇安裝apache-ant-1.9.14-bin.tar.gz

安裝下來解壓

tar -zxvf apache-ant-1.9.14-bin.tar.gz -C 指定的解壓目錄

配置環境變量

vim ~/.bashrc

export ANT_HOME=/home/hadoop/Downloads/apache-ant-1.9.14
export PATH=$JAVA_HOME/bin:$ANT_HOME/bin:$PATH

source ~/.bashrc 一下使環境變量生效

輸入ant -version看看環境變量有沒有配置成功。

在這裏插入圖片描述

編譯Hadoop-Eclipse-Plugin

接下來編譯

官方文檔已經很簡潔告訴我們怎麼編譯了:https://github.com/winghc/hadoop2x-eclipse-plugin(敲黑板!看文檔)

在這裏插入圖片描述

跟着官方文檔開始擼命令(請進入hadoop2x-eclipse-plugin\src\contrib\eclipse-plugin目錄下擼命令)

ant jar -Dversion=2.7.7 -Dhadoop.version=2.7.7 -Declipse.home=/home/hadoop/program/eclipse -Dhadoop.home=/usr/local/hadoop

2.7.7是我要編譯的Hadoop-Eclipse-Plugin版本號和hadoop版本號,/home/hadoop/program/eclipse是我的Eclipse安裝目錄,/usr/local/hadoop是我的hadoop安裝目錄。

跑這行命令時發現命令行在ivy-resolve-common處卡了。

原因是找不到幾個依賴包,那幾個依賴包可能是換路徑了,但是不需要這幾個依賴包也不影響編譯,那我們到相關的配置項中去掉這幾個依賴。

解決方案

修改Hadoop-Eclipse-Plugin/src/contrib/eclipse-plugin/build.xml

找到:

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

去掉depends修改爲

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

再次執行上面的編譯命令,會提示copy不到相關jar包的錯誤,

解決方案

修改Hadoop-Eclipse-Plugin(自個的Hadoop-Eclipse-Plugin解壓目錄)/ivy/libraries.properties文件,將報錯的jar包版本號跟換成與hadoop-2.7.7(自個的Hadoop安裝目錄)/share/hadoop/common/lib下面jar對應的版本號。

此步可能會有多個jar包版本不匹配,需要多次修改。

編譯成功生成的hadoop-eclipse-plugin-2.7.7.jar在Hadoop-Eclipse-Plugin/build/contrib/eclipse-plugin路徑下

在這裏插入圖片描述

安裝Hadoop-Eclipse-Plugin

把編譯好的hadoop-eclipse-plugin-2.7.7.jar複製到 Eclipse 安裝目錄的dropins文件夾中(具體放在還是 plugins要依賴於Eclipse的版本,要是不放心可以兩個目錄都放一遍)。

進入到Eclipse的安裝目錄,啓動Eclipse

./eclipse -clean		#沒配置Eclipse環境變量的,請不要省略./

調出Project Explorer視圖:window->show view->Project Explorer。

可以看到Project Explorer的試圖中有DFS Locations的圖標,證明Hadoop-Eclipse-Plugin插件已經安裝上了。

在這裏插入圖片描述

配置Hadoop-Eclipse-Plugin

在配置之前請先開啓Hadoop集羣。

start-all.sh

Hadoop-Eclipse-Plugin插件需要進一步的配置。

第一步:選擇 Window 菜單下的 Preference

此時會彈出一個窗體,窗體的左側會多出 Hadoop Map/Reduce 選項,點擊此選項,選擇 Hadoop 的安裝目錄,然後點擊OK關閉窗體。

在這裏插入圖片描述

第二步:切換 Map/Reduce 開發視圖, Window -> Open Perspective -> Other),彈出一個窗體,從中選擇 Map/Reduce 選項並點擊OK。
在這裏插入圖片描述

第三步:建立與 Hadoop 集羣的連接,點擊 Eclipse軟件右下角的 Map/Reduce Locations 面板,在面板中單擊右鍵,選擇 New Hadoop Location。
在這裏插入圖片描述
在彈出來的選項面板中,General 的設置要與 Hadoop 的配置一致。
在這裏插入圖片描述
Location name隨便填寫,因爲做了主機名和IP的映射,所以Host地址我填的Master,50020是我集羣上JobTracker端口,9000即我集羣上的HDFS端口(fs.defaultFS 爲 hdfs://localhost:9000)。

總之,我們只要配置 General 就行了,點擊 finish,conn7就創建好了。

說點題外話

General 選項面板隔壁的Advanced parameters 選項面板是對 Hadoop 參數進行配置,實際上就是填寫 Hadoop 的配置項(hadoop安裝目錄/etc/hadoop中的配置文件)

在Eclipse中連接Hadoop集羣(前方有bug)

上一步配置好後,正常的話點擊左側 Project Explorer 中的 MapReduce Location (點擊三角形展開)就能連上Hadoop集羣,在左側project Export直接查看 HDFS 中的文件列表了(HDFS 中要有文件),雙擊可以查看內容,右鍵點擊可以上傳、下載、刪除 HDFS 中的文件,無需再通過繁瑣的 hdfs dfs -ls 等命令進行操作了。

但在這裏報出了一個bug

An internal error occurred during: “Connecting to DFS connect”.
org/apache/commons/io/Charsets

無法初始化類org/apache/commons/io/Charsets

我尋思着這是個找不到某文件的報錯,我懷疑是編譯的Hadoop-Eclipse-Plugin的jar包缺少文件。

我去搜了一圈博客,果8其然,我找到了報錯原因:項目啓動報錯:java.lang.NoClassDefFoundError: org/apache/commons/io/Charsets

是個編譯的Hadoop-Eclipse-Plugin插件缺少jar包以及兩個jar包之間有類名衝突的問題。

於是我去Hadoop的安裝目錄下把缺少的commons-io-2.4.jar包加進插件的lib目錄下,然後,需要去修改插件下META-INF目錄下的MANIFEST.MF,將classpath添加以下內容:

lib/commons-io-2.4.jar

並且刪除

lib/guava-11.0.2.jar

否則該插件不知道要初始化哪個org/apache/commons/io/Charsets。

debug思路參考:配置Eclipse的Hadoop插件時無法連接HDFS的解決辦法

然後重新打開Eclipse,重新建立與Hadoop集羣的連接,連接建立成功。

在這裏插入圖片描述

我們能直接在Eclipse中查看 HDFS 中的文件列表(HDFS 中要有文件),雙擊可以查看內容,右鍵點擊可以上傳、下載、刪除 HDFS 中的文件,而無需再通過繁瑣的 hdfs dfs -ls 等命令進行操作了。

注意:HDFS 中的內容變動後,Eclipse 不會同步刷新,需要右鍵點擊 Project Explorer中的 MapReduce Location,選擇 Refresh,才能看到變動後的文件。

只是一篇簡單的實踐小筆記,暫且先寫到這裏。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章