eclipse/intellij idea 遠程調試hadoop 2.6.0

轉載自:http://www.cnblogs.com/yjmyzz/p/how-to-remote-debug-hadoop-with-eclipse-and-intellij-idea.html

很多hadoop初學者估計都我一樣,由於沒有足夠的機器資源,只能在虛擬機里弄一個linux安裝hadoop的僞分佈,然後在host機上win7裏使用eclipse或Intellj idea來寫代碼測試,那麼問題來了,win7下的eclipse或intellij idea如何遠程提交map/reduce任務到遠程hadoop,並斷點調試?

一、準備工作

1.1 在win7中,找一個目錄,解壓hadoop-2.6.0,本文中是D:\yangjm\Code\study\hadoop\hadoop-2.6.0 (以下用$HADOOP_HOME表示)

1.2 在win7中添加幾個環境變量

HADOOP_HOME=D:\yangjm\Code\study\hadoop\hadoop-2.6.0

HADOOP_BIN_PATH=%HADOOP_HOME%\bin

HADOOP_PREFIX=D:\yangjm\Code\study\hadoop\hadoop-2.6.0

另外,PATH變量在最後追加;%HADOOP_HOME%\bin

二、eclipse遠程調試

1.1 下載hadoop-eclipse-plugin插件

hadoop-eclipse-plugin是一個專門用於eclipse的hadoop插件,可以直接在IDE環境中查看hdfs的目錄和文件內容。其源代碼託管於github上,官網地址是https://github.com/winghc/hadoop2x-eclipse-plugin

有興趣的可以自己下載源碼編譯,百度一下N多文章,但如果只是使用 https://github.com/winghc/hadoop2x-eclipse-plugin/tree/master/release%20 這裏已經提供了各種編譯好的版本,直接用就行,將下載後的hadoop-eclipse-plugin-2.6.0.jar複製到eclipse/plugins目錄下,然後重啓eclipse就完事了

1.2 下載windows64位平臺的hadoop2.6插件包(hadoop.dll,winutils.exe)

在hadoop2.6.0源碼的hadoop-common-project\hadoop-common\src\main\winutils下,有一個vs.net工程,編譯這個工程可以得到這一堆文件,輸出的文件中,

hadoop.dll、winutils.exe 這二個最有用,將winutils.exe複製到$HADOOP_HOME\bin目錄,將hadoop.dll複製到%windir%\system32目錄 (主要是防止插件報各種莫名錯誤,比如空對象引用啥的)

注:如果不想編譯,可直接下載編譯好的文件 hadoop2.6(x64)V0.2.zip

1.3 配置hadoop-eclipse-plugin插件

啓動eclipse,windows->show view->other

window->preferences->hadoop map/reduce 指定win7上的hadoop根目錄(即:$HADOOP_HOME)

點擊查看原圖

然後在Map/Reduce Locations 面板中,點擊小象圖標

點擊查看原圖

添加一個Location

這個界面灰常重要,解釋一下幾個參數:

Location name 這裏就是起個名字,隨便起

Map/Reduce(V2) Master Host 這裏就是虛擬機裏hadoop master對應的IP地址,下面的端口對應 hdfs-site.xml裏dfs.datanode.ipc.address屬性所指定的端口

DFS Master Port: 這裏的端口,對應core-site.xml裏fs.defaultFS所指定的端口

最後的user name要跟虛擬機裏運行hadoop的用戶名一致,我是用hadoop身份安裝運行hadoop 2.6.0的,所以這裏填寫hadoop,如果你是用root安裝的,相應的改成root

這些參數指定好以後,點擊Finish,eclipse就知道如何去連接hadoop了,一切順利的話,在Project Explorer面板中,就能看到hdfs裏的目錄和文件了

可以在文件上右擊,選擇刪除試下,通常第一次是不成功的,會提示一堆東西,大意是權限不足之類,原因是當前的win7登錄用戶不是虛擬機裏hadoop的運行用戶,解決辦法有很多,比如你可以在win7上新建一個hadoop的管理員用戶,然後切換成hadoop登錄win7,再使用eclipse開發,但是這樣太煩,最簡單的辦法:

hdfs-site.xml裏添加

1  <property>
2     <name>dfs.permissions</name>
3     <value>false</value>
4  </property>

然後在虛擬機裏,運行hadoop dfsadmin -safemode leave

保險起見,再來一個 hadoop fs -chmod 777 /

總而言之,就是徹底把hadoop的安全檢測關掉(學習階段不需要這些,正式生產上時,不要這麼幹),最後重啓hadoop,再到eclipse裏,重複剛纔的刪除文件操作試下,應該可以了。

1.4 創建WoldCount示例項目

新建一個項目,選擇Map/Reduce Project

後面的Next就行了,然後放一上WodCount.java,代碼如下:

 View Code

然後再放一個log4j.properties,內容如下:(爲了方便運行起來後,查看各種輸出)

 View Code

最終的目錄結構如下:

然後可以Run了,當然是不會成功的,因爲沒給WordCount輸入參數,參考下圖:

1.5 設置運行參數

點擊查看原圖

因爲WordCount是輸入一個文件用於統計單詞字,然後輸出到另一個文件夾下,所以給二個參數,參考上圖,在Program arguments裏,輸入

hdfs://172.28.20.xxx:9000/jimmy/input/README.txt
hdfs://172.28.20.xxx:9000/jimmy/output/

大家參考這個改一下(主要是把IP換成自己虛擬機裏的IP),注意的是,如果input/READM.txt文件沒有,請先手動上傳,然後/output/ 必須是不存在的,否則程序運行到最後,發現目標目錄存在,也會報錯,這個弄完後,可以在適當的位置打個斷點,終於可以調試了:

點擊查看原圖

三、intellij idea 遠程調試hadoop

3.1 創建一個maven的WordCount項目

pom文件如下:

 View Code

項目結構如下:

項目上右擊-》Open Module Settings 或按F12,打開模塊屬性

添加依賴的Libary引用

點擊查看原圖

然後把$HADOOP_HOME下的對應包全導進來

點擊查看原圖

導入的libary可以起個名稱,比如hadoop2.6

點擊查看原圖

3.2 設置運行參數

點擊查看原圖

注意二個地方:

1是Program aguments,這裏跟eclipes類似的做法,指定輸入文件和輸出文件夾

2是Working Directory,即工作目錄,指定爲$HADOOP_HOME所在目錄

然後就可以調試了

點擊查看原圖

intellij下唯一不爽的,由於沒有類似eclipse的hadoop插件,每次運行完wordcount,下次再要運行時,只能手動命令行刪除output目錄,再行調試。爲了解決這個問題,可以將WordCount代碼改進一下,在運行前先刪除output目錄,見下面的代碼:

 View Code

 但是光這樣還不夠,在IDE環境中運行時,IDE需要知道去連哪一個hdfs實例(就好象在db開發中,需要在配置xml中指定DataSource一樣的道理),將$HADOOP_HOME\etc\hadoop下的core-site.xml,複製到resouces目錄下,類似下面這樣:

裏面的內容如下:

複製代碼
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://172.28.20.***:9000</value>
    </property>
</configuration>
複製代碼

上面的IP換成虛擬機裏的IP即可



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