web-dev-qa-db-ja.com

Hadoop "あなたのプラットフォーム用のnative-hadoopライブラリをロードできません"という警告

私は現在 CentOs を実行しているサーバー上でhadoopを設定しています。 start-dfs.shまたはstop-dfs.shを実行すると、次のエラーが発生します。

警告util.NativeCodeLoader:あなたのプラットフォーム用のnative-hadoopライブラリをロードすることができません...該当する場合は組み込みJavaクラスを使用します

私は実行しています Hadoop 2.2.0。

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

しかし、hadoop 2.xの/native/ディレクトリの内容が異なっているように見えるので、どうすればよいかわかりません。

これら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 /"

何かアイデアはありますか?

242
Olshansk

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

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

この警告を取り除き、Hadoopのソースコードをダウンロードし、64ビットシステムでlibhadoop.so.1.0.0を再コンパイルし、それから32ビットのものを置き換えたいなら、これがその方法です。

Ubuntuの場合のソースコードの再コンパイル方法の手順は、次のとおりです。

がんばろう。

210
zhutoulala

次のようにWord native HADOOP_OPTSに追加するだけです。

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

シモンズ:ありがとう Searene

133
Hoai-Thu Vuong

答えは異なります...私は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のようなオリジナルの警告を生成するコマンドを実行して、そしてこのgoodieを得ました:

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上のソースからネイティブライブラリを構築するか、警告を抑制して今のところ無視することです。私は今のところ迷惑な警告を抑制することを選択しました(しかし将来的にはソースから構築することを計画しています)。

log4j.logger.org.Apache.hadoop.util.NativeCodeLoader=ERROR

私はこれが他の人がオープンソースソフトウェアの大きな利点はあなたがいくつかの簡単な論理的なステップを踏めばあなたがこのことを理解できるということであることを理解するのを助けることを望む。

48
chromeeagle

私は同じ問題を抱えていました。 .bashrcに次の行を追加することで解決します:

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

私の場合は、64ビットのLinuxミントOSでhadoopをビルドした後、ネイティブライブラリをhadoop/libに置き換えました。それでも問題は解決しません。それから私はhadoop/libではなくhadoop/lib/nativeを指すhadoopを考え出しました。だから私はちょうどすべてのコンテンツをネイティブライブラリからその親に移動しました。そして警告は消えた。

21
koti

Kotiが示唆したように継続的な研究の後、私は問題を解決しました。

[email protected]:~$ cd /usr/local/hadoop

[email protected]:/usr/local/hadoop$ ls

bin  include  libexec      logs        README.txt  share
etc  lib      LICENSE.txt  NOTICE.txt  sbin

[email protected]:/usr/local/hadoop$ cd lib

[email protected]:/usr/local/hadoop/lib$ ls
native

[email protected]untu:/usr/local/hadoop/lib$ cd native/

[email protected]:/usr/local/hadoop/lib/native$ ls

libhadoop.a       libhadoop.so        libhadooputils.a  libhdfs.so
libhadooppipes.a  libhadoop.so.1.0.0  libhdfs.a         libhdfs.so.0.0.0

[email protected]:/usr/local/hadoop/lib/native$ Sudo mv * ../

乾杯

13
Nagarjuna D N

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"
10
Philip O'Brien

これもうまくいくでしょう:

export LD_LIBRARY_PATH=/usr/lib/hadoop/lib/native
10
Kalyan Ghosh
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"
8
li li

@ zhutoulala - あなたのリンクがHadoop 2.4.0で私のために働いてくれたことを除いて1つの例外を除いて私はjavadocを作らないようにmavenに言わなければなりませんでした。私は2.4.0の最初のリンクでもパッチを使いましたが、それはうまくいきました。これは私が発行しなければならなかったmavenコマンドです。

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

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

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

8
user2229544

コンパイルしたネイティブライブラリファイルを$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フォルダにあることを確認してください。

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

5
Vijayakumar

この行はここにあります:

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

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

$ source ~/.bashrc
2
BeingSachin
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
2
KunBetter

@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が提案するパッチをコピーしてあなたのネームノードに貼り付ける必要があります。

    :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実行中の警告メッセージは消えます。

1
mattt

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

1
MangoJo

この行はここにあります:

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

KunBetterの答えから、お金はどこにあるのか

1
Tom Kelly

まず、あなたはglibcのバージョンを変更することができます。

ldd --version
ldd /opt/hadoop/lib/native/libhadoop.so.1.0.0

現在のglibcのバージョンと必要なglibcのバージョンを比較することができます。

次に、現在のglibcのバージョンが古い場合は、glibcをアップデートすることができます。 DownLoad Glibc

現在のglibc IDのバージョンが正しい場合は、HADOOP_OPTSにWordネイティブを追加できます。

export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
0
Qidong Wang

HadoopをインストールするためにClouderaから無料版をインストールするのはとても簡単です。ノードを追加するのを簡単にするNice GUIが付属しています。依存関係のコンパイルや詰め込みはありません。Hive、pigなどのものが付属しています。

http://www.cloudera.com/content/support/en/downloads.html

手順は次のとおりです。1)ダウンロード2)それを実行3)Web GUIに移動(1.2.3.4:7180)4)他のノードにclouderaソフトウェアをインストールしないでください、それはあなたのためにそれをすべて行います) 5)Web GUI内で[Home]に移動し、[Hue and Hue Web UI]をクリックします。これにより、Hive、Pig、Sqoopなどにアクセスできます。

0
MikeKulls

私はCentOSを使っていません。これは私がUbuntu 16.04.2、hadoop-2.7.3、jdk1.8.0_121に持っているものです。 start-dfs.shまたはstop-dfs.shをエラーなしで正常に実行します。

# Java env
#
export Java_HOME=/j01/sys/jdk
export JRE_HOME=/j01/sys/jdk/jre

export PATH=${Java_HOME}/bin:${JRE_HOME}/bin:${PATH}:.

# HADOOP env
#
export HADOOP_HOME=/j01/srv/hadoop
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME

export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin

/ j01/sys/jdk、/ j01/srv/hadoopをインストールパスに置き換えます。

私はまたUbuntuで一度だけセットアップするために次のことをしました、それはstart-dfs.shを実行するとき何度もパスワードを入力する必要性を排除します:

Sudo apt install openssh-server openssh-client
ssh-keygen -t rsa
ssh-copy-id [email protected]

ユーザーをユーザー名に置き換えます

0
Jonathan L

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

1)Hadoopディストリビューションに同梱されているlibhadoop.so.1.0.0が、私のマシンアーキテクチャ(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"

これは確かに迷惑な警告を消しました。

0
piiteraq