寫過程序分布式代碼的人都知道,分布式的程序是比較難以調試的,但是也不是不可以調試,對於Hadoop分布式集群來說,在其上面運行的是mapreduce程序,因此,有時候寫好了mapreduce程序之后,執行結果發現跟自己想要的結果不一樣,但是有沒有報錯,此時就很難發現問題,查找問題的方法之一就是對程序進行調試,跟蹤代碼的執行,找出問題的所在。那么對於Hadoop的Mapreduce是如何進行調試的呢?
毫無疑問當然是借助eclipse這個強大的工具。具體方式如下:
說明:由於公司服務器上部署的是Cloudera CDH5.4.4,在網上找了很多資料,沒有發現CDH5.4.4相關的eclipse插件,這可難倒我了。網上搜索很多人有跟我一樣的困境。但是在Apache Hadoop版本下就是不存在這樣的問題,對於這個問題,我暫時的解決方案是在本地搭建一個偽分布式的Apache Hadoop的集群。這個偽分布式集群就是用來給我的調試程序使用。當我們當程序調試好了,再直接導入到CDH版本的工程中即可。
1、搭建Apache Hadoop的偽分布式集群,這個問題請參考如下:
http://www.cnblogs.com/ljy2013/articles/4295341.html
2、在Apache Hadoop的版本中如何編譯插件?這個問題請參考如下:
http://www.cnblogs.com/ljy2013/articles/4417933.html
3、通過步驟2,我們已經可以創建Mapreduce程序了,下面實戰一下。
(1)打開eclipse集成開發環境的工具
(2)安裝步驟2方式,添加hadoop的安裝目錄。並添加Mapreduce的tools。
(3)編輯MapReduce tools,輸入本地部署的偽分布式的集群的主機名和端口。如下圖所示:
(4)此時eclipse中會出現DFS Location這樣一個標識,這個表示的是Hdfs,他能加載你偽分布式集群上的hdfs的所有目錄,你在這個上面操作就相當於在hdfs上面操作,前提是你擁有相應的權限。如下圖所示:(你可以在這個上面很方便的刪除測試文件)
(5)編寫Map/Reduce程序。在這里我們就用WordCount這個例子來調試一下。
編寫好了WordCount后,單擊調試,進入調試界面。如下圖所示:
(6)當你一直采用上面的方式調試后,中間會讓你選擇添加源文件的目錄,你添加一下就好了,然后姐可以進入我們的Map類中。如下圖所示:
此時,你就可以觀察和跟蹤在map類中的map方法的執行是否正確。找出問題的根源。
(7)同樣,當你在map中執行完后,接着就會進入reduce類中,這中間會敬禮一個shuffle過程。這個過程是理解MapReduce的關鍵所在,請參考:
http://www.cnblogs.com/ljy2013/articles/4435657.html
當你進入reduce類后,你可以看到如下圖所示:
此時,你可以跟蹤你的代碼是否是按照你的算法思路進行。查找問題的根源。