私は現在 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 /"
何かアイデアはありますか?
私はあなたが64ビットCentOS上でHadoopを実行していると思います。この警告が表示されたのは、ネイティブのHadoopライブラリ$HADOOP_HOME/lib/native/libhadoop.so.1.0.0
が実際には32ビットでコンパイルされているからです。
とにかく、これは単なる警告であり、Hadoopの機能には影響しません。
この警告を取り除き、Hadoopのソースコードをダウンロードし、64ビットシステムでlibhadoop.so.1.0.0
を再コンパイルし、それから32ビットのものを置き換えたいなら、これがその方法です。
Ubuntuの場合のソースコードの再コンパイル方法の手順は、次のとおりです。
がんばろう。
次のようにWord native をHADOOP_OPTS
に追加するだけです。
export HADOOP_OPTS="$HADOOP_OPTS -Djava.library.path=$HADOOP_HOME/lib/native"
シモンズ:ありがとう Searene
答えは異なります...私は64ビットのCentOS 6.6にtarballからHadoop 2.6をインストールしました。 Hadoopのインストールには、事前に構築された64ビットネイティブライブラリが付属していました。私のインストールでは、それはここにあります:
/opt/hadoop/lib/native/libhadoop.so.1.0.0
そして私はそれが64ビットであることを知っています:
[hadoop@VMWHADTEST01 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
それで、それが何をするのか見るためにここに降りてください:
ああ、いくつかのデバッグレベルのロギングがあります - 私たちがいくつかの追加の助けを得るかどうか見るためにそれを回しましょう。これは、$ 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のどのバージョンがありますか?これを見つけるための簡単なトリックは次のとおりです。
[hadoop@VMWHADTEST01 hadoop]$ ldd --version
ldd (GNU libc) 2.12
だから、私のOSを2.14に更新することはできません。唯一の解決策は、私のOS上のソースからネイティブライブラリを構築するか、警告を抑制して今のところ無視することです。私は今のところ迷惑な警告を抑制することを選択しました(しかし将来的にはソースから構築することを計画しています)。
log4j.logger.org.Apache.hadoop.util.NativeCodeLoader=ERROR
私はこれが他の人がオープンソースソフトウェアの大きな利点はあなたがいくつかの簡単な論理的なステップを踏めばあなたがこのことを理解できるということであることを理解するのを助けることを望む。
私は同じ問題を抱えていました。 .bashrc
に次の行を追加することで解決します:
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
私の場合は、64ビットのLinuxミントOSでhadoopをビルドした後、ネイティブライブラリをhadoop/lib
に置き換えました。それでも問題は解決しません。それから私はhadoop/lib
ではなくhadoop/lib/native
を指すhadoopを考え出しました。だから私はちょうどすべてのコンテンツをネイティブライブラリからその親に移動しました。そして警告は消えた。
Kotiが示唆したように継続的な研究の後、私は問題を解決しました。
hduser@ubuntu:~$ cd /usr/local/hadoop
hduser@ubuntu:/usr/local/hadoop$ ls
bin include libexec logs README.txt share
etc lib LICENSE.txt NOTICE.txt sbin
hduser@ubuntu:/usr/local/hadoop$ cd lib
hduser@ubuntu:/usr/local/hadoop/lib$ ls
native
hduser@ubuntu:/usr/local/hadoop/lib$ cd native/
hduser@ubuntu:/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
hduser@ubuntu:/usr/local/hadoop/lib/native$ Sudo mv * ../
乾杯
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"
これもうまくいくでしょう:
export LD_LIBRARY_PATH=/usr/lib/hadoop/lib/native
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"
@ 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を更新することを忘れないでください:)
これは私と同じ障害に遭遇した人を助けるかもしれないと思った
コンパイルしたネイティブライブラリファイルを$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
フォルダにあることを確認してください。
それはうまくいくはずです。
この行はここにあります:
export Java_LIBRARY_PATH=$HADOOP_HOME/lib/native:$Java_LIBRARY_PATH
KunBetterの答えから、私のために働きました。それを.bashrcファイルに追加して、.bashrcの内容を再ロードするだけです。
$ source ~/.bashrc
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
@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への私の指摘です。
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実行中の警告メッセージは消えます。
私はJDK6と同じ問題を抱えていました、私はJDKをJDK8に変更しました、問題は解決しました。 JDK8を使ってみてください。
この行はここにあります:
export Java_LIBRARY_PATH=$HADOOP_HOME/lib/native:$Java_LIBRARY_PATH
KunBetterの答えから、お金はどこにあるのか
まず、あなたは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"
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などにアクセスできます。
私は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 user@localhost
ユーザーをユーザー名に置き換えます
以前の投稿から確認された救済策:
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_OPT
にhadoop-env.sh
を追加しました。
export HADOOP_OPTS="$HADOOP_OPTS -Djava.net.preferIPv4Stack=true -Djava.library.path=/opt/hadoop-2.6.0/lib/native"
これは確かに迷惑な警告を消しました。