1. 程式人生 > >win7通過原始碼編譯hadoop-2.7.0

win7通過原始碼編譯hadoop-2.7.0

      編譯hadoop原始碼,意義在於當我們使用eclipse進行hadoop開發時,可以直接在本地執行,而無需打包成jar,然後再提交到hadoop伺服器進行執行。當然,這還需要一個可以支援hadoop對應版本的eclipse外掛,即hadoop-eclipse-2.x.x.jar。

      如果在linux系統上,其實很容易,沒有那麼多磕磕盼盼。在windows系統上編譯,需要安裝的程式或者工具比較多。但是總結起來,就那麼幾個,能夠通過ant,maven構建java專案,能夠通過gcc編譯c++專案。這其中還需要依賴protobuf庫。

編譯環境需要安裝的工具:

  1. jdk1.8,ant1.9,maven3.3(並配置aliyun源,加速構建)
  2. protobuf庫 2.4+
  3. visual studio 2010+ (提供msbuild環境)
  4. cmake 2.8+ (命令列下編譯c++專案)
  5. cygwin/msys/gitshell (能夠執行sh命令)

    關於環境的幾點說明,如果安裝的是visual studio 2010,那麼在執行maven package的時候無需更改任何配置,或者重新構建winutils.sln,native.sln。如果是visual studio 2015 或者 visual studio 2017,需要修改一個pom.xml配置檔案。並且需要在visual studio中開啟winutils.sln,native.sln專案,均重新構建。如果有錯誤提示,忽略構建的過程中出現的錯誤提示。

修改和重新編譯的工程或檔案位置:

  1. pom.xml->hadoop-2.7.0/hadoop-hdfs-project/hadoop-hdfs/pom.xml
  2. winutils.sln->hadoop-2.7.0/hadoop-common-project/hadoop-common/src/main/winutils/winutils.sln
  3. native.sln->hadoop-2.7.0/hadoop-common-project/hadoop-common/src/main/native/native.sln

關於環境的說明:

  1. 為什麼安裝了visual studio還需要安裝cmake?visual studio提供了msbuild環境,但是並沒有提供命令列下構建多專案的工具。
  2. 為什麼安裝了maven還需要安裝ant?構建hadoop-hdfs專案的時候需要ant構建。
  3. 為什麼還需要cygwin的環境?構建過程中需要執行maven-antrun-plugin的一些任務,這些任務中需要本地能夠執行sh命令。

 我本機的環境如下:

另外我的linux like環境是git-shell,而不是cygwin。 

開始構建:

       一定要從visual studio提供的命令列工具進入命令列:開始選單->所有程式->Visual Studio 2017->Visual Studio Tools->VC->適用於VS 2017的x64本機工具命令提示,然後通過切換目錄的方式進入hadoop-2.7.0原始碼目錄,如下所示:

編譯命令:mvn package -Pdist,native-win -DskipTests -Dtar -Dmaven.javadoc.skip=true -e

我這裡復現瞭如果是vs2017,編譯開始之前,不做重新構建的修改時,出現編譯環境不相容的問題。

D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets
\Microsoft.Cpp.Platform.targets(65,5): error MSB8020: 無法找到 Visual Studio 2010 的生成工具
(平臺工具集 =“v100”)。若要使用 v100 生成工具進行生成,請安裝 Visual Studio 2010 生成工具。或者,
可以升級到當前 Visual Studio 工具,方式是通過選擇“專案”選單或右鍵單擊該解決方案,然後選擇“重定解決
方案目標”。 [E:\workspace\hadoop-2.7.0\hadoop-common-project\hadoop-common\src\main\winutils
\libwinutils.vcxproj]

為了後面編譯hadoop-hdfs也能順利通過,這裡一次性修改三處。將前面提到的因為visual studio版本不一致的問題全部解決。

重新生成native,winutils專案。開啟visual studio 2017,開啟專案,找到native.sln所在的位置,匯入之後,會提示按照新的windows sdk版本來編譯,預設編譯版本是windows sdk8。

1>------ 已啟動全部重新生成: 專案: native, 配置: Release x64 ------
1>lz4.c
1>lz4hc.c
1>Lz4Compressor.c
1>Lz4Decompressor.c
1>file_descriptor.c
1>NativeIO.c
1>e:\workspace\hadoop-2.7.0\hadoop-common-project\hadoop-common\src\main\native\src\org\apache\hadoop\io\nativeio\nativeio.c(292): warning C4312: “型別強制轉換”: 從“long”轉換到更大的“HANDLE”
1>e:\workspace\hadoop-2.7.0\hadoop-common-project\hadoop-common\src\main\native\src\org\apache\hadoop\io\nativeio\nativeio.c(582): warning C4311: “型別強制轉換”: 從“HANDLE”到“long”的指標截斷
1>e:\workspace\hadoop-2.7.0\hadoop-common-project\hadoop-common\src\main\native\src\org\apache\hadoop\io\nativeio\nativeio.c(655): warning C4311: “型別強制轉換”: 從“HANDLE”到“long”的指標截斷
1>e:\workspace\hadoop-2.7.0\hadoop-common-project\hadoop-common\src\main\native\src\org\apache\hadoop\io\nativeio\nativeio.c(996): warning C4312: “型別強制轉換”: 從“long”轉換到更大的“HANDLE”
1>e:\workspace\hadoop-2.7.0\hadoop-common-project\hadoop-common\src\main\native\src\org\apache\hadoop\io\nativeio\nativeio.c(1051): warning C4312: “型別強制轉換”: 從“long”轉換到更大的“HANDLE”
1>JniBasedUnixGroupsMappingWin.c
1>bulk_crc32.c
1>e:\workspace\hadoop-2.7.0\hadoop-common-project\hadoop-common\src\main\native\src\org\apache\hadoop\util\bulk_crc32.c(58): warning C4091: “static ”: 沒有宣告變數時忽略“int”的左側
1>NativeCodeLoader.c
1>NativeCrc32.c
1>windows_secure_container_executor.c
1>LINK : fatal error LNK1181: 無法開啟輸入檔案“libwinutils.lib”
1>已完成生成專案“native.vcxproj”的操作 - 失敗。
========== 全部重新生成: 成功 0 個,失敗 1 個,跳過 0 個 ==========

忽略構建過程中的警告和錯誤。同理,winutils.sln也是一樣的方式重新構建。

修改hadoop-2.7.0/hadoop-hdfs-project/hadoop-hdfs/pom.xml配置檔案,修改構建器的版本,如果是vs2015,那麼修改為14,如果是vs2017,那麼修改為15:

如果不修改hadoop-2.7.0/hadoop-hdfs-project/hadoop-hdfs/pom.xml配置檔案中的構建器版本資訊,那麼在構建hadoop-hdfs時會報錯,沒有可用的c和cxx編譯器:

main:
     [exec] -- The C compiler identification is unknown
     [exec] CMake Error in CMakeLists.txt:
     [exec]   No CMAKE_C_COMPILER could be found.
     [exec]
     [exec]
     [exec]
     [exec] CMake Error in CMakeLists.txt:
     [exec]   No CMAKE_CXX_COMPILER c-- The CXX compiler identification is unknown
     [exec] -- Configuring incomplete, errors occurred!
     [exec] See also "E:/workspace/hadoop-2.7" could be found.
     [exec]
     [exec]
     [exec]
     [exec] .0/hadoop-hdfs-project/hadoop-hdfs/target/native/CMakeFiles/CMakeError.log".

當我們修改了構建器版本的時候,當構建到hadoop-hdfs時,會出現這樣的資訊:

 

這樣,繼續編譯,那麼就會順利編譯完成了。

構建成功的hadoop版本在hadoop-dist/target目錄。

 

 至此,整個編譯hadoop原始碼的過程就完成了,其中經歷過很多報錯,以及查詢報錯解決辦法,這是一個很有意義的過程。編譯一個原始碼,不僅可以得到我們想要的檔案,而且還可以學到很多程式設計時無法接觸到的東西。這裡搗鼓visual studio將我的visual studio折騰的無法進行設定專案屬性。這其中遇到的兩三個問題,是由於hadoop中依賴的native,winutils專案編譯版本不一致導致的相容問題。

接下來就是原始碼編譯一個合適hadoop版本的eclipse外掛,可以在本地以Run As ->Java Application的方式進行遠端mapreduce程式執行。

相關推薦

win7通過原始碼編譯hadoop-2.7.0

      編譯hadoop原始碼,意義在於當我們使用eclipse進行hadoop開發時,可以直接在本地執行,而無需打包成jar,然後再提交到hadoop伺服器進行執行。當然,這還需要一個可以支援hadoop對應版本的eclipse外掛,即hadoop-eclipse-2.

CentOS 64位上編譯Hadoop 2.6.0原始碼

Hadoop不提供64位編譯好的版本,只能用原始碼自行編譯64位版本。學習一項技術從安裝開始,學習hadoop要從編譯開始。 1.作業系統編譯環境 yum install cmake lzo-devel zlib-devel gcc gcc-c++ autocon

在Windows 7編譯Hadoop 2.7.7

一、下載Hadoop2.7.7原始碼 解壓後,檢視BUILDING.txt檔案,其中詳細描述了在windows下編譯hadoop需要的條件和步驟,具體見下: -------------------------------------------------------------------

windows部署hadoop-2.7.0

        這裡使用自己編譯的hadoop-2.7.0版本部署在windows上,記得幾年前,部署hadoop需要藉助於cygwin,還需要開啟ssh服務,最近發現,原來不需要藉助cygwin,也無需開啟ssh免密登入這些類linux的複雜流程。直接就可以sbin/sta

Centos 6.5 X64 環境下編譯 hadoop 2.6.0 --已驗證

詳細參照原始碼路徑下的BUILDING.txt檔案 Centos 6.5 x64 hadoop 2.6.0 jdk 1.7 protobuf-2.5.0 maven-3.0.5 set environment export JAVA_HOME=/home/linux/jdk export

CentOS7下用jdk1.8編譯hadoop-2.7.1全過程詳解

說實話,本人編譯hadoop的過程比較曲折,但收穫也很多,下面系統介紹一下CentOS7下編譯hadoop-2.7.1的全過程吧。 1.工具準備,最靠譜的是hadoop說明文件裡要求具備的那些工具。 解壓之 tar -zxvf hadoop-

Hadoop 2.7.0在centos7分散式叢集上的部署與測試

Author: Wingter Wu 1 環境說明 VitualBox 5.0.24 CentOS-7-x86_64-Minimal-1611:http://isoredirect.centos.org/centos/7/isos/x86_64/CentOS-7-x86_6

CentOS7下編譯Hadoop-2.7.2詳解

1.工具準備,最靠譜的是hadoop說明文件裡要求具備的那些工具。 到hadoop官網,點選source下載hadoop-2.7.2-src.tar.gz。 利用FileZilla上傳壓縮包到/opt/software/目錄下 在該目錄下,解壓到/opt/modu

CentOS7.0安裝配置hadoop2.7.0 資源準備 資源下載: hadoop-2.7.0.tar.gz 密碼:727y jdk-8u45-linux-x64.tar.gz 密碼:d8bm

CentOS7.0安裝配置hadoop2.7.0 資源準備 資源下載: 注意事項: 如果自己下載資源的話,注意hadoop,jdk,centos都應該是64位或者32位的,以免出現無法預料的錯誤,上面的資源都是64位的我是在mac下配置的,virtual box是ios x系統的,如果是其它系統的另

win7原始碼編譯hadoop-eclipse-plugin-2.7.0.jar

當你厭煩了本地編碼,打包,部署到遠端伺服器,然後通過hadoop jar xxx.jar wordcount /input /output的方式執行mapreduce程式,那麼可以考慮本地編譯一個合適的hadoop-eclipse-plugin外掛,進行本地執行遠端mapre

Spark 2.2原始碼編譯 & 支援hadoop-2.6.0-cdh5.7.0

JDK & Maven & Scala & Git軟體安裝 & 前置準備 編譯Spark原始碼的前置要求: Maven 3.3.9 or newer Java 8+ Scala Git(後文會通過分析make-d

Spark 2.3.2原始碼編譯,支援hadoop-2.6.0-cdh5.15.0

前置準備&軟體安裝 spark2.3.2原始碼官方Apache下載地址: http://spark.apache.org/downloads.html 編譯spark原始碼的官方Apache參考文件 http://spark.apache.org/docs/2.3.2/b

hadoop-2.4.0原始碼編譯過程

系統為ubuntu14.04,32bit,以前一直用官網包(官網為32bit),這次試著自己編譯了一次,大致如下: 1.下載hadoop-2.4.0-src.tar.gz原始碼包 下載完成解壓,得到hadoop原始碼資料夾:hadoop-2.4.0-src 2.安裝編譯

Linux鞏固記錄(5) hadoop 2.7.4下自己編譯代碼並運行MapReduce程序

parser mod pill self add let tokenize org cto 程序代碼為 ~\hadoop-2.7.4\share\hadoop\mapreduce\sources\hadoop-mapreduce-examples-2.7.4-sourc

Mac 安裝Hadoop-2.6.0-cdh5.7.0偽分散式

下載Hadoop-2.6.0-cdh5.7.0 單機下載自己需要的版本,我下載的是hadoop-2.6.0-cdh5.7.0 一. 解壓 tar -zxvf hadoop-2.6.0-cdh5.7.0.

hadoop-2.6.0-cdh5.7.0偽分散式搭建

1,這個我們是直接在linux中下載hadoop-2.6.0-cdh5.7.0,(當然你也可以在本地下載後再上傳,這步就可以忽略)首先確保你的虛擬機器有網路,可以先ping百度測試有網沒,如下程式碼就是有網路的情況。 [[email protected

Apache spark2.1.0編譯hadoop-2.6-cdh5.11.2的對應版本

Apache spark2.1.0 編譯 hadoop-2.6-cdh5.11.2 的對應版本 搞了兩天,終於把spark編譯成功了,把編譯過程記錄一下 編譯失敗的坑:   1)linux記憶體不足,maven編譯過程中記憶體溢位   2)找不到cloudera倉庫   3)報各種錯誤 考慮到ma

編譯 hadoop 2.2.0

2013-10-17 周海漢 /文 2013.10.17 Hadoop 2.2 是 Hadoop 2 即yarn的第一個穩定版。並且解決單點問題。 maven安裝 解壓後放到/usr/local目錄下。 增加國內m

VirtualBox+Centos7+(jdk1.7.0_71+Hadoop-2.6.0)/(jdk1.10+Hadoop-2.9.1)搭建完全分散式叢集平臺

VirtualBox+Centos7+(jdk1.7.0_71+Hadoop-2.6.0)/(jdk1.10+Hadoop-2.9.1)搭建完全分散式叢集平臺 本文有很多是自定義的,可以根據自己的實際情況和需求修改,儘量會用紅色標註出來,當然按照步驟,一步一步應該也能成功,不

win7 64 nmake 編譯libevent-2.0.22-stable (vs2013)

1、libevent-2.0.22-stable.tar.gz下載,網址為:http://libevent.org/   2、將libevent-2.0.22-stable.tar.gz 解壓到指定目錄 3、以管理員身份啟動cmd視窗,並切換到libevent-2.0.2