編譯好的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