GNU/Linux >> Linux Esercitazione >  >> Linux

Hadoop Impossibile caricare la libreria Hadoop nativa per l'avviso della piattaforma

Presumo che tu stia eseguendo Hadoop su CentOS a 64 bit. Il motivo per cui hai visto questo avviso è la libreria Hadoop nativa $HADOOP_HOME/lib/native/libhadoop.so.1.0.0 è stato effettivamente compilato a 32 bit.

Ad ogni modo, è solo un avvertimento e non avrà alcun impatto sulle funzionalità di Hadoop.

Ecco come se vuoi eliminare questo avviso, scarica il codice sorgente di Hadoop e ricompila libhadoop.so.1.0.0 su sistema a 64 bit, quindi sostituire quello a 32 bit.

I passaggi su come ricompilare il codice sorgente sono inclusi qui per Ubuntu:

  • http://www.ercoppa.org/Linux-Compile-Hadoop-220-fix-Unable-to-load-native-hadoop-library.htm

Buona fortuna.


Ho avuto lo stesso problema. È risolto aggiungendo le seguenti righe in .bashrc :

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

La risposta dipende... Ho appena installato Hadoop 2.6 da tarball su CentOS 6.6 a 64 bit. L'installazione di Hadoop è stata effettivamente fornita con una libreria nativa a 64 bit predefinita. Per la mia installazione, è qui:

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

E so che è a 64 bit:

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

Sfortunatamente, ho stupidamente trascurato la risposta proprio lì che mi fissava in faccia mentre mi concentravo su "Questa libreria è 32 pr 64 bit?":

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

Quindi, lezione appresa. Comunque, il resto almeno mi ha portato a poter sopprimere l'avvertimento. Quindi ho continuato e ho fatto tutto ciò che è stato consigliato nelle altre risposte per fornire il percorso della libreria utilizzando la variabile di ambiente HADOOP_OPTS senza alcun risultato. Così ho guardato il codice sorgente. Il modulo che genera l'errore ti dice il suggerimento (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

Quindi, vai qui per vedere cosa fa:

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

Ah, c'è una registrazione a livello di debug:attiviamola per vedere se riceviamo ulteriore aiuto. Questo viene fatto aggiungendo la seguente riga al file $HADOOP_CONF_DIR/log4j.properties:

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

Quindi ho eseguito un comando che genera l'avviso originale, come stop-dfs.sh, e ho ottenuto questo vantaggio:

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)

E la risposta è rivelata in questo frammento del messaggio di debug (la stessa cosa che il precedente comando ldd 'cercava' di dirmi:

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

Quale versione di GLIBC ho? Ecco un semplice trucco per scoprirlo:

[[email protected] hadoop]$ ldd --version
ldd (GNU libc) 2.12

Quindi, non posso aggiornare il mio sistema operativo alla 2.14. L'unica soluzione è creare le librerie native dalle fonti sul mio sistema operativo o sopprimere l'avviso e ignorarlo per ora. Ho scelto di sopprimere solo il fastidioso avviso per ora (ma prevedo di compilare dai sorgenti in futuro) buy utilizzando le stesse opzioni di registrazione che abbiamo usato per ottenere il messaggio di debug, tranne che ora, rendilo solo di livello ERROR.

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

Spero che questo aiuti gli altri a vedere che un grande vantaggio del software open source è che puoi capire queste cose se segui alcuni semplici passaggi logici.


Basta aggiungere la parola nativo al tuo HADOOP_OPTS come questo:

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

PS:Grazie Searene


Linux
  1. Capire la RAM per il tuo server cloud

  2. A cosa servono i file .la di libtool?

  3. Libreria Python per la gestione dei processi Linux

  4. Impossibile caricare la libreria di supporto nativa JNA Elasticsearch 6.x

  5. Impossibile caricare la libreria dinamica 'libnvinfer.so.6'

Come configurare Openbox per il tuo desktop Linux

12 estensioni per il tuo desktop GNOME

20 passaggi per preparare il tuo PC all'installazione di Linux

Come controllare il carico del tuo server in Linux

Come controllare il carico del server nel sistema Linux

Le migliori distribuzioni Linux di KDE per il tuo desktop