從零開始的 Win7 64Bit 編譯Hadoop3
前言
最近在接觸Hadoop方面的知識。去官網逛了一圈發現最新版本已經是3.0.0-alpha1了。剛好在搭建Hadoop的環境,就決定使用最新版本的Hadoop試試水。因為自己使用的機器是windows的,逛了一圈沒有3.0的編譯版本(windows下需要hadoop.dll,winutils.exe),就決定自己來試著編譯。歷時一天半,終於編譯成功(實際編譯時間,除去依賴包的下載大概20分鐘左右),過程可謂是艱辛。於是寫下這篇文章,鞏固一下,並將編譯過程中遇到的一些問題及解決辦法分享給需要的人。
準備工作
首先到官網下載hadoop3.0的原始碼包 點我下載
下載完後解壓到自定義目錄
開啟其中的BUILDING.txt 裡面有windows下編譯的指導,如下所示:
上圖所示的大部分環境都是直接下載,然後配置到環境變數即可。但是有幾步非常容易出錯。
1.如果需要安裝Windows SDK 7.1的話,需要折騰折騰(只怪自己電腦上環境太雜),我下載了很多個版本都不能安裝(win7 64bit),最後是在stackoverflow上找到了一個哥們提供的下載地址,才能夠正常的安裝(點我下載)。在安裝windowsSDK 7.1 之前 請解除安裝所有MicroSoft Visual c++ 2010及其版本以上的所有庫。解除安裝.NET Framework4.0 以上的版本。
2.請使用ProtocolBuffer 2.5.0版本,高版本的在編譯時會報錯
3.還需注意的一個地方是,在文件中特別提到的以下內容
在64位的機器下,請配置Platform的系統變數為x64,否則會在編譯hadoop-common時出錯,我就是在這裡摔了一跤。
4.如果使用的是vs請使用vs2010專業版
開始編譯
等所有的環境都配置OK了,我們就可以進行編譯了。
分別選擇開始>>所有程式>>Microsoft Windows SDK v7.1>>Windows SDK Command Prompt(右鍵管理員身份執行),啟動如下介面
然後切換到最開始下載的原始碼包的目錄下,執行
mvn package -Pdist,native-win -DskipTests -Dtar
就會開始自動下載依賴包並且編譯,如果不出意外的話(下載包我下了一個多小時 = = )20分鐘左右就會編譯成功。
編譯好的檔案在 /原始碼目錄/hadoop-dist/target/下面 請敬請享用
填坑之路
問題一 編譯 Hadoop-Common時出錯
1.Failed to execute goal org.codehaus.mojo:exec-maven-plugin:1.3.1:exec (c ompile-ms-winutils) on project hadoop-common: Command execution failed. Process exited with an error: 2 找不到檔案
解決辦法:請將C:\Windows\Microsoft.NET\Framework64\v4.0.30319 新增到系統變數的Path即可
2.Failed to execute goal org.codehaus.mojo:exec-maven-plugin:1.3.1:exec (c ompile-ms-winutils) on project hadoop-common: Command execution failed. Process exited with an error: 1 (Exit value: 1) -> [Help 1]
解決辦法:
大致意思是,解除安裝vs2010以上的版本,解除安裝vs c++2010 Redistributable(64位和32位)的,解除安裝 .NET Framework 4.5 重啟後 安裝 .NET Framework 4.0 再安裝windows SDK 7.1(重新安裝)
如果以上方法不能解決的話,請嘗試配置Platform的系統變數。
或者參考: 傳送門
問題二 編譯時出現 around Ant part xxx\xxx\build-main.xml 出錯
解決辦法1: 傳送門
大致意思是解除安裝vs不乾淨導致的,需要手動清除登錄檔,登錄檔位置如圖所示,不過在下面的對話中可以看出出現這個問題不僅僅是因為這個原因。可以通過檢視錯誤日誌(xx\target\native\下面),來看是否是這個問題,出現這個問題的錯誤日誌是
MSBUILD : Configuration error MSB4146:
Cannot evaluate the property expression "$([MSBuild]::ValueOrDefault('$(VCTargetsPath)','$(MSBuildExtensionsPath32)\Microsoft.Cpp\v4.0\V120\'))"
解決辦法2:安裝vs2010
解決辦法3:刪除對於目錄下的target目錄。重新下載編譯
其他辦法,暫未發現
結束語
本次編譯過程中遇到了很多的問題,也用了很多時間。不過當出現BUILD SUCCESS的時候,覺得這些都是值得的。
通過本次編譯的收穫是 多看官方提供的文件 好好學知識 好好學英語 多多思考
分享一波編譯好的版本 : 點我下載 鑰匙:28pg
參考:
http://coderearth.org/building-hadoop-26-on-64-bit-windows-7.html
http://www.srccodes.com/p/article/38/build-install-configure-run-apache-hadoop-2.2.0-microsoft-windows-os
官方文件