Hadoop源碼環境搭建及編譯(Windows 、MAC)

Hadoop源碼環境搭建及編譯(Windows 、MAC)

Windows

1. 下載對應版本的Hadoop源碼包

2. 編譯Hadoop源碼

編譯源碼最好是在linux平臺,此處用CentOS 7.4平臺編譯源碼

使用root用戶編譯

所有軟件壓縮包,放到**/opt/apps**目錄

2.1 查看編譯說明文件

將hadoop-2.7.0-src.tar.gz源碼包放到/opt目錄下

將源碼包解壓到/opt目錄

[root@node-01 opt]# cd /opt/
[root@node-01 opt]# tar -xzvf hadoop-2.7.0-src.tar.gz

進入解壓出來的目錄

[root@node-01 opt]# cd hadoop-2.7.0-src/
[root@node-01 hadoop-2.7.0-src]# ls

BUILDING.txt文件是編譯hadoop源碼的說明文件;打開文件,列出了編譯hadoop源碼時,要求軟件及對應版本要求

要求在Unix系統下編譯

2.2 安裝JDK

要求版本:JDK1.7+

確定JDK是否已經安裝,要求JDK1.7或以上版本

若已經安裝非系統自帶的openjdk且是版本符合要求,則略過步驟“安裝JDK”;運行下邊命令進行確認

[root@node-01 jdk1.8.0_201]# java -version
java version "1.8.0_201"
Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)

(使用root用戶)卸載系統自帶的openjdk

[root@node-01 ~]# rpm -qa |grep java
python-javapackages-3.4.1-11.el7.noarch
java-1.8.0-openjdk-headless-1.8.0.161-2.b14.el7.x86_64
tzdata-java-2018c-1.el7.noarch
java-1.7.0-openjdk-1.7.0.171-2.6.13.2.el7.x86_64
java-1.8.0-openjdk-1.8.0.161-2.b14.el7.x86_64
javapackages-tools-3.4.1-11.el7.noarch
java-1.7.0-openjdk-headless-1.7.0.171-2.6.13.2.el7.x86_64

忽略依賴卸載查詢到的openjdk相關包

rpm -e --nodeps python-javapackages-3.4.1-11.el7.noarch
rpm -e --nodeps java-1.8.0-openjdk-headless-1.8.0.161-2.b14.el7.x86_64
...

上傳自己的jdk解壓,並配置環境變量

tar -zxvf /opt/apps/jdk-8u201-linux-x64.tar.gz -C /opt/

打開/etc/profile文件添加以下內容

export JAVA_HOME=/opt/jdk1.8.0_201
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

檢測是否安裝成功

[root@node-01 jdk1.8.0_201]# source /etc/profile
[root@node-01 jdk1.8.0_201]# java -version
java version "1.8.0_201"
Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)

2.3 安裝依賴包

根據編譯說明文件BUILDING.txt,安裝相關依賴程序包

[root@node-01 jdk1.8.0_201]# yum -y install gcc-c++ build-essential autoconf automake libtool cmake zlib1g-dev pkg-config libssl-devua svn openssl-devel ncurses-devel

說明:

gcc-c++ -> liunx環境中的c/c++編譯器

build-essential -> linux操作系統上面開發程序,光有了gcc是不行的;它還需要一個build-essential軟件包;作用是提供編譯程序必須軟件包的列表信息

如果運行過程中,出現一下類似情況,說明需要更換yum源

Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirrors.neusoft.edu.cn
 * extras: mirrors.tuna.tsinghua.edu.cn
 * updates: mirrors.neusoft.edu.cn
base                                                                     | 3.6 kB  00:00:00     
extras                                                                   | 3.4 kB  00:00:00     
updates                                                                  | 3.4 kB  00:00:00     
updates/7/x86_64/primary_db                                              | 6.5 MB  00:00:01     
No package build-essential available.
No package zlib1g-dev available.
No package pkg-config available.
No package libssl-devua available.
Resolving Dependencies
--> Running transaction check

或參考下邊四種情況的解決方案

情況一:No package build-essential available.解決方案

yum groupinstall 'Development Tools'

情況二:No package zlib1g-dev available.解決方案

yum install zlib
yum install zlib-devel

情況三:No package pkg-config available.解決方案

yum install pkgconfig

情況四:No package libssl-devua available.解決方案

yum install openssl
yum install openssl-devel

2.4 安裝Maven

版本要求:Maven 3.0或以後版本均可

:由於apache-maven-3.5.0及以後的版本,在編譯hadoop-2.7.0源碼時,容易出錯;本文檔使用apache-maven-3.5.0

先確認一下,是否已經安裝了符合要求的maven;

若已安裝apache-maven-3.5.0,則略過“安裝maven”步驟

[root@node-01 opt]# mvn -v

否則安裝apache-maven-3.5.0

安裝軟件:apache-maven-3.5.0-bin.tar.gz

解壓maven壓縮包到/opt目錄下

[root@node-01 apps]# ls
apache-maven-3.5.0-bin.tar.gz
[root@node-01 apps]# tar -xzvf apache-maven-3.5.0-bin.tar.gz -C /opt/

配置mvn的環境變量

[root@node-01 ~]# vim /etc/profile

添加如下內容

export M2_HOME=/opt/apache-maven-3.5.0
export PATH=$PATH:$M2_HOME/bin

測試是否安裝完成

[root@node-01 ~]# source .bash_profile
[root@node-01 ~]# mvn -v

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-0OCWWntI-1582616296146)(assets/Image201907281207.png)]

默認使用中央倉庫下載即可

2.5 安裝Findbugs

版本要求:Findbugs 1.3.9

安裝軟件:findbugs-3.0.1.tar.gz

[root@node-01 apps]# ls
findbugs-3.0.1.tar
[root@node-01 apps]# tar -xvf findbugs-3.0.1.tar.gz -C /opt

配置Findbugs環境變量

[root@node-01 apps]# vim /etc/profile

添加如下內容

export FINDBUGS_HOME=/opt/findbugs-3.0.1
export PATH=$PATH:$FINDBUGS_HOME/bin

測試是否安裝完成

[root@node-01 apps]# source /etc/profile
[root@node-01 apps]# findbugs -version
3.0.1

2.6 安裝ProtocolBuffer

版本要求:ProtocolBuffer 2.5.0

安裝軟件:protobuf-2.5.0.tar,不建議用其它版本

[root@node-01 apps]# ls
protobuf-2.5.0.tar
[root@node-01 apps]# tar -xvf protobuf-2.5.0.tar
[root@node-01 apps]# mv protobuf-2.5.0 ../
[root@node-01 apps]# cd /opt/protobuf-2.5.0/
[root@node-01 protobuf-2.5.0]# ./configure 
[root@node-01 protobuf-2.5.0]# make -j 4  # 乾貨,-j以4核同時編譯;根據實際情況修改
[root@node-01 protobuf-2.5.0]# make install

測試是否安裝完成

[root@node-01 protobuf-2.5.0]# protoc --version
libprotoc 2.5.0

2.7 安裝Snappy

若想讓hadoop支持snappy壓縮,得先安裝snappy;

若不需要,跳過此步驟

[root@node-01 apps]# ls
snappy-1.1.3.tar.gz

解壓

[root@node-01 opt]# tar -xzvf snappy-1.1.3.tar.gz -C /opt/

安裝

[root@node-01 opt]# cd /opt/snappy-1.1.3/
[root@node-01 snappy-1.1.3]# ./configure
[root@node-01 snappy-1.1.3]# make -j 4
[root@node-01 snappy-1.1.3]# make install

查看snappy文件庫

[root@node-01 snappy-1.1.3]# ls -lh /usr/local/lib | grep snappy
-rw-r--r--. 1 root root 510K 4月  12 14:14 libsnappy.a
-rwxr-xr-x. 1 root root  955 4月  12 14:14 libsnappy.la
lrwxrwxrwx. 1 root root   18 4月  12 14:14 libsnappy.so -> libsnappy.so.1.3.0
lrwxrwxrwx. 1 root root   18 4月  12 14:14 libsnappy.so.1 -> libsnappy.so.1.3.0
-rwxr-xr-x. 1 root root 253K 4月  12 14:14 libsnappy.so.1.3.0
[root@node-01 snappy-1.1.3]# 

2.8 安裝Jansson

首先確保已經安裝wget,若沒有,先安裝(自行百度)

[root@node-01 snappy-1.1.3]# cd /opt/apps/
[root@node-01 opt]# wget http://www.digip.org/jansson/releases/jansson-2.5.tar.gz
[root@node-01 opt]# tar -zxvf jansson-2.5.tar.gz -C /opt
[root@node-01 opt]# cd /opt/jansson-2.5
[root@node-01 jansson-2.5]# ./configure  && make && make install

2.9 編譯hadoop

防止編譯時java.lang.OutOfMemoryError:Java heap space堆棧內存溢出問題,可以適當調整一下編譯用的內存大小

[root@node-01 opt]# export MAVEN_OPTS="-Xms256m -Xmx2048m"

進入源碼包下,執行命令進行編譯

[root@node-01 fuse-2.8.4]# cd
[root@node-01 ~]# cd /opt/
[root@node-01 opt]# cd hadoop-2.7.0-src/
[root@node-01 hadoop-2.7.0-src]# mvn package -Pdist,native,docs -DskipTests -Dtar

如果中途編譯失敗,並且不要文檔、hadoop支持snappy、支持openssl的話,請使用這個命令

[root@localhost hadoop-2.7.7-src]# mvn clean package -Pdist,native -DskipTests -Dtar -Drequire.snappy -Dsnappy.lib=/usr/local/lib -Dbundle.snappy -Drequire.openssl

說明:
支持snappy(若不需要支持snappy,把這些選項去除即可):Drequire.snappy -Dsnappy.lib=/usr/local/lib -Dbundle.snappy

MAC

1 安裝依賴

brew install  gcc autoconf automake libtool cmake snappy gzip bzip2 zlib openssl protobuf

2 安裝 findbugs(下載壓縮包解壓)

3 環境變量

export OPENSSL="/usr/local/Cellar/openssl/1.0.2t"
export OPENSSL_ROOT_DIR="$OPENSSL"
export PATH="$OPENSSL/bin:$PATH"
export PKG_CONFIG_PATH="$OPENSSL/lib/pkgconfig"
export LDFLAGS="-L$OPENSSL/lib"
export CPPFLAGS="-I$OPENSSL/include"

export FINDBUGS_HOME=/opt/findbugs-3.0.1
export PATH=$PATH:$FINDBUGS_HOME/bin

4 編譯

mvn package -Pdist,native,docs -DskipTests -Dtar

附:編譯出錯解決

在編譯hadoop-pipes時報錯:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-antrun-plugin:1.7:run (make) on project hadoop-pipes: An Ant BuildException has occured: exec returned: 1

[ERROR] around Ant part ...<exec failοnerrοr="true" dir="/opt/hadoop-2.7.0-src/hadoop-tools/hadoop-pipes/target/native" executable="cmake">... @ 5:127 in /opt/hadoop-2.7.0-src/hadoop-tools/hadoop-pipes/target/antrun/build-main.xml

進入/opt/hadoop-2.7.0-src/hadoop-tools/hadoop-pipes/target/antrun/build-main.xml文件可以看到

<?xml version="1.0" encoding="UTF-8" ?>
<project name="maven-antrun-" default="main"  >
<target name="main">
  <mkdir dir="/opt/hadoop-2.7.0-src/hadoop-tools/hadoop-pipes/target/native"/>
  <exec failonerror="true" dir="/opt/hadoop-2.7.0-src/hadoop-tools/hadoop-pipes/target/native" executable="cmake">
    <arg line="/opt/hadoop-2.7.0-src/hadoop-tools/hadoop-pipes/src/ -DJVM_ARCH_DATA_MODEL=64"/>
  </exec>
  <exec failonerror="true" dir="/opt/hadoop-2.7.0-src/hadoop-tools/hadoop-pipes/target/native" executable="make">
    <arg line="VERBOSE=1"/>
  </exec>
  <exec failonerror="true" dir="/opt/hadoop-2.7.0-src/hadoop-tools/hadoop-pipes/target/native" executable="make"></exec>
</target>

通過上面的報錯信息,可以看出是在cmake時報錯,於是我開始手動編譯

cmake /Users/yangjb/IdeaProjects/hadoop/hadoop-tools/hadoop-pipes/src/ -DJVM_ARCH_DATA_MODEL=64

發現報以下錯誤:

CMake Error at /usr/local/Cellar/cmake/3.13.2/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:137 (message):
  Could NOT find OpenSSL, try to set the path to OpenSSL root folder in the
  system variable OPENSSL_ROOT_DIR (missing: OPENSSL_INCLUDE_DIR)

沒有設置OPENSSL_ROOT_DIR

export OPENSSL_ROOT_DIR="/usr/local/Cellar/[email protected]/1.1.1d"

在運行:

cmake /Users/yangjb/IdeaProjects/hadoop/hadoop-tools/hadoop-pipes/src/ -DJVM_ARCH_DATA_MODEL=64

發現仍有錯誤,提示在CmakeList.txt/opt/hadoop-2.7.0-src/hadoop-tools/hadoop-pipes/src/CmakeList.txt)文件中需要在cmake_minimum_required(VERSION 2.6 FATAL_ERROR)增加一行

project(ProjectName)

增加之後運行上面一條命令成功

但是在運行下面一句話時報錯

make VERBOSE=1

查了很多資料,關於這個報錯的回答很少,最後發現是因爲openssl的1.1的版本有bug導致,於是換成了[email protected]之後,解決問題。

brew uninstall --ignore-dependencies openssl
brew install https://github.com/tebelorg/Tump/releases/download/v1.0.0/openssl.rb
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章