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