記錄一下安裝hadoop遇到的問題,以便後面再次遇到有個解決方式的記錄,也方便其餘人解決相同的問題。在安裝好hadoop後,start-dfs.sh的時候報了util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable。
從字面上來看就是本地的hadoop的庫並不適用於本機的平臺。網上搜索後發現多是如下三種問題致使的:java
進入到hadoop目錄下的lib/native目錄下,linux系統使用linux
file libhadoop.so.1.0.0 獲得的結果是 libhadoop.so.1.0.0: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=2c6a0dae993e827ec637437f921b30279487049c, not stripped
能夠看到本地hadoop的庫是64位的,個人電腦也是64位的。因此應該不是這個版本的問題apache
這個確實我沒有添加過
(1).須要在/etc/profile中添加app
export HADOOP_HOME=/Users/scott/hadoop-3.2.0 export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib:$HADOOP_COMMON_LIB_NATIVE_DIR"
而後在使用source /etc/profile從新執行該文件使配置生效。
(2).須要在hadoop-env.sh添加一樣的配置oop
注:我這一步弄完其實hdfs就能夠啓動起來了,可是依然會報標題那個warn。可是不影響使用了。ui
使用ldd命令去查看libhadoop.so.1.0.0文件是否是缺乏了動態依賴庫
若是出現spa
./libhadoop.so.1.0.0: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by ./libhadoop.so.1.0.0) linux-vdso.so.1 => (0x00007fff369ff000) libdl.so.2 => /lib64/libdl.so.2 (0x00007f3caa7ea000) libc.so.6 => /lib64/libc.so.6 (0x00007f3caa455000) /lib64/ld-linux-x86-64.so.2 (0x00007f3caac1b000)
這種相似的就是glibc版本問題,使用ldd --version能夠查看版本。.net
# ldd --version ldd (GNU libc) 2.13 Copyright (C) 2012 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Written by Roland McGrath and Ulrich Drepper.
若是發現版本是低於剛纔上面出現的GLIBC_2.14,就須要升級glibc版本。這個比較麻煩,並且有必定風險,我遇到的不是這個問題,因此沒有實踐這個操做。能夠參考升級glibc版本。code
還有一種狀況呢,就是有的朋友多是在mac上安裝的hadoop,我也這樣嘗試了。首先排除了問題一後,問題二基本上就解決了問題。若是嘗試問題三會發現,mac上沒有ldd這個命令,網上說使用otool -L 文件,這樣是行不通的。
libhadoop.so是C寫的。須要安裝binutils,而後使用binutils中的readelf命令。
readelf -d 文件|grep NEED
這裏-d就是查看動態依賴庫,grep NEED就是須要的庫。
不過這裏其實只是列舉一下readelf的用法orm
若是要去除這個warn能夠在hadoop的文件夾下的/etc/hadoop/log4j.properties中添加 log4j.logger.org.apache.hadoop.util.NativeCodeLoader=ERROR 把錯誤級別調成ERROR就不會報這個warn了。