mac下編譯hadoop3.0.*版本的native lib

編譯好的hadoop3.0.2的native 見 https://download.csdn.net/download/qq_14811559/10413344

本人的hadoop版本爲3.0.0,用3.0.2源碼編譯的也可以。

一、問題

mac安裝hadoop3.0.0 後報錯:WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable

解決思路:

打開環境變量配置文件:

vi ~/.bash_profile

打開debug模式,在環境變量中加入:

export HADOOP_ROOT_LOGGER=DEBUG,console

查看錯誤信息,java.library.path是否是本地庫的路徑,如果不是,原因一;如果是,直接原因二。

原因一:lib/native路徑配置問題,解決如下:

修改/usr/local/Cellar/hadoop/etc/hadoop/hadoop-env.sh文件(實際路徑見你安裝hadoop的位置),添加:

export HADOOP_OPTS="-Djava.library.path=/usr/local/Cellar/hadoop/lib/native"

如果運行正常,沒有warn了,問題解決;如果依舊不行,很不幸要編譯源碼了。

原因二:brew 安裝hadoop後不存在lib/native 本地庫(我遇到的問題),或者本地庫不可用,解決方案:編譯源碼

二 編譯hadoop3.0.*

1. 下載源碼

本機安裝的版本是hadoop3.0.0,但沒找到該版本的源碼,所以用的hadoop3.0.2版本的源碼,下載地址:http://hadoop.apache.org/releases.html

打開主目錄下的BUILDING.txt文件,可以看到編譯所需環境:

Requirements:
 
* Unix System
* JDK 1.8
* Maven 3.3 or later
* ProtocolBuffer 2.5.0
* CMake 3.1 or newer (if compiling native code)
* Zlib devel (if compiling native code)
* openssl devel (if compiling native hadoop-pipes and to get the best HDFS encryption performance)
* Linux FUSE (Filesystem in Userspace) version 2.6 or above (if compiling fuse_dfs)
* Internet connection for first build (to fetch all Maven and Hadoop dependencies)
* python (for releasedocs)
* bats (for shell code testing)
* Node.js / bower / Ember-cli (for YARN UI v2 building)

2. JDK環境

在安裝hadoop之前,jdk環境已經配置好了,但如果版本不合適,需要重新下載,在環境變量(~/.bash_profile)中修改路徑就可以了,不需要卸載以前的jdk。

查看jdk版本:

$ java -version
java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)

3. maven安裝

版本沒有要求,下載地址:http://maven.apache.org/download.cgi

我用的版本是3.3.3,在環境變量(~/.bash_profile)中配置,路徑自行更改:

export M2_HOME=/usr/local/Cellar/apache-maven-3.3.3
export PATH=$M2_HOME/bin:$M2_HOME/lib:$PATH

查看是否安裝正確:

$ mvn -version
Apache Maven 3.3.3 (7994120775791599e205a5524ec3e0dfe41d4a06; 2015-04-22T19:57:37+08:00)
Maven home: /usr/local/Cellar/apache-maven-3.3.3
Java version: 1.8.0_171, vendor: Oracle Corporation
Java home: /Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/Contents/Home/jre
Default locale: zh_CN, platform encoding: UTF-8
OS name: "mac os x", version: "10.12.6", arch: "x86_64", family: "mac"

4. 安裝openssl

簡單粗暴的用brew:

brew install openssl

查看是否安裝成功:

$ openssl
OpenSSL>

注意:在編譯時,可能會出現Apache Hadoop Pipes編譯失敗的情況,解決方案就是在環境變量(~/.bash_profile)中加入下面的東東:

export OPENSSL_ROOT_DIR=/usr/local/Cellar/openssl/1.0.2n
export OPENSSL_INCLUDE_DIR=/usr/local/Cellar/openssl/1.0.2n/include

5. 安裝cmake

brew install cmake

查看是否安裝成功:

$ cmake -version
cmake version 3.11.1

6. 安裝protocbuf

注意:在BUILDING.txt文件中指明要求是2.5.0,所以千萬不要用brew安裝(當然實在閒得*疼,也可以試試)

(1)下載protocbuf2.5.0,下載地址:https://download.csdn.net/download/canlets/6878023

(2)解壓文件,在該文件的根目錄下執行以下幾步操作:

./configure --prefix=/usr/local/Cellar/protobuf

其中,/usr/local/Cellar/protobuf是安裝目錄。

在此說個坑,放在系統文件下有個風險,該文件的擁有者不能是root,否則無法安裝,可以將該文件安裝到/user/目錄下,避免以上問題。但如果因此安裝失敗了,不要着急,將sudo chown一個擁有者就可以了。

但是-----千萬不要更改安裝目錄,否則。。。自己試着看吧

(3)安裝:

make
make install

(4)配置環境變量(~/.bash_profile),增加以下東東:

export PROTOBUF=/usr/local//Cellar/protobuf
export PATH=$PROTOBUF/bin:$PATH

(5)查看安裝是否正確

$ protoc --version
libprotoc 2.5.0

7. 進入JAVA_HOME目錄

JAVA_HOME就是你的JDK安裝目錄 ,/Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/Contents/Home),創建Class目錄,並在JAVA_HOME目錄下執行軟鏈接:

sudo ln -s ./lib/tools.jar ./Classes/classes.jar

或者,投機取巧的方法是(本人這樣做的,但不建議如此):

8. 進入下載的hadoop3.0.* 源碼目錄下,執行:

mvn package -Pdist,native -DskipTests -Dtar

一次編譯成功請忽略,但是,如果第一步編譯錯了,重新編譯之前儘量用下面代碼清理下:

mvn clean

如果網速差,比蝸牛還慢,不着急,慢慢等。。。我就花了3個小時呢

最後如果出現BUILD SUCCESS,搞定了。。。喝瓶零度慶祝下。。。

9. 將lib/native庫替換

編譯好的lib/native庫位置:

hadoop-3.0.2-src/hadoop-dist/target/hadoop-3.0.2/lib/native

複製到你需要的hadoop位置:

/Users/wanq/Downloads/hadoop-3.0.2-src/hadoop-dist/target/hadoop-3.0.2/lib/native

10. 重新啓動hadoop,運行正常,不會出現以上warn

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章