java.library.path hadoop_关于java:Hadoop“无法为您的平台加载本机Hadoop库”警告
我目前正在運行CentO的服務器上配置hadoop。 當我運行start-dfs.sh或stop-dfs.sh時,出現以下錯誤:
WARN util.NativeCodeLoader: Unable to load native-hadoop library for
your platform... using builtin-java classes where applicable
我正在運行Hadoop 2.2.0。
在線進行搜索會顯示以下鏈接:http://balanceandbreath.blogspot.ca/2013/01/utilnativecodeloader-unable-to-load.html
但是,hadoop 2.x上/native/目錄的內容似乎有所不同,因此我不確定該怎么做。
我還在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/"
有任何想法嗎?
對于可搜索性:此問題還至少適用于Hadoop 2.4.0,Hadoop 2.4.1以及可能的其他版本。
hadoop.apache.org/docs/current/hadoop-project-dist/中有關如何使用本機庫的文檔。
我假設您在64位CentOS上運行Hadoop。您看到警告的原因是本地Hadoop庫$HADOOP_HOME/lib/native/libhadoop.so.1.0.0實際上是在32位上編譯的。
無論如何,這只是一個警告,不會影響Hadoop的功能。
如果您確實想消除此警告,請使用以下方法:下載Hadoop的源代碼并在64位系統上重新編譯libhadoop.so.1.0.0,然后替換32位。
對于Ubuntu,此處包含有關如何重新編譯源代碼的步驟:
http://www.ercoppa.org/Linux-Compile-Hadoop-220-fix-Unable-to-load-native-hadoop-library.htm
祝好運。
不為我工作。給我同樣的無法為平臺錯誤加載本地hadoop庫。
即使這不能完全起作用,它仍然會有所幫助。那么,這將完全影響性能嗎?
我在Centos 7和Centos 6.5上使用相同的hadoop 2.5.0 tar。兩者都是64位操作系統。 Centos7上沒有這樣的警告,但是Centos 6.5給了我這個警告,為什么?
謝謝。我沒有意識到這是一個警告。實際上說的是" starting namenode",最后一句話是" Unable to load native-hadoop ..",這引起了恐懼。
請注意,實際上您不必編譯整個Hadoop,如說明所示-hadoop-common-projecthadoop-common和hadoop-hdfs-projecthadoop-hdfs就足夠了。
對我來說,在Mac重新啟動后恢復會話時,終端只是出現故障。退出終端應用程序,然后再次重新啟動。錯誤消失了,并且能夠啟動spark-shell。
鏈接斷開
該文件可能是64位,這是現在的標準。找出:stackoverflow.com/questions/19444904/
只需將原生詞附加到您的HADOOP_OPTS上,如下所示:
export HADOOP_OPTS="$HADOOP_OPTS -Djava.library.path=$HADOOP_HOME/lib/native"
PS:感謝Searene
這也為我做到了。在具有Hadoop 2.6的Ubuntu上,路徑為/home/user/hadoop-2.6.0/lib/native
export HADOOP_OPTS ="-Djava.library.path = $ HADOOP_HOME / lib / native"
就我而言,這個stackoverflow.com/a/30392965解決了我的問題
我認為,兩種解決方案是相同的。根據文檔,java.library.path是加載庫時要搜索的路徑的列表。這樣,您可以導出LD_LIBRARY_PATH或在Java命令行中使用-D選項。在Java命令行中,-D = value允許我們設置系統屬性值。
答案取決于...我剛剛從tarball在64位CentOS 6.6上安裝了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 pr 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?這是找出答案的簡單技巧:
[hadoop@VMWHADTEST01 hadoop]$ ldd --version
ldd (GNU libc) 2.12
因此,無法將我的操作系統更新為2.14。唯一的解決方案是從我的OS上的源構建本機庫,或取消顯示警告,而現在暫時將其忽略。我選擇暫時不顯示惱人的警告(但將來計劃從源構建)使用與獲取調試消息相同的日志記錄選項進行購買,只是現在將其設置為ERROR級別。
log4j.logger.org.apache.hadoop.util.NativeCodeLoader=ERROR
我希望這可以幫助其他人看到開源軟件的一大好處是,如果您采取一些簡單的邏輯步驟,就可以弄清楚這些東西。
謝謝您,先生,這個精美的詳細答案。我得到了答案,并在此過程中學到了一些有價值的東西。
就我而言,在64位Linux Mint OS上構建hadoop之后,我替換了hadoop/lib中的本機庫。問題仍然存在。然后我找出了指向hadoop/lib而不是hadoop/lib/native的Hadoop。所以我只是將所有內容從本機庫移到了其父庫。警告就消失了。
我剛巧嘗試了網上的所有內容。我很累,只是清空了lib文件夾本身中的所有文件,即使用上述答案中提供的鏈接編譯的文件。最終我不知道為什么盡管你有不贊成票,但我還是嘗試了你的建議,但在經過了一天的艱苦努力之后,它仍然起作用了。我改變了.bashrc或hadoop-env.sh中的本機庫位置都沒關系。謝謝一噸。
我很累,只是清空了lib文件夾本身中的所有本機文件夾文件,即使用上述答案中提供的鏈接(新的hadoop-2.4.0-src.tar.gz中的本機文件夾)編譯的文件。
我遇到過同樣的問題。通過在.bashrc中添加以下行來解決:
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
我必須在HADOOP_OPTS值中添加" / native"
經過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 * ../
干杯
這也將起作用:
export LD_LIBRARY_PATH=/usr/lib/hadoop/lib/native
謝謝。如果您為了使用tomcat apr重寫LD_LIBRARY_PATH,只需將hadoop本機路徑附加為`export LD_LIBRARY_PATH = $ LD_LIBRARY_PATH:/ usr / lib / hadoop / lib / native。
對于通過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"
謝謝菲利普。該解決方案非常完美。就我而言,我所需要的只是選項Djava.library.path。那正是我想要的。謝謝!!!
非常感謝。我有bzip2:false,openssl:false build不支持openssl。其他人有路徑出現。有什么建議么。
閱讀此后在這里回答stackoverflow.com/a/50999874/2930427
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-FWIW,您的鏈接對Hadoop 2.4.0來說對我有用,但有一個例外,我不得不告訴maven不要構建javadocs。我還在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
我在本地系統中使用hadoop-2.6.0版本。我也面臨著同樣的問題。然后,我下載了hadoop-2.7.1-src并構建了二進制和本機庫,還用新構建的本機替換了本機庫hadoop-2.6.0。但是我仍然遇到同樣的錯誤。然后我export JAVA_LIBRARY_PATH=$HADOOP_HOMElibnative:$JAVA_LIBRARY_PATH并且對我有用。
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
是的,您應該已經通過hadoop資源重新編譯了64位lib / native。
除了@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文件修補方法必須更改。此外,要修補的文件不相同。不幸的是,JIRA沒有針對2.8的可接受補丁。在此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時的警告消息應消失。
我在使用JDK6時遇到了同樣的問題,我將JDK更改為JDK8,問題得以解決。
嘗試使用JDK8 !!!
這行就在這里:
export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native:$JAVA_LIBRARY_PATH
昆貝特的答案是錢在哪里
就我而言,我同時需要:export JAVA_LIBRARY_PATH=$HADOOP_HOMElibnative:$JAVA_LIBRARY_PATH和export LD_LIBRARY_PATH=$HADOOP_HOMElibnative:$LD_LIBRARY_PATH
經過驗證的較早發布的補救措施:
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)在hadoop-env.sh中的HADOOP_OPT中添加了-Djava.library.path=:
export HADOOP_OPTS="$HADOOP_OPTS -Djava.net.preferIPv4Stack=true -Djava.library.path=/opt/hadoop-2.6.0/lib/native"
這的確使惱人的警告消失了。
首先:您可以修改glibc版本。CentOS傳統上提供了安全的軟件,這也意味著該版本較舊,例如glibc,protobuf等。
ldd --version
ldd /opt/hadoop/lib/native/libhadoop.so.1.0.0
您可以將當前glibc的版本與所需的glibc進行比較。
其次:如果當前glibc的版本較舊,則可以更新glibc。
下載Glibc
如果當前glibc id的版本正確,則可以在HADOOP_OPTS后面附加本機單詞
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
我沒有使用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
用您的用戶名替換用戶
對于安裝Hadoop,從Cloudera安裝免費版本要容易得多。它帶有一個不錯的GUI,使添加節點變得簡單,沒有編譯或填充依賴項,它帶有諸如hive,pig之類的東西。
http://www.cloudera.com/content/support/zh-CN/downloads.html
步驟如下:
1)下載
2)運行
3)轉到Web GUI(1.2.3.4:7180)
4)在網絡GUI中添加其他節點(請勿在其他節點上安裝cloudera軟件,它會為您完成所有工作)
5)在Web GUI中,轉到"主頁",單擊" Hue"和" Hue Web UI"。這使您可以訪問Hive,Pig,Sqoop等。
Cloudera發行版比許多軟件包的當前版本落后很多時間。如果您想"最新,最偉大",那么Apache Hadoop是您的理想之選
總結
以上是生活随笔為你收集整理的java.library.path hadoop_关于java:Hadoop“无法为您的平台加载本机Hadoop库”警告的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java date显示格式_Java如何
- 下一篇: java二叉树插入节点_[javaSE]