hadoop2.4 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... usin

在Ubuntu上安裝完hadoop2.4之後,使用如下命令:html

hadoop fs -ls
14/09/09 11:33:51 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Found 1 items
drwxr-xr-x   - duomai supergroup          0 2014-09-05 12:10 flume

有個WARN提示hadoop不能加載本地庫,網上搜了下,這個問題基本上是因爲在apache hadoop官網上下載的hadoopXXX.bin.tar.gz實在32位的機器上編譯的(蛋疼吧),我集羣使用的64bit的,加載.so文件時出錯,固然基本上不影響使用hadoop(若是你使用mahout作一些機器學習的任務時有可能會遇到麻煩,加載不成功,任務直接退出,因此仍是有必要解決掉這個warn的)。java

可是每次運行一個命令多有這麼個WARN很不爽,想幹掉也很簡單:apache

1. 下載hadoop2.4源碼
2. 在集羣的某臺機器上編譯
3. 替換以前的$HADOOP_HOME/lib/native爲新編譯的native

其中有幾點注意的:centos

(1)在2(進行編譯)以前,先修改maven安裝目錄下conf/settings.xml(由於maven使用的國外的reposity,國內有時沒法訪問,修改成國內鏡像便可),<mirrors></mirros>裏添加,其餘的不需改動,具體修改以下:app

   <mirror>
        <id>nexus-osc</id>
         <mirrorOf>*</mirrorOf>
     <name>Nexusosc</name>
     <url>http://maven.oschina.net/content/groups/public/</url>
   </mirror>

一樣,在<profiles></profiles>內新添加機器學習

<profile>
       <id>jdk-1.7</id>
       <activation>
         <jdk>1.7</jdk>
       </activation>
       <repositories>
         <repository>
           <id>nexus</id>
           <name>local private nexus</name>
           <url>http://maven.oschina.net/content/groups/public/</url>
           <releases>
             <enabled>true</enabled>
           </releases>
           <snapshots>
             <enabled>false</enabled>
           </snapshots>
         </repository>
       </repositories>
       <pluginRepositories>
         <pluginRepository>
           <id>nexus</id>
          <name>local private nexus</name>
           <url>http://maven.oschina.net/content/groups/public/</url>
           <releases>
             <enabled>true</enabled>
           </releases>
           <snapshots>
             <enabled>false</enabled>
           </snapshots>
         </pluginRepository>
       </pluginRepositories>
     </profile>

修改完成後使用如下命令編譯hadoop;maven

mvn package -Dmaven.javadoc.skip=true -Pdist,native -DskipTests -Dtar

而後就是等待,大概20min後,build success,目標在oop

hadoop-2.4.1-src/hadoop-dist/target/hadoop-2.4.1.tar.gz學習

(2)在編譯成功後,將新的lib/native替換到集羣中原來的lib/native,記得要修改$HADOOP_HOME/etc/hadoop/hadoop-env.sh,在最後加上;ui

export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib:$HADOOP_HOME/lib/native"

 

======

從新運行以下命令:

hadoop fs -ls
Found 1 items
drwxr-xr-x   - duomai supergroup          0 2014-09-05 12:10 flume

WARN消失,good!

 

 

參考資料:

1. http://hadoop.apache.org/docs/r2.4.0/hadoop-project-dist/hadoop-common/NativeLibraries.html

2. http://stackoverflow.com/questions/19943766/hadoop-unable-to-load-native-hadoop-library-for-your-platform-error-on-centos

3. http://blog.csdn.net/w13770269691/article/details/16883663/#

相關文章
相關標籤/搜索