299

現在、 CentOsを実行しているサーバーで Hadoop を構成しています。start-dfs.shまたはを実行するとstop-dfs.sh、次のエラーが表示されます。

WARN util.NativeCodeLoader: お使いのプラットフォームのネイティブ Hadoop ライブラリをロードできません... 該当する場合は組み込みの Java クラスを使用します

Hadoop 2.2.0を実行しています。

オンラインで検索すると、次のリンクが表示されます: http://balanceandbreath.blogspot.ca/2013/01/utilnativecodeloader-unable-to-load.html

ただし、/native/hadoop 2.x のディレクトリの内容は異なるようで、どうすればよいかわかりません。

また、次の 2 つの環境変数を に追加しましたhadoop-env.sh

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

export HADOOP_COMMON_LIB_NATIVE_DIR="/usr/local/hadoop/lib/native/"

何か案は?

4

23 に答える 23

249

64 ビット CentOS で Hadoop を実行しているとします。警告が表示された理由は、ネイティブの Hadoop ライブラリ$HADOOP_HOME/lib/native/libhadoop.so.1.0.0が実際には 32 ビットでコンパイルされたためです。

とにかく、これは単なる警告であり、Hadoop の機能には影響しません。

この警告を解消したい場合は、Hadoop のソース コードをダウンロードしlibhadoop.so.1.0.0て 64 ビット システムで再コンパイルし、32 ビット システムを置き換えます。

ソース コードを再コンパイルする手順は、Ubuntu 用にここに含まれています。

幸運を。

于 2013-11-15T04:12:32.697 に答える
166

次のように単語ネイティブを追加するだけですHADOOP_OPTS

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

PS:ありがとう

于 2014-07-24T07:10:24.103 に答える
18

これも機能します:

export LD_LIBRARY_PATH=/usr/lib/hadoop/lib/native
于 2014-11-28T14:54:58.290 に答える
14
export JAVA_HOME=/home/hadoop/software/java/jdk1.7.0_80
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_COMMON_LIB_NATIVE_DIR"
于 2016-09-28T05:30:44.767 に答える
13

Homebrew 経由で Hadoop がインストールされた OSX の場合は、必要に応じてパスと Hadoop のバージョンを置き換えて、次の手順に従います。

wget http://www.eu.apache.org/dist/hadoop/common/hadoop-2.7.1/hadoop-2.7.1-src.tar.gz
tar xvf hadoop-2.7.1-src.tar.gz
cd hadoop-2.7.1-src
mvn package -Pdist,native -DskipTests -Dtar
mv lib /usr/local/Cellar/hadoop/2.7.1/

次に、hadoop-env.sh を次のように更新します。

export HADOOP_OPTS="$HADOOP_OPTS -Djava.net.preferIPv4Stack=true -Djava.security.krb5.realm= -Djava.security.krb5.kdc= -Djava.library.path=/usr/local/Cellar/hadoop/2.7.1/lib/native"
于 2015-12-09T11:54:20.600 に答える
9

@zhutoulala - FWIW あなたのリンクは Hadoop 2.4.0 で私のために働いていました。2.4.0 の最初のリンクのパッチも使用しましたが、問題なく動作しました。これが私が発行しなければならなかったmavenコマンドです

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

これをビルドしてライブラリを移動したら、hadoop-env.sh を更新することを忘れないでください :)

これは、私と同じ障害に遭遇した人を助けるかもしれないと思った

于 2014-04-26T05:47:22.243 に答える
6

コンパイル済みのネイティブ ライブラリ ファイルを$HADOOP_HOME/libフォルダーに移動します。

.bashrc次に、ファイルを編集して環境変数を設定します

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

コンパイルされたネイティブ ライブラリ ファイルが$HADOOP_HOME/libフォルダーにあることを確認します。

それはうまくいくはずです。

于 2014-10-12T18:56:19.560 に答える
3

ここにあるこの行:

export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native:$JAVA_LIBRARY_PATH

KunBetterの答えから、私のために働きました。それを .bashrc ファイルに追加して、.bashrc の内容をリロードするだけです

$ source ~/.bashrc
于 2015-09-27T13:21:39.367 に答える
3
export HADOOP_HOME=/home/hadoop/hadoop-2.4.1  
export PATH=$HADOOP_HOME/bin:$PATH  
export HADOOP_PREFIX=$HADOOP_HOME  
export HADOOP_COMMON_HOME=$HADOOP_PREFIX  
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_PREFIX/lib/native  
export HADOOP_CONF_DIR=$HADOOP_PREFIX/etc/hadoop  
export HADOOP_HDFS_HOME=$HADOOP_PREFIX  
export HADOOP_MAPRED_HOME=$HADOOP_PREFIX  
export HADOOP_YARN_HOME=$HADOOP_PREFIX  
export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native:$JAVA_LIBRARY_PATH
于 2014-08-15T01:10:39.830 に答える
2

@zhutoulalaが受け入れた回答に加えて、ARMHFプラットフォーム(Raspberry Pi 3モデルB)で最新の安定バージョン(2.8)で動作するようにするための更新があります。まず、ネイティブ ライブラリを 64 ビット ARM に再コンパイルする必要があることを確認できます。いくつかの環境変数の設定に基づく他の回答は機能しません。Hadoop のドキュメントに示されているように、ビルド済みのネイティブ ライブラリは 32​​ ビットです。

最初のリンク ( http://www.ercoppa.org/posts/how-to-compile-apache-hadoop-on-ubuntu-linux.html ) に示されている高レベルの手順は正しいです。この URL http://www.instructables.com/id/Native-Hadoop-260-Build-on-Pi/では、Raspberry Pi に固有の詳細を取得できますが、Hadoop バージョン 2.8 については取得できません。

Hadoop 2.8 に関する私の指示は次のとおりです。

  • 最新の Raspbian にはまだ protobuf パッケージがないため、自分でコンパイルする必要があり、バージョンは正確に protobuf 2.5 ( https://protobuf.googlecode.com/files/protobuf-2.5.0.tar.gz )である必要があります。
  • CMake ファイルのパッチ方法を変更する必要があります。さらに、パッチを適用するファイルは同じではありません。残念ながら、2.8 に固有の JIRA で承認されたパッチはありません。この URL ( https://issues.apache.org/jira/browse/HADOOP-9320 ) で、Andreas Muttscheller が提案したパッチをコピーして namenode に貼り付ける必要があります。

    :hadoop-2.8.0-src/hadoop-common-project/hadoop-common $ touch HADOOP-9320-v2.8.patch
    :hadoop-2.8.0-src/hadoop-common-project/hadoop-common $ vim HADOOP-9320-v2.8.patch
    #copy and paste proposed patch given here : https://issues.apache.org/jira/browse/HADOOP-9320?focusedCommentId=16018862&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-16018862
    :hadoop-2.8.0-src/hadoop-common-project/hadoop-common $ patch < HADOOP-9320-v2.8.patch
    patching file HadoopCommon.cmake
    patching file HadoopJNI.cmake
    :hadoop-2.8.0-src/hadoop-common-project/hadoop-common $ cd ../..
    :hadoop-2.8.0-src $ sudo mvn package -Pdist,native -DskipTests -Dtar
    

ビルドが成功したら:

    :hadoop-2.8.0-src/hadoop-dist/target/hadoop-2.8.0/lib/native $ tar -cvf nativelibs.tar *

そして、Hadoop インストールの lib/native ディレクトリの内容をこのアーカイブの内容に置き換えます。Hadoop 実行時の警告メッセージは表示されなくなります。

于 2017-07-10T09:18:48.403 に答える
2

私はJDK6で同じ問題を抱えていました.JDKをJDK8に変更しました.問題は解決しました. JDK8を使ってみてください!!!

于 2016-06-17T03:18:16.533 に答える
0

以前の投稿から確認された救済策:

1) libhadoop.so.1.0.0Hadoop ディストリビューションに同梱されている が私のマシン アーキテクチャ (x86_64) 用にコンパイルされていることを確認しました。

[nova]:file /opt/hadoop-2.6.0/lib/native/libhadoop.so.1.0.0
/opt/hadoop-2.6.0/lib/native/libhadoop.so.1.0.0: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=3a80422c78d708c9a1666c1a8edd23676ed77dbb, not stripped

2 )-Djava.library.path=<path>に追加:HADOOP_OPThadoop-env.sh

export HADOOP_OPTS="$HADOOP_OPTS -Djava.net.preferIPv4Stack=true -Djava.library.path=/opt/hadoop-2.6.0/lib/native"

これにより、実際に迷惑な警告が消えました。

于 2015-07-24T16:19:51.780 に答える