執行命令hadoop/sbin/start-dfs.sh失敗,報錯信息以下:java
WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable Incorrect configuration: namenode address dfs.namenode.servicerpc-address or dfs.namenode.rpc-address is not configured. WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
查找緣由:
一、查看更詳細的debug信息node
執行命令export HADOOP_ROOT_LOGGER=DEBUG,console,而後再執行命令hadoop/sbin/start-dfs.sh,發現version `GLIBC_2.14' not found: Failed to load native-hadoop with error: java.lang.UnsatisfiedLinkError: /usr/local/hadoop/lib/native/libhadoop.so.1.0.0: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /usr/local/hadoop/lib/native/libhadoop.so.1.0.0)
好了,如今發現問題了,是查找GLIBC_2.14這個東西找不到,那麼接下來就來了解一下這是個什麼東西,怎樣才能讓hadoop找到這個東西。
二、GLIBC是什麼linux
glibc是GNU發佈的libc庫,即c運行庫。glibc是linux系統中最底層的api,幾乎其它任何運行庫都會依賴於glibc。glibc除了封裝linux操做系統所提供的系統服務外,它自己也提供了許多其它一些必要功能服務的實現…
三、/lib64/libc.so.6是什麼ubuntu
libc.so.6 是c運行時庫 glibc的軟連接,而系統幾乎全部程序都依賴c運行時庫。程序啓動和運行時,是根據libc.so.6 軟連接找到glibc庫。每一個glibc.so文件有它支持的libc版本,能夠經過 strings /lib64/libc.so.6 |grep GLIBC查看,必定要選擇這條命令列出的版本。若是程序編譯的時候連接的libc庫版本不在程序運行環境下的glibc庫支持的libc版本以內,也會報錯。因而,系統的全部命令 ls,cp,cd 等等都沒法使用了。
四、查看系統的GLIBC版本api
執行命令strings /lib64/libc.so.6 |grep GLIBC 發現支持的最大版本是GLIBC_2.12,而hadoop錯誤信息裏提到須要GLIBC_2.14
好了,如今咱們就想辦法來添加GLIBC_2.14或更高版本,如今要考慮升級到哪一個版本呢? 查資料發現:對於CentOS這樣的系統,爲了追求穩定性每每各類庫版本都很低,好比6.5(個人機器系統版本)自帶的仍是glibc2.12, 而ubuntu 14.04帶glibc2.19,若是升級基本C運行庫到一個太新的版本,可能會影響CentOS的運行。因此我選擇升級一個恰好夠用的版本GLIBC_2.14,能解決問題就好,不找麻煩,嘻嘻。 如今就來解決實際的問題: 搭配這裏找須要的版本http://ftp.gnu.org/gnu/glibc/
五、下載GLIBC_2.14包app
wget http://ftp.gnu.org/gnu/glibc/glibc-2.14.tar.gz
六、解壓GLIBC_2.14包oop
tar -zxf glibc-2.14.tar.gz
七、編譯ui
cd glibc-2.14,創建臨時目錄 mkdir build cd build 執行../configure --prefix=/usr/local/glibc-2.14指定安裝目錄爲/usr/local/glibc-2.14 執行make && make install安裝 cp /usr/local/glibc-2.14/lib/libc-2.14.so /lib64/ ,也就是把 編譯好的so複製到/lib64下面
八、安裝spa
重建軟件,這一步最重要,操做不當,系統會直接沒法使用 cd /lib64 刪除舊的文件LD_PRELOAD=/lib64/libc-2.12.so rm libc.so.6 更新爲新的文件 LD_PRELOAD=/lib64/libc-2.14.so ln -s /lib64/libc-2.14.so libc.so.6 注:libc.so.6只是一個軟連,刪除後可能會致使ls等命令都沒法正常使用。這時不要慌張,能夠經過LD_PRELOAD環境變量來解決。
九、查看更新成功操作系統
strings /lib64/libc.so.6 |grep GLIBC
十、再次執行./sbin/start-dfs.sh沒有報錯信息了