GNU/Linux >> Linux の 問題 >  >> Linux

Hadoop プラットフォーム警告のネイティブ Hadoop ライブラリを読み込めません

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:ありがとうシーリーン


Linux
  1. Station –すべてのアプリに対応するスマートワークステーション

  2. クラウドサーバーのRAMを理解する

  3. 分析ソフトウェアに最適なクラウドホスティングプラットフォームを選択する方法

  1. libtool の .la ファイルは何のためのものですか?

  2. Linux プロセス管理用の Python ライブラリ

  3. JNA ネイティブ サポート ライブラリ Elasticsearch 6.x を読み込めません

  1. 書く! –あなたの生産性のための気を散らすことのないライティングアプリ

  2. Oracleasm 用の SELinux モジュールをロードする方法

  3. 動的ライブラリ 'libnvinfer.so.6' を読み込めませんでした