1. 程式人生 > >hadoop學習之HDFS(2.5):windows下eclipse遠端連線linux下的hadoop叢集並測試wordcount例子

hadoop學習之HDFS(2.5):windows下eclipse遠端連線linux下的hadoop叢集並測試wordcount例子

windows下eclipse遠端連線linux下的hadoop叢集不像在linux下直接配置eclipse一樣方便,會出現各種各樣的問題,處處是坑,連線hadoop和執行例子時都會出現問題,而網上的帖子講的都很支離破碎,下面我們來一步一步解決,親測有效。

注意!注意!注意!

windows下eclipse執行mr程式時是用的windows本地環境,畢竟跟linux有很大差異,所以不建議使用win來做開發,可以使用本地模式(要想使用yarn模式的話,要改原始碼,很麻煩)做測試。

前提是在linux上配置好了hadoop開發環境(不管是偽分散式還是完全分散式),下面介紹詳細步驟:

1,首先windows下安裝好jdk,eclipse。

2,下載檔案hadoop-eclipse-plugin-2.7.2.jar和hadoop-2.7.2.tar.gz,

將hadoop-2.7.2.tar.gz解壓(裡面的檔案不用修改),並將.../hadoop-2.7.2/bin目錄新增到環境變數中;

將hadoop-eclipse-plugin-2.7.2.jar檔案新增到eclipse/plugin目錄下。

3,重新開啟eclipse,左側Peoject Explorer下會看到DFS Locations,點選window-->preferences

會顯示hadoop map/reduce選項,點選該選項再選擇hadoop的安裝路徑。

注意:可能會存在.jar檔案放進去了但顯示不出來DFS的情況,那麼要麼是.jar的問題,重新找一個,要麼是eclipse的問題,重新安裝一個,我遇到的就是需要重新安裝eclipse的問題。

4,設定右上角顯示MR圖示:eclipse > window > perspective > open perspective > other > Map/Reduce > OK

5,點選下方”Map/Reduce Location“,右鍵 》new hadoop location。

6,下圖是具體配置,其中,Location name可以隨便起名字。但是,Map/Reduce Master和DFS Master下的Host主機名必須要和core-site.xml中設定的一樣,

這裡我們設定為linux的主機ip地址,兩個埠號分別是:9001,9000。尤其注意:User name是node1下配置hadoop的使用者名稱,這裡是root,windows下預設不是root,記得要改過來。


注意:若Host你寫的是主機名,發現連不上,問題可能出在:windows下的hosts檔案只能替換,不能修改。

7,新建map reduce工程,將wordcount程式碼拷貝到專案中。

將程式碼中的路徑(不管是控制檯輸入還是直接在程式碼中呈現)中的ip地址localhost改為真實的ip地址。

執行過程中會出現一些錯誤,常見錯誤如下:

(0)控制檯不顯示log資訊,而是列印3行紅字,這是由於缺少log4j檔案。

log4j:WARN No appenders could be found for logger (org.apache.hadoop.metrics2.lib.MutableMetricsFactory).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

針對(0)的解決方法:在project的src目錄下新建檔案:log4j.properties,包括如下內容:

hadoop.root.logger=DEBUG, console
log4j.rootLogger = DEBUG, console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.out
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{2}: %m%n

儲存再執行程式。

(1)java.io.IOException: Could not locate executable D:\hadoop-2.7.2\bin\winutils.exe in the Hadoop binaries.

(2)Exception in thread "main" java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio. NativeIO $Windows.access0 (Ljava/lang/String;I)Z             

針對(1)(2)的解決方法:下載兩個檔案,hadoop.dll和winutils.exe(可以在github上找到),將這兩個檔案拷貝到D:\hadoop-2.7.2\bin目錄下,即可。

(3)org.apache.hadoop.security.AccessControlException: Permission denied: user=XXXX, access=WRITE, inode="/user/XXXX/output/_temporary/0":XXXX:supergroup:drwxr-xr-x

針對(3)有兩種解決方法:

a,修改hdfs-site.xml,修改條目為:

<name>dfs.permissions.enabled</name>
<value>false</value>

儲存,重啟hdfs即可。

b,執行命令:bin/hadoop fs -chmod 777 /user/你的使用者名稱

(4)name node is in safe mode:hdfs剛啟動的時候會進入到安全模式,此時無法從hdfs讀寫資料,過一段時間後會退出safe mode。

針對(4),hdfs剛啟動會進入安全模式,無法讀寫,啟動後會離開安全模式,你可以耐心等一會,等不了的可執行命令:bin/hadoop dfsadmin -safemode leave 離開安全模式。

(5)Exception in thread "main" Java.lang.NullPointerException

針對(5),跟(1)(2)問題一樣,都是缺少windows執行時需要的元件,加進了hadoop.dll和winutils.exe後,問題可以解決,如果還出線這個問題,可以重啟下機器。