win7平臺上使用eclipse(luna)將mapred任務上傳到叢集上執行

fudanstar發表於2016-09-25

win7平臺上使用eclipse(luna)將mapred任務上傳到叢集上執行

本地環境:

  • jdk版本 1.7.0_51
  • hadoop版本:2.4.1和2.7.2
  • hadoop eclipse外掛:hadoop-eclipse-plugin-2.4.1.jar

hadoop叢集環境:

  • jdk版本 1.7.0_79
  • hadoop版本:2.7.2
  • 一臺master,兩臺slaver,使用YARN做資源管理器

步驟:

  1. 配置windows上的hadoop環境
    官網上下載hadoop壓縮包hadoop-2.7.2.tar.gz 然後解壓。在windows上使用hadoop需要下面一些檔案:hadoop.dll、hadoop.exp、hadoop.lib、hadoop.pdb、libwinutils.lib、winutils.exe、winutils.pdb。這些檔案網上有說是怎麼生成的,我是直接在網上搜現成的。貌似不同版本的這些檔案好像差別不是很大。然後還需要將hadoop.dll放在system32資料夾下。具體原理也不是很清楚。

  2. 配置eclipse上的hadoop環境
    這一步主要是使用hadoop-eclipse-plugin-2.4.1.jar這個外掛。這個外掛網上也有生成的方法,使用https://github.com/winghc/hadoop2x-eclipse-plugin 提供的方法,使用ant編譯,ant jar -Dversion=2.7.2 -Dhadoop.version=2.7.2 -Declipse.home=/opt/eclipse -Dhadoop.home=/usr/local/hadoop 最後卡在那一晚上都沒成功,最後還是放棄了,在網上下載了一個2.4.1版本的。然後就是一般的配置方法了,重啟eclipse,配置hadoop路徑,這個地方是可以切換版本的,我的2.4.1和2.7.2切換沒有問題,然後就是編輯mapreduce配置。

  3. 配置mapred專案
    將叢集上的core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml四個配置檔案放在專案中,注意一定要複製到src資料夾中,否則是不會起作用的。當然如果要看日誌,也需要新建一個log4j.properties檔案,檔案內容網上隨便搜。
    在mapred-site.xml檔案中新增如下配置:
  <property>  
        <name>mapred.remote.os</name>
        <value>Linux</value>
        <description>Remote MapReduce framework's OS, can be either Linux or Windows</description>  
    </property>

    <property>
        <name>mapreduce.app-submission.cross-platform</name>
        <value>true</value>
    </property>

然後點run on hadoop,就能夠執行了。

問題

  1. 叢集中的mapred-site.xml檔案中一定要配置mapreduce.framework.name為yarn,否則總是在本地執行,而不能在叢集中執行。
  2. 如果報你的mapred程式的類不存在錯誤,那麼恭喜你,前面都設定成功了,接下來只要把你專案匯出jar包,然後上傳到叢集中的hadoop安裝目錄share/hadoop/mapred/lib下就可以了。當然叢集中每臺機器都需要這樣上傳的。本來以為eclipse提交任務,這些jar包可以自動傳到叢集上,但是細想一下,萬一jar包很大呢,而且應該是需要手動傳上去的。
  3. 如果不設定上節3中的 mapred.remote.os和mapreduce.app-submission.cross-platform,那麼就會報:org.apache.hadoop.util.Shell.runCommand(Shell.java:545),並且提示返回值是0這樣的錯誤。具體原理也不是很清楚。
  4. 之前一直報錯,在mapred web頁面發現提交的使用者是hadoop而我又沒有新建hadoop使用者,新建了hadoop使用者之後還是一樣的錯誤,說明不是hadoop使用者的問題,使用hadoop叢集執行任務好像和使用者沒有關係。

弄了好久的使用eclipse直接執行叢集上的mapred任務終於成功了,雖然瞭解一些hadoop的原理,但是發現是遠遠不夠的,以後有時間,需要好好看看hadoop的原始碼。下載的hadoop包中也包括了各個jar包的原始碼。可以好好研究研究!

相關文章