夢想成真:windows下利用eclipse創建Mapreduce開發環境


   上篇文章http://www.cnblogs.com/ljy2013/articles/4417933.html 講到我的hadoop集群是在linux上已經搭建好了,我想在windows下,通過eclipse來創建我的hadoop的項目,並調試和執行。這篇文章終於讓我夢想成真了。其中也遇到了很多問題,下面將具體過程跟大將講一下:

   首先,當然是經過上篇文章http://www.cnblogs.com/ljy2013/articles/4417933.html我們已經可以在eclipse中有了hadoop的插件了,下面我們要做的就是能在這個環境上面跑一下我的hadoop的程序,實際上就是測試階段我的開發環境是否可用。我們很容易想到的就是用hadoop源碼自帶的WordCount的例子。

   有了上面的想法,那么好的,我們就趕緊動手來實現把。

    1、在eclipse中創建Mapreduce工程

       啟動eclipse,打開File --->new ---->project 如下圖所示: 

      

    選擇Map/Reduce,輸入自定義的工程名Project name。點擊finished即可。第一次創建對應的集群的hadoop中的hdfs會被加載到eclipse當中的。如下圖所示:

      

    2、在上面的工程下創建相應的類,這個類就是WordCount類名,並將hadoop的原發復制進去即可

    3、運行。本以為可以運行成功,但是現實總是非常殘酷的,又遇到問題了,並且問題很多。下面一一的介紹 (這些問題都可以通過查看eclipse工程目錄下的E:\code\eclipse\workspace\wordcount下日志文件Import.log查看具體的錯誤。  )

  問題1: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.

出現這個問題的原因是eclipse無法輸出日志。

解決的辦法:可以在工程目錄的src下面添加log4j.properties文件,並且在該文件中添加:

log4j.rootLogger=INFO, Import
log4j.appender.Import=org.apache.log4j.RollingFileAppender
log4j.appender.Import.File=Import.log
log4j.appender.Import.MaxFileSize=1000000KB 
log4j.appender.Import.MaxBackupIndex=9
log4j.appender.Import.layout=org.apache.log4j.PatternLayout
log4j.appender.Import.layout.ConversionPattern=%-d{yyyy-MM-dd HH\:mm\:ss SSS} [%c]-[%p] %m%n 

     並且在主函數中添加加載該文件的代碼:

String rootPath = System.getProperty("user.dir" );
PropertyConfigurator.configure(rootPath+"\\log4j.properties");

此時,問題解決。

  問題2:java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.  

    注意前面的NULL,奇怪,為什么為NULL呢?跟代碼就去發現是HADOOP_HOME的問題。如果HADOOP_HOME為空,必然fullExeName為null\bin\winutils.exe。

    解決的辦法:配置HADOOP_HOME的環境變量。重啟電腦,問題解決。

  問題3:Could not locate executable D:\Hadoop\tar\hadoop-2.2.0\hadoop-2.2.0\bin\winutils.exe in the Hadoop binaries.  

    問題的原因是因為在D:\Hadoop\tar\hadoop-2.2.0\hadoop-2.2.0\bin目錄下沒有winutils.exe文件,當然會報錯。

    解決辦法:從這個地方  https://github.com/srccodes/hadoop-common-2.2.0-bin 下載一個hadoop-common-2.2.0-bin-master.zip文件,里面有winutils.exe文件,將其放進去即可。

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

    本以為問題解決了,但是有出現了問題,到這我已經崩潰了。但是通過網上查找,還是有人跟我一樣的問題的。

       問題的原因是:缺少dll文件,還記得問題3中從https://github.com/srccodes/hadoop-common-2.2.0-bin下載的東西吧,里面就有hadoop.dll。

    解決辦法:就是用hadoop-common-2.2.0-bin-master/bin目錄替換本地hadoop的bin目錄,並在環境變量里配置PATH=HADOOP_HOME/bin,重啟電腦。

  問題5:Permission denied: user=administrator, access=WRITE,inode="grid":grid:supergroup:rwxr-xr-x”

    這個時候我以為執行成功。但是又出問題了,這個時候我想跳樓的心情都有,但是還是冷靜的告訴自己,成大事者,要能沉得住氣,切忌心浮氣躁。於是google了一下錯誤,令人欣慰的是有跟我一樣的錯誤。果斷進入。很快知道問題的原因了。

    原因:由於我是windows用戶,所以提示用戶為“administrator” ,后面的問題是用grid登錄到hadoop的hdfs中,由於需要創建文件夾

    解決辦法:在集群上執行一下命令:
        ~bin\hadoop fs -chmod –R 777 /user/grid 即可
 
 此時,終於可以看到hdfs上有我的輸出文件夾了。如下圖所示:
     

    此時不得不感嘆,不容易啊!終於搞定了。接下來就可以愉快的玩轉hadoop的MapRedeuce高級編程了。

  

    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM