java.library.path hadoop_关于java:Hadoop“无法为您的平台加载本机Hadoop库”警告
我目前正在運(yùn)行CentO的服務(wù)器上配置hadoop。 當(dāng)我運(yùn)行start-dfs.sh或stop-dfs.sh時(shí),出現(xiàn)以下錯(cuò)誤:
WARN util.NativeCodeLoader: Unable to load native-hadoop library for
your platform... using builtin-java classes where applicable
我正在運(yùn)行Hadoop 2.2.0。
在線進(jìn)行搜索會(huì)顯示以下鏈接:http://balanceandbreath.blogspot.ca/2013/01/utilnativecodeloader-unable-to-load.html
但是,hadoop 2.x上/native/目錄的內(nèi)容似乎有所不同,因此我不確定該怎么做。
我還在hadoop-env.sh中添加了這兩個(gè)環(huán)境變量:
export HADOOP_OPTS="$HADOOP_OPTS
-Djava.library.path=/usr/local/hadoop/lib/"
export HADOOP_COMMON_LIB_NATIVE_DIR="/usr/local/hadoop/lib/native/"
有任何想法嗎?
對(duì)于可搜索性:此問(wèn)題還至少適用于Hadoop 2.4.0,Hadoop 2.4.1以及可能的其他版本。
hadoop.apache.org/docs/current/hadoop-project-dist/中有關(guān)如何使用本機(jī)庫(kù)的文檔。
我假設(shè)您在64位CentOS上運(yùn)行Hadoop。您看到警告的原因是本地Hadoop庫(kù)$HADOOP_HOME/lib/native/libhadoop.so.1.0.0實(shí)際上是在32位上編譯的。
無(wú)論如何,這只是一個(gè)警告,不會(huì)影響Hadoop的功能。
如果您確實(shí)想消除此警告,請(qǐng)使用以下方法:下載Hadoop的源代碼并在64位系統(tǒng)上重新編譯libhadoop.so.1.0.0,然后替換32位。
對(duì)于Ubuntu,此處包含有關(guān)如何重新編譯源代碼的步驟:
http://www.ercoppa.org/Linux-Compile-Hadoop-220-fix-Unable-to-load-native-hadoop-library.htm
祝好運(yùn)。
不為我工作。給我同樣的無(wú)法為平臺(tái)錯(cuò)誤加載本地hadoop庫(kù)。
即使這不能完全起作用,它仍然會(huì)有所幫助。那么,這將完全影響性能嗎?
我在Centos 7和Centos 6.5上使用相同的hadoop 2.5.0 tar。兩者都是64位操作系統(tǒng)。 Centos7上沒(méi)有這樣的警告,但是Centos 6.5給了我這個(gè)警告,為什么?
謝謝。我沒(méi)有意識(shí)到這是一個(gè)警告。實(shí)際上說(shuō)的是" starting namenode",最后一句話是" Unable to load native-hadoop ..",這引起了恐懼。
請(qǐng)注意,實(shí)際上您不必編譯整個(gè)Hadoop,如說(shuō)明所示-hadoop-common-projecthadoop-common和hadoop-hdfs-projecthadoop-hdfs就足夠了。
對(duì)我來(lái)說(shuō),在Mac重新啟動(dòng)后恢復(fù)會(huì)話時(shí),終端只是出現(xiàn)故障。退出終端應(yīng)用程序,然后再次重新啟動(dòng)。錯(cuò)誤消失了,并且能夠啟動(dòng)spark-shell。
鏈接斷開
該文件可能是64位,這是現(xiàn)在的標(biāo)準(zhǔn)。找出: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"
就我而言,這個(gè)stackoverflow.com/a/30392965解決了我的問(wèn)題
我認(rèn)為,兩種解決方案是相同的。根據(jù)文檔,java.library.path是加載庫(kù)時(shí)要搜索的路徑的列表。這樣,您可以導(dǎo)出LD_LIBRARY_PATH或在Java命令行中使用-D選項(xiàng)。在Java命令行中,-D = value允許我們?cè)O(shè)置系統(tǒng)屬性值。
答案取決于...我剛剛從tarball在64位CentOS 6.6上安裝了Hadoop 2.6。 Hadoop安裝確實(shí)附帶了一個(gè)預(yù)構(gòu)建的64位本機(jī)庫(kù)。對(duì)于我的安裝,它在這里:
/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)
不幸的是,當(dāng)我專注于"這個(gè)庫(kù)是32 pr 64位嗎?"時(shí),我愚蠢地忽略了那里的答案。
`GLIBC_2.14' not found (required by ./libhadoop.so.1.0.0)
因此,經(jīng)驗(yàn)教訓(xùn)。無(wú)論如何,其余的至少使我能夠抑制警告。因此,我繼續(xù)進(jìn)行了其他回答中建議的所有操作,以使用HADOOP_OPTS環(huán)境變量提供庫(kù)路徑,但無(wú)濟(jì)于事。所以我看了一下源代碼。產(chǎn)生錯(cuò)誤的模塊會(huì)告訴您提示(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/
嗯,有一些調(diào)試級(jí)別的日志記錄-讓我們打開它,看看是否能獲得其他幫助。通過(guò)將以下行添加到$ HADOOP_CONF_DIR / log4j.properties文件中來(lái)完成此操作:
log4j.logger.org.apache.hadoop.util.NativeCodeLoader=DEBUG
然后,我運(yùn)行了一個(gè)生成原始警告的命令,如stop-dfs.sh,并得到了這個(gè)好東西:
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)
答案在調(diào)試消息的這段代碼中得到了揭示(與前面的ldd命令"試圖"告訴我的是同一件事:
`GLIBC_2.14' not found (required by opt/hadoop/lib/native/libhadoop.so.1.0.0)
我有什么版本的GLIBC?這是找出答案的簡(jiǎn)單技巧:
[hadoop@VMWHADTEST01 hadoop]$ ldd --version
ldd (GNU libc) 2.12
因此,無(wú)法將我的操作系統(tǒng)更新為2.14。唯一的解決方案是從我的OS上的源構(gòu)建本機(jī)庫(kù),或取消顯示警告,而現(xiàn)在暫時(shí)將其忽略。我選擇暫時(shí)不顯示惱人的警告(但將來(lái)計(jì)劃從源構(gòu)建)使用與獲取調(diào)試消息相同的日志記錄選項(xiàng)進(jìn)行購(gòu)買,只是現(xiàn)在將其設(shè)置為ERROR級(jí)別。
log4j.logger.org.apache.hadoop.util.NativeCodeLoader=ERROR
我希望這可以幫助其他人看到開源軟件的一大好處是,如果您采取一些簡(jiǎn)單的邏輯步驟,就可以弄清楚這些東西。
謝謝您,先生,這個(gè)精美的詳細(xì)答案。我得到了答案,并在此過(guò)程中學(xué)到了一些有價(jià)值的東西。
就我而言,在64位Linux Mint OS上構(gòu)建hadoop之后,我替換了hadoop/lib中的本機(jī)庫(kù)。問(wèn)題仍然存在。然后我找出了指向hadoop/lib而不是hadoop/lib/native的Hadoop。所以我只是將所有內(nèi)容從本機(jī)庫(kù)移到了其父庫(kù)。警告就消失了。
我剛巧嘗試了網(wǎng)上的所有內(nèi)容。我很累,只是清空了lib文件夾本身中的所有文件,即使用上述答案中提供的鏈接編譯的文件。最終我不知道為什么盡管你有不贊成票,但我還是嘗試了你的建議,但在經(jīng)過(guò)了一天的艱苦努力之后,它仍然起作用了。我改變了.bashrc或hadoop-env.sh中的本機(jī)庫(kù)位置都沒(méi)關(guān)系。謝謝一噸。
我很累,只是清空了lib文件夾本身中的所有本機(jī)文件夾文件,即使用上述答案中提供的鏈接(新的hadoop-2.4.0-src.tar.gz中的本機(jī)文件夾)編譯的文件。
我遇到過(guò)同樣的問(wèn)題。通過(guò)在.bashrc中添加以下行來(lái)解決:
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
我必須在HADOOP_OPTS值中添加" / native"
經(jīng)過(guò)Koti建議的持續(xù)研究后,我解決了該問(wèn)題。
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本機(jī)路徑附加為`export LD_LIBRARY_PATH = $ LD_LIBRARY_PATH:/ usr / lib / hadoop / lib / native。
對(duì)于通過(guò)Homebrew安裝了Hadoop的OSX上的計(jì)算機(jī),請(qǐng)按照以下步驟在適當(dāng)?shù)奈恢锰鎿Q路徑和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"
謝謝菲利普。該解決方案非常完美。就我而言,我所需要的只是選項(xiàng)Djava.library.path。那正是我想要的。謝謝!!!
非常感謝。我有bzip2:false,openssl:false build不支持openssl。其他人有路徑出現(xiàn)。有什么建議么。
閱讀此后在這里回答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,您的鏈接對(duì)Hadoop 2.4.0來(lái)說(shuō)對(duì)我有用,但有一個(gè)例外,我不得不告訴maven不要構(gòu)建javadocs。我還在2.4.0的第一個(gè)鏈接中使用了補(bǔ)丁,并且工作正常。這是我必須發(fā)出的Maven命令
mvn package -Dmaven.javadoc.skip=true -Pdist,native -DskipTests -Dtar
構(gòu)建完這些并移動(dòng)了庫(kù)之后,請(qǐng)不要忘記更新hadoop-env.sh :)
認(rèn)為這可能會(huì)幫助遇到與我一樣的障礙的人
將已編譯的本機(jī)庫(kù)文件移動(dòng)到$HADOOP_HOME/lib文件夾。
然后通過(guò)編輯.bashrc文件設(shè)置環(huán)境變量
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib
export HADOOP_OPTS="$HADOOP_OPTS -Djava.library.path=$HADOOP_HOME/lib"
確保已編譯的本機(jī)庫(kù)文件位于$HADOOP_HOME/lib文件夾中。
它應(yīng)該工作。
這行就在這里:
export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native:$JAVA_LIBRARY_PATH
根據(jù)KunBetter的回答,對(duì)我有用。
只需將其附加到.bashrc文件并重新加載.bashrc內(nèi)容
$ source ~/.bashrc
我在本地系統(tǒng)中使用hadoop-2.6.0版本。我也面臨著同樣的問(wèn)題。然后,我下載了hadoop-2.7.1-src并構(gòu)建了二進(jìn)制和本機(jī)庫(kù),還用新構(gòu)建的本機(jī)替換了本機(jī)庫(kù)hadoop-2.6.0。但是我仍然遇到同樣的錯(cuò)誤。然后我export JAVA_LIBRARY_PATH=$HADOOP_HOMElibnative:$JAVA_LIBRARY_PATH并且對(duì)我有用。
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
是的,您應(yīng)該已經(jīng)通過(guò)hadoop資源重新編譯了64位lib / native。
除了@zhutoulala可接受的答案之外,還有一個(gè)更新程序,使其可以在ARMHF平臺(tái)(Raspberry Pi 3模型B)上使用最新的穩(wěn)定版本(2.8)使用。
首先,我可以確認(rèn)您必須將本機(jī)庫(kù)重新編譯為64位ARM,此處基于設(shè)置某些環(huán)境變量的其他答案將不起作用。如Hadoop文檔中所述,預(yù)構(gòu)建的本機(jī)庫(kù)為32位。
拳頭鏈接(http://www.ercoppa.org/posts/how-to-compile-apache-hadoop-on-ubuntu-linux.html)中給出的高級(jí)步驟是正確的。
在此URL http://www.instructables.com/id/Native-Hadoop-260-Build-on-Pi/上,您可以獲得有關(guān)Raspberry Pi的更多詳細(xì)信息,但不適用于Hadoop 2.8版。
這是倒入Hadoop 2.8的跡象:
最新的Raspbian上仍然沒(méi)有protobuf軟件包,因此您必須自己編譯它,并且版本必須完全是protobuf 2.5(https://protobuf.googlecode.com/files/protobuf-2.5.0.tar.gz)
CMake文件修補(bǔ)方法必須更改。此外,要修補(bǔ)的文件不相同。不幸的是,JIRA沒(méi)有針對(duì)2.8的可接受補(bǔ)丁。在此URL(https://issues.apache.org/jira/browse/HADOOP-9320)上,您必須將Andreas Muttscheller建議的補(bǔ)丁復(fù)制并粘貼到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
一旦構(gòu)建成功:
:hadoop-2.8.0-src/hadoop-dist/target/hadoop-2.8.0/lib/native $ tar -cvf nativelibs.tar *
并將Hadoop安裝目錄lib / native目錄的內(nèi)容替換為該歸檔文件的內(nèi)容。運(yùn)行Hadoop時(shí)的警告消息應(yīng)消失。
我在使用JDK6時(shí)遇到了同樣的問(wèn)題,我將JDK更改為JDK8,問(wèn)題得以解決。
嘗試使用JDK8 !!!
這行就在這里:
export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native:$JAVA_LIBRARY_PATH
昆貝特的答案是錢在哪里
就我而言,我同時(shí)需要:export JAVA_LIBRARY_PATH=$HADOOP_HOMElibnative:$JAVA_LIBRARY_PATH和export LD_LIBRARY_PATH=$HADOOP_HOMElibnative:$LD_LIBRARY_PATH
經(jīng)過(guò)驗(yàn)證的較早發(fā)布的補(bǔ)救措施:
1)檢查Hadoop分發(fā)版隨附的libhadoop.so.1.0.0是針對(duì)我的機(jī)器架構(gòu)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傳統(tǒng)上提供了安全的軟件,這也意味著該版本較舊,例如glibc,protobuf等。
ldd --version
ldd /opt/hadoop/lib/native/libhadoop.so.1.0.0
您可以將當(dāng)前glibc的版本與所需的glibc進(jìn)行比較。
其次:如果當(dāng)前glibc的版本較舊,則可以更新glibc。
下載Glibc
如果當(dāng)前glibc id的版本正確,則可以在HADOOP_OPTS后面附加本機(jī)單詞
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
我沒(méi)有使用CentOS。這是我在Ubuntu 16.04.2,hadoop-2.7.3,jdk1.8.0_121中擁有的東西。成功運(yùn)行start-dfs.sh或stop-dfs.sh而不出現(xiàn)錯(cuò)誤:
# 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上進(jìn)行了一次以下設(shè)置,從而消除了在運(yùn)行start-dfs.sh時(shí)多次輸入密碼的需要:
sudo apt install openssh-server openssh-client
ssh-keygen -t rsa
ssh-copy-id user@localhost
用您的用戶名替換用戶
對(duì)于安裝Hadoop,從Cloudera安裝免費(fèi)版本要容易得多。它帶有一個(gè)不錯(cuò)的GUI,使添加節(jié)點(diǎn)變得簡(jiǎn)單,沒(méi)有編譯或填充依賴項(xiàng),它帶有諸如hive,pig之類的東西。
http://www.cloudera.com/content/support/zh-CN/downloads.html
步驟如下:
1)下載
2)運(yùn)行
3)轉(zhuǎn)到Web GUI(1.2.3.4:7180)
4)在網(wǎng)絡(luò)GUI中添加其他節(jié)點(diǎn)(請(qǐng)勿在其他節(jié)點(diǎn)上安裝cloudera軟件,它會(huì)為您完成所有工作)
5)在Web GUI中,轉(zhuǎn)到"主頁(yè)",單擊" Hue"和" Hue Web UI"。這使您可以訪問(wèn)Hive,Pig,Sqoop等。
Cloudera發(fā)行版比許多軟件包的當(dāng)前版本落后很多時(shí)間。如果您想"最新,最偉大",那么Apache Hadoop是您的理想之選
總結(jié)
以上是生活随笔為你收集整理的java.library.path hadoop_关于java:Hadoop“无法为您的平台加载本机Hadoop库”警告的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java date显示格式_Java如何
- 下一篇: Java平滑处理什么意思_为何要进行数据