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 preconfigurata. Per la mia installazione, è qui:
/opt/hadoop/lib/native/libhadoop.so.1.0.0
E so che è a 64 bit:
[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)
Sfortunatamente, ho stupidamente trascurato la risposta proprio lì fissandomi in faccia mentre ero concentrato su "È questa libreria 32 pr 64 bit?":
`GLIBC_2.14' not found (required by ./libhadoop.so.1.0.0)
Quindi, lezione imparata. Comunque, il resto almeno mi ha portato a riuscire a sopprimere l'avvertimento. Quindi ho continuato e fatto tutto quanto raccomandato nelle altre risposte per fornire il percorso della libreria utilizzando la variabile di ambiente HADOOP_OPTS senza alcun risultato. Quindi ho guardato il codice sorgente. Il modulo che genera l'errore indica 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, via a 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'è un po 'di registrazione a livello di debug - accendiamolo per vedere se otteniamo qualche aiuto aggiuntivo. 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 tesoro:
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 'ha provato' a 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:
[hadoop@VMWHADTEST01 hadoop]$ ldd --version
ldd (GNU libc) 2.12
Quindi, non riesco ad aggiornare il mio SO a 2.14. L'unica soluzione è costruire le librerie native dai sorgenti sul mio sistema operativo o sopprimere l'avviso e ignorarlo per ora. Ho deciso di sopprimere il fastidioso avvertimento per ora (ma prevedi di costruire da fonti in futuro) acquistare utilizzando le stesse opzioni di registrazione che abbiamo usato per ottenere il messaggio di debug, tranne ora, renderlo a livello di ERRORE.
log4j.logger.org.apache.hadoop.util.NativeCodeLoader=ERROR
Spero che questo aiuti gli altri a capire che un grande vantaggio del software open source è che puoi capire queste cose se fai alcuni semplici passaggi logici.