Hadoop “Platformunuz için yerel hadoop kütüphanesi yüklenemedi” uyarısı


269

Şu anda çalıştıran bir sunucuda Hadoop yapılandırarak ediyorum CentOS . Çalıştırdığımda start-dfs.shveya stop-dfs.shaşağıdaki hatayı alıyorum:

WARN util.NativeCodeLoader: Platformunuz için yerel hadoop kitaplığı yüklenemiyor ... varsa yerleşik java sınıflarını kullanarak

Koşuyorum Hadoop 2.2.0.

Çevrimiçi bir arama yapmak şu bağlantıyı getirdi: http://balanceandbreath.blogspot.ca/2013/01/utilnativecodeloader-unable-to-load.html

Ancak, /native/hadoop 2.x dizin içeriği farklı görünüyor bu yüzden ne yapacağımı emin değilim.

Ayrıca bu iki ortam değişkenini de ekledim hadoop-env.sh:

dışa aktar HADOOP_OPTS = "$ HADOOP_OPTS -Djava.library.path = / usr / local / hadoop / lib /"

dışa aktar HADOOP_COMMON_LIB_NATIVE_DIR = "/ usr / local / hadoop / lib / native /"

Herhangi bir fikir?


3
Aranabilirlik için: bu sorun en azından Hadoop 2.4.0, Hadoop 2.4.1 ve muhtemelen diğer sürümler için de geçerlidir.
Greg Dubicki

Yerel kütüphanelerin nasıl kullanılacağına ilişkin belgeler hadoop.apache.org/docs/current/hadoop-project-dist/…
James Moore

Yanıtlar:


227

64bit CentOS üzerinde Hadoop kullandığınızı varsayıyorum. Uyarının yerel Hadoop kütüphanesinin $HADOOP_HOME/lib/native/libhadoop.so.1.0.032 bit üzerinde derlenmiş olduğunu görmenizin nedeni .

Her neyse, bu sadece bir uyarı ve Hadoop'un işlevlerini etkilemeyecek.

Bu uyarıyı ortadan kaldırmak, Hadoop'un kaynak kodunu indirmek ve libhadoop.so.1.0.064bit sisteminde yeniden derlemek istiyorsanız , 32bit olanı değiştirin.

Ubuntu için kaynak kodunun yeniden derlenmesine ilişkin adımlar burada yer almaktadır:

İyi şanslar.


7
Benim için çalışmıyor. Bana aynı şeyi verir Platform hatanız için yerel-hadoop kitaplığı yüklenemiyor.
Akshay Hazari

7
Bu tam olarak işe yaramasa bile, yine de yardımcı olur. Peki bu performansı hiç etkileyecek mi?
WattsInABox

1
Centos 7 ve Centos 6.5'te aynı hadoop 2.5.0 katranı kullanıyorum. Her ikisi de 64 bit işletim sistemidir. Centos7'de böyle bir uyarı yok ama Centos 6.5 bana bu uyarıyı veriyor, neden?
sandip divekar

Teşekkürler. Bunun bir uyarı olduğunu fark etmedim. Aslında "başlangıç ​​adı" diyor ve son cümle korkuya neden olan "yerli hadoop yüklenemiyor ..".
Kaushik Lele

Aslında, talimatların önerdiği gibi, tüm Hadoop'u derlemeniz gerekmediğini hadoop-common-project/hadoop-commonve hadoop-hdfs-project/hadoop-hdfsyeterli olduğunu unutmayın.
Greg Dubicki

152

Bunun için yerel kelimeyi şu şekilde ekleyin HADOOP_OPTS:

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

Not: Teşekkürler Searene


Bu benim için de yaptı. Hadoop 2.6 ile Ubuntu'da, yol /home/user/hadoop-2.6.0/lib/native
pelazem

25
dışa aktar HADOOP_OPTS = "- Djava.library.path = $ HADOOP_HOME / lib / native"
Searene

1
Bence iki çözüm aynı. Göre doc , java.library.path kütüphaneleri yüklerken arama yollarının bir listesidir. Böylece, LD_LIBRARY_PATH dosyasını dışa aktarabilir veya java komut satırında -D seçeneğini kullanabilirsiniz . Java komut satırında ve -D <property> = değeri bir sistem özellik değeri belirlememize izin verir.
Hoai-Thu Vuong

54

Cevap ... Hadoop 2.6'yı tarball'dan 64 bit CentOS 6.6'ya kurdum. Hadoop kurulumu gerçekten de önceden oluşturulmuş 64 bit yerel kütüphaneyle birlikte geldi. Yüklemem için burada:

/opt/hadoop/lib/native/libhadoop.so.1.0.0

Ve 64 bit olduğunu biliyorum:

[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)

Ne yazık ki, "Bu kütüphane 32 pr 64 bit mi?"

`GLIBC_2.14' not found (required by ./libhadoop.so.1.0.0)

Böylece, ders öğrenildi. Her neyse, geri kalanlar en azından uyarıyı bastırmamı sağladı. Bu yüzden devam ettim ve diğer cevaplarda önerilen her şeyi boşuna HADOOP_OPTS ortam değişkenini kullanarak kütüphane yolunu sağlamak için yaptım. Bu yüzden kaynak koduna baktım. Hatayı oluşturan modül size ipucunu söyler ( 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

Yani, ne yaptığını görmek için buraya:

http://grepcode.com/file/repo1.maven.org/maven2/com.ning/metrics.action/0.2.6/org/apache/hadoop/util/NativeCodeLoader.java/

Ah, bazı hata ayıklama seviyesi günlüğü var - hadi ek yardım alıp almadığımızı görelim. Bu işlem $ HADOOP_CONF_DIR / log4j.properties dosyasına aşağıdaki satırı ekleyerek yapılır:

log4j.logger.org.apache.hadoop.util.NativeCodeLoader=DEBUG

Sonra stop-dfs.sh gibi orijinal uyarıyı üreten bir komut çalıştırdım ve bu hediyeyi aldım:

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)

Ve bu hata ayıklama iletisinin snippet'inde ortaya çıkıyor (önceki ldd komutunun bana söylemeye çalıştığı şeyle aynı şey:

`GLIBC_2.14' not found (required by opt/hadoop/lib/native/libhadoop.so.1.0.0)

Hangi GLIBC sürümüne sahibim? Öğrenmek için basit bir numara:

[hadoop@VMWHADTEST01 hadoop]$ ldd --version
ldd (GNU libc) 2.12

Bu yüzden işletim sistemimi 2,14 olarak güncelleyemiyorum. Tek çözüm, yerel kütüphaneleri işletim sistemimdeki kaynaklardan oluşturmak veya uyarıyı bastırmak ve şimdilik görmezden gelmektir. Şimdilik sadece can sıkıcı uyarıyı bastırmayı seçtim (ancak gelecekte kaynaklardan inşa etmeyi planlıyorum), hata ayıklama mesajını almak için kullandığımız aynı günlük seçeneklerini kullanarak satın alın, şimdi hariç, sadece HATA düzeyi yapın.

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

Umarım bu, diğerlerine açık kaynaklı yazılımların büyük bir faydasının, bazı basit mantıklı adımlar atarsanız bu şeyleri anlayabilmenizdir.


4
Bu güzel ayrıntılı cevap için teşekkür ederim efendim. Cevabımı aldım ve bu süreçte değerli bir şeyler öğrendim (birkaç şey).
dogwynn

26

Aynı sorunu yaşadım. Aşağıdaki satırları ekleyerek çözülmüştür .bashrc:

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

5
HADOOP_OPTS değerine "/ native" eklemek zorunda kaldım
Ala 'Alnajjar

21

Benim durumumda, 64 bit Linux nane işletim sistemime hadoop oluşturduktan sonra, yerel kütüphaneyi değiştirdim hadoop/lib. Sorun hala devam ediyor. Sonra ben hadoop/libdeğil işaret hadoop anladım hadoop/lib/native. Bu yüzden tüm içeriği yerel kütüphaneden üst öğesine taşıdım. Ve uyarı gitti.


Sadece net her şeyi denedim oldu. Yoruldum ve sadece yukarıdaki klasörde sağlanan bağlantıları kullanarak derlenmiş olanlar yani lib klasöründe tüm dosyaları boşalttı. Sonunda neden indirdiğinize rağmen önerinizi denedim ve tüm bunların arkasında bir gün boyunca koyduğum muazzam bir mücadeleden sonra neden işe yaradığını bilmiyorum. veya hadoop-env.sh. Bir ton teşekkürler.
Akshay Hazari

Yoruldum ve sadece lib klasöründeki tüm yerel klasör dosyalarını boşalttım, yani yukarıdaki yanıtta sağlanan bağlantıları kullanarak derlenenleri (yeni hadoop-2.4.0-src.tar.gz'deki yerel klasör).
Akshay Hazari

15

Bu da işe yarar:

export LD_LIBRARY_PATH=/usr/lib/hadoop/lib/native

1
Teşekkürler. Tomcat apr'yi kullanmak için LD_LIBRARY_PATH değerini geçersiz kılarsanız, hadoop yerel yolunu `export LD_LIBRARY_PATH = $ LD_LIBRARY_PATH: / usr / lib / hadoop / lib / native olarak ekleyin.
Eric

bu benim için sadece bir çözüm. (diğer tüm cevapları denedim).
sailfish009

13

KotiI tarafından önerildiği gibi sürekli bir araştırmadan sonra sorunu çözdüm.

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 * ../

Şerefe


11

Homebrew üzerinden Hadoop yüklü OSX kullanıcıları için, yolu ve Hadoop sürümünü uygun olan yerlerde değiştirmek için aşağıdaki adımları izleyin

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/

sonra hadoop-env.sh dosyasını

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"

Teşekkürler Philip. Bu çözüm mükemmel çalıştı. Benim durumumda, ihtiyacım olan tek şey Djava.library.path seçeneğiydi. Tam da aradığım şey buydu. Teşekkürler!!!
arcee123

Çok teşekkürler. Bzip2: false, openssl var: false build openssl'yi desteklemiyor. Diğerlerinin yolu var. Baska öneri.
ggorantl

11
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

@zhutoulala - FWIW bağlantılarınız benim için Hadoop 2.4.0 ile çalıştı, bir istisna dışında maven'e javadocs yapmamasını söylemeliydim. Ayrıca yamayı ilk bağlantıda 2.4.0 için kullandım ve iyi çalıştı. İşte yayınlamak zorunda olduğum maven komutu

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

Bunu oluşturduktan ve kütüphaneleri taşıdıktan sonra hadoop-env.sh dosyasını güncellemeyi unutmayın :)

Bunun benimle aynı barikatlara giren birine yardımcı olabileceğini düşündüm


5

Derlenmiş yerel kütüphane dosyalarınızı $HADOOP_HOME/lib klasöre .

Ardından .bashrcdosyayı düzenleyerek ortam değişkenlerinizi ayarlayın

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

Derlenmiş yerel kütüphane dosyalarınızın içinde olduğundan emin olun $HADOOP_HOME/lib klasörde .

İşe yaramalı.


2
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

evet, 64 bit lib / native'i hadoop kaynağı aracılığıyla yeniden derlemelisiniz.
KunBetter

2

Buradaki hat:

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

KunBetter'in cevabından, benim için çalıştı. Sadece .bashrc dosyasına ekleyin ve .bashrc içeriğini yeniden yükleyin

$ source ~/.bashrc

Yerel sistemimde hadoop-2.6.0 sürümünü kullanıyorum. Ben de aynı sorunla karşı karşıyaydım. Daha sonra hadoop-2.7.1-src'yi indirdim ve ikili ve yerli kütüphaneler oluşturdum, ayrıca yerli kütüphaneler hadoop-2.6.0'ı yeni inşa edilen yerlilerle değiştirdim. Ama yine de aynı hataları alıyordum. Sonra ben export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native:$JAVA_LIBRARY_PATHve o benim için çalıştık.
ParagFlume

1

Buradaki hat:

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

KunBetter'in cevabından paranın olduğu yer


Benim durumumda ikisine de ihtiyacım vardı: export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native:$JAVA_LIBRARY_PATH ve export LD_LIBRARY_PATH=$HADOOP_HOME/lib/native:$LD_LIBRARY_PATH
borice

1

JDK6 ile aynı sorunu yaşadım, JDK'yı JDK8 olarak değiştirdim, sorun çözüldü. JDK8 kullanmaya çalışın !!!


1

@Zhutoulala kabul edilen cevaba ek olarak, ARMHF platformlarında (Raspberry Pi 3 model B) bugüne kadarki en son kararlı sürümle (2.8) çalışmasını sağlamak için bir güncelleme. İlk olarak, yerel kütüphaneleri 64 bit ARM'ye yeniden derlemeniz gerektiğini onaylayabilirim, burada bazı ortam değişkenlerini ayarlamaya dayanan diğer cevaplar çalışmaz. Hadoop belgelerinde belirtildiği gibi, önceden oluşturulmuş yerel kütüphaneler 32 bittir.

Yumruk bağlantısında verilen yüksek düzey adımlar ( http://www.ercoppa.org/posts/how-to-compile-apache-hadoop-on-ubuntu-linux.html ) doğrudur. Bu url'de http://www.instructables.com/id/Native-Hadoop-260-Build-on-Pi/ , Raspberry Pi'ye özgü daha fazla ayrıntı alırsınız, ancak Hadoop sürüm 2.8 için değil.

İşte benim endikasyonlarım Hadoop 2.8 dökün:

  • son Raspbian'da hala protobuf paketi yok, bu yüzden kendiniz derlemelisiniz ve sürüm tam olarak protobuf 2.5 olmalıdır ( https://protobuf.googlecode.com/files/protobuf-2.5.0.tar.gz )
  • CMake dosya yama yöntemi değiştirilmelidir. Ayrıca, yama dosyaları aynı değildir. Ne yazık ki, JIRA'da 2.8'e özgü kabul edilen bir yama yoktur. Bu URL'de ( https://issues.apache.org/jira/browse/HADOOP-9320 ) Andreas Muttscheller tarafından önerilen yamayı adınıza yapıştırmanız ve yapıştırmanız gerekir:

    :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

Derleme başarılı olduğunda:

    :hadoop-2.8.0-src/hadoop-dist/target/hadoop-2.8.0/lib/native $ tar -cvf nativelibs.tar *

Ve Hadoop kurulumunuzun lib / native dizininin içeriğini bu arşivin içeriğiyle değiştirin. Hadoop çalıştırılırken uyarı mesajı kaybolmalıdır.


0

Hadoop'u yüklemek için Cloudera'dan ücretsiz sürümü kurmak çok daha kolay. Düğüm eklemeyi kolaylaştıran güzel bir GUI ile birlikte gelir, bağımlılıklar ile derleme veya doldurma yoktur, kovan, domuz vb.

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

Adımlar şunlardır: 1) İndir 2) Çalıştır 3) Web GUI'ye gidin (1.2.3.4:7180) 4) Web GUI'sine ekstra düğümler ekleyin (cloudera yazılımını diğer düğümlere kurmayın, sizin için her şeyi yapar) 5) Web GUI'sinde Ana Sayfa'ya gidin, Hue ve Hue Web Kullanıcı Arayüzü'ne tıklayın. Bu size Hive, Pig, Sqoop vb.


Cloudera dağıtımları, paketlerin birçoğu için mevcut sürümlerin gerisinde kalıyor. "en son ve en büyük" istiyorsanız, Apache Hadoop gitmek için yol
Nerrve

0

Önceki kayıtlardan doğrulanmış çözüm:

1) libhadoop.so.1.0.0Hadoop dağıtımı ile gönderilen makinenin, x86_64 olan makine mimarim için derlendiğinden emin olun:

[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) eklendi -Djava.library.path=<path>için HADOOP_OPTde hadoop-env.sh:

export HADOOP_OPTS="$HADOOP_OPTS -Djava.net.preferIPv4Stack=true -Djava.library.path=/opt/hadoop-2.6.0/lib/native"

Bu gerçekten can sıkıcı uyarıyı ortadan kaldırdı.


0

İlk olarak: glibc sürümünü değiştirebilirsiniz.CentOS tranditionally güvenli yazılımlar sağlar, aynı zamanda sürümün glibc, protobuf gibi eski olduğu anlamına gelir ...

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

Mevcut glibc sürümünü gerekli glibc ile karşılaştırabilirsiniz.

İkinci olarak: Geçerli glibc sürümü eskiyse, glibc'yi güncelleyebilirsiniz. DownLoad Glibc

Geçerli glibc kimliği sürümü doğru ise, HADOOP_OPTS'unuza yerel kelime ekleyebilirsiniz.

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

0

CentOS kullanmıyorum. İşte Ubuntu 16.04.2, hadoop-2.7.3, jdk1.8.0_121'de ne var. Start-dfs.sh veya stop-dfs.sh dosyasını hata olmadan başarıyla çalıştırın:

# 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 yerine kurulum yolunuzu yazın

Ayrıca start -dfs.sh çalıştırırken birden çok kez parola girme ihtiyacını ortadan kaldıran Ubuntu üzerinde bir kez kurulum için aşağıdakileri yaptım:

sudo apt install openssh-server openssh-client
ssh-keygen -t rsa
ssh-copy-id user@localhost

Kullanıcıyı kullanıcı adınızla değiştirin


0

Temel olarak, bu bir hata değil, Hadoop kümesinde bir uyarı. Burada sadece ortam değişkenlerini güncelliyoruz.

dışa aktar HADOOP_OPTS = "$ HADOOP_OPTS" -Djava.library.path = / usr / local / hadoop / lib
 dışa aktar HADOOP_COMMON_LIB_NATIVE_DIR = "/ usr / local / hadoop / lib / native"
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.