使用Eclipse運行Hadoop 2.x MapReduce程序常見問題

一、 當咱們編寫好MapReduce程序,點擊Run on Hadoop的時候,Eclipse控制檯輸出以下內容: php

這個信息告訴咱們沒有找到log4j.properties文件。若是沒有這個文件,程序運行出錯的時候,就沒有打印日誌,所以咱們會很難調試。 java

解決方法:複製$HADOOP_HOME/etc/hadoop/目錄下的log4j.properties文件到MapReduce項目 src文件夾下。 app

二、當執行MapReduce程序的時候,Eclipse可能會報告堆益處的錯誤。 此時,MapReduce程序執行的out目錄已經被建立,可是此時目錄爲空,再從新運行程序以前咱們須要刪除這個輸出目錄。以下圖所示: oop

                                                           

分析:首先咱們能夠輸入命令(java -client -XX:+UnlockDiagnosticVMOptions -XX:+PrintFlagsFinal -version | grep -i heapsize),來查看當前JDK支持的最大堆。而後在此基礎上增長堆大小。 ui

解決方案:在當前運行程序的運行配置中設置VM arguments參數,以下圖所示: .net

 

3.在運行MapReduce程序的時候,可能會報告以下警告: 調試

 

Hadoop是使用Java語言開發的,可是有一些需求和操做並不適合使用java,因此就引入了本地庫(Native Libraries)的概念,經過本地庫,Hadoop能夠更加高效地執行某一些操做。 日誌

目前在Hadoop中,本地庫應用在文件的壓縮上面: orm

在使用這兩種壓縮方式的時候,Hadoop默認會從$HADOOP_HOME/lib/native/Linux-*目錄中加載本地庫。 xml

若是加載成功,輸出爲:

DEBUG util.NativeCodeLoader - Trying to load the custom-built native-hadoop library...
INFO util.NativeCodeLoader - Loaded the native-hadoop library 

若是加載失敗,輸出爲:

INFO util.NativeCodeLoader - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

在Hadoop的配置文件core-site.xml中能夠設置是否使用本地庫:

<property>
  <name>hadoop.native.lib</name>
  <value>true</value>
  <description>Should native hadoop libraries, if present, be used.</description>
</property>

Hadoop默認的配置爲啓用本地庫。

另外,能夠在環境變量中設置使用本地庫的位置:

export JAVA_LIBRARY_PATH=/path/to/hadoop-native-libs

有的時候也會發現Hadoop自帶的本地庫沒法使用,這種狀況下就須要本身去編譯本地庫了。在$HADOOP_HOME目錄下,使用以下命令便可:

ant compile-native

編譯完成後,能夠在$HADOOP_HOME/build/native目錄下找到相應的文件,而後指定文件的路徑或者移動編譯好的文件到默認目錄下便可。

 

常見問題參考:http://www.dataguru.cn/forum.php?mod=viewthread&tid=206431

相關文章
相關標籤/搜索