64 ビット CentOS で Hadoop を実行しているとします。この警告が表示された理由は、ネイティブの Hadoop ライブラリ $HADOOP_HOME/lib/native/libhadoop.so.1.0.0
です。 実際には32ビットでコンパイルされました。
とにかく、これは単なる警告であり、Hadoop の機能には影響しません。
この警告を解消したい場合は、Hadoop のソース コードをダウンロードして libhadoop.so.1.0.0
を再コンパイルする方法を次に示します。 64 ビット システムでは、32 ビット システムを置き換えます。
ソース コードを再コンパイルする手順は、Ubuntu 用にここに含まれています:
- http://www.ercoppa.org/Linux-Compile-Hadoop-220-fix-Unable-to-load-native-hadoop-library.htm
頑張ってください。
同じ問題がありました。 .bashrc
に以下の行を追加することで解決します :
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
答えは状況によります... 64 ビットの CentOS 6.6 に tarball から Hadoop 2.6 をインストールしました。実際、Hadoop のインストールには、ビルド済みの 64 ビット ネイティブ ライブラリが付属していました。私のインストールでは、ここにあります:
/opt/hadoop/lib/native/libhadoop.so.1.0.0
そして、それが 64 ビットであることはわかっています:
[[email protected] native]$ ldd libhadoop.so.1.0.0
./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 => (0x00007fff43510000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f9be553a000)
libc.so.6 => /lib64/libc.so.6 (0x00007f9be51a5000)
/lib64/ld-linux-x86-64.so.2 (0x00007f9be5966000)
残念ながら、「このライブラリは 32 ビットか 64 ビットか?」に集中していたので、私は愚かにも答えを見落としていました。
`GLIBC_2.14' not found (required by ./libhadoop.so.1.0.0)
それで、教訓が得られました。とにかく、残りは少なくとも警告を抑制することができるようになりました。そのため、HADOOP_OPTS環境変数を使用してライブラリパスを提供するために、他の回答で推奨されているすべてのことを続けて実行しましたが、役に立ちませんでした。ということで、ソースコードを見てみました。エラーを生成するモジュールがヒントを教えてくれます (util.NativeCodeLoader ):
15/06/18 18:59:23 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
それで、それが何をするかを見るためにここに行ってください:
http://grepcode.com/file/repo1.maven.org/maven2/com.ning/metrics.action/0.2.6/org/apache/hadoop/util/NativeCodeLoader.java/
ああ、デバッグ レベルのログがいくつかあります。これを有効にして、追加のヘルプが得られるかどうか見てみましょう。これを行うには、次の行を $HADOOP_CONF_DIR/log4j.properties ファイルに追加します:
log4j.logger.org.apache.hadoop.util.NativeCodeLoader=DEBUG
次に、stop-dfs.sh などの元の警告を生成するコマンドを実行したところ、次のようになりました。
15/06/18 19:05:19 DEBUG util.NativeCodeLoader: Failed to load native-hadoop with error: java.lang.UnsatisfiedLinkError: /opt/hadoop/lib/native/libhadoop.so.1.0.0: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /opt/hadoop/lib/native/libhadoop.so.1.0.0)
その答えは、デバッグ メッセージのこのスニペットに示されています (前の ldd コマンドが「試みた」のと同じことです:
`GLIBC_2.14' not found (required by opt/hadoop/lib/native/libhadoop.so.1.0.0)
使用している GLIBC のバージョンは?これを見つけるための簡単なトリックは次のとおりです:
[[email protected] hadoop]$ ldd --version
ldd (GNU libc) 2.12
そのため、OS を 2.14 にアップデートできません。唯一の解決策は、OS のソースからネイティブ ライブラリをビルドするか、警告を抑制して今のところ無視することです。今のところ、迷惑な警告を抑制することを選択しました (ただし、将来的にはソースからビルドする予定です)。デバッグ メッセージを取得するために使用したのと同じログ オプションを使用して購入します。ただし、今は ERROR レベルにするだけです。
log4j.logger.org.apache.hadoop.util.NativeCodeLoader=ERROR
オープンソース ソフトウェアの大きな利点は、いくつかの単純な論理的手順を踏めば、この問題を解決できるということです。
native という単語を追加するだけです あなたの HADOOP_OPTS
に このように:
export HADOOP_OPTS="$HADOOP_OPTS -Djava.library.path=$HADOOP_HOME/lib/native"
PS:ありがとうシーリーン