Předpokládám, že používáte Hadoop na 64bitovém CentOS. Důvod, proč jste viděli toto varování, je nativní knihovna Hadoop $HADOOP_HOME/lib/native/libhadoop.so.1.0.0
byl ve skutečnosti zkompilován na 32 bit.
Každopádně je to jen varování a nebude mít vliv na funkce Hadoopu.
Zde je postup, pokud chcete toto varování odstranit, stáhněte si zdrojový kód Hadoop a znovu zkompilujte libhadoop.so.1.0.0
na 64bitovém systému, pak vyměňte 32bitový.
Kroky, jak překompilovat zdrojový kód, jsou uvedeny zde pro Ubuntu:
- http://www.ercoppa.org/Linux-Compile-Hadoop-220-fix-Unable-to-load-native-hadoop-library.htm
Hodně štěstí.
Měl jsem stejný problém. Je to vyřešeno přidáním následujících řádků v .bashrc
:
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
Odpověď závisí... Právě jsem nainstaloval Hadoop 2.6 z tarballu na 64bitový CentOS 6.6. Instalace Hadoop skutečně přišla s předpřipravenou 64bitovou nativní knihovnou. Pro moji instalaci je to zde:
/opt/hadoop/lib/native/libhadoop.so.1.0.0
A vím, že je 64bitový:
[[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)
Bohužel jsem hloupě přehlédl odpověď přímo tam a zíral mi do tváře, když jsem se soustředil na:"Je tato knihovna 32 pr 64 bit?":
`GLIBC_2.14' not found (required by ./libhadoop.so.1.0.0)
Takže poučení. Každopádně zbytek mě alespoň vedl k tomu, že jsem mohl varování potlačit. Takže jsem pokračoval a udělal vše doporučené v ostatních odpovědích, abych bezvýsledně poskytl cestu ke knihovně pomocí proměnné prostředí HADOOP_OPTS. Tak jsem se podíval na zdrojový kód. Modul, který generuje chybu, vám sdělí nápovědu (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
Takže se sem podívejte, co to dělá:
http://grepcode.com/file/repo1.maven.org/maven2/com.ning/metrics.action/0.2.6/org/apache/hadoop/util/NativeCodeLoader.java/
Aha, existuje nějaké protokolování úrovně ladění - zapněte to a uvidíme, jestli nedostaneme další pomoc. To se provede přidáním následujícího řádku do souboru $HADOOP_CONF_DIR/log4j.properties:
log4j.logger.org.apache.hadoop.util.NativeCodeLoader=DEBUG
Pak jsem spustil příkaz, který generuje původní varování, jako je stop-dfs.sh, a dostal jsem tuto vychytávku:
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)
A odpověď je odhalena v tomto úryvku ladicí zprávy (totéž, co se mi „pokoušel“ říct předchozí příkaz ldd:
`GLIBC_2.14' not found (required by opt/hadoop/lib/native/libhadoop.so.1.0.0)
Jakou verzi GLIBC mám? Zde je jednoduchý trik, jak to zjistit:
[[email protected] hadoop]$ ldd --version
ldd (GNU libc) 2.12
Takže nemohu aktualizovat můj OS na 2.14. Jediným řešením je sestavit nativní knihovny ze zdrojů na mém OS nebo varování potlačit a zatím ho prostě ignorovat. Rozhodl jsem se zatím jen potlačit otravné varování (ale plánuji v budoucnu stavět ze zdrojů) koupit pomocí stejných možností protokolování, jaké jsme použili k získání ladicí zprávy, s výjimkou teď, jen na úrovni ERROR.
log4j.logger.org.apache.hadoop.util.NativeCodeLoader=ERROR
Doufám, že to pomůže ostatním pochopit, že velkou výhodou softwaru s otevřeným zdrojovým kódem je to, že na to můžete přijít, pokud uděláte několik jednoduchých logických kroků.
Stačí připojit slovo nativní na váš HADOOP_OPTS
takhle:
export HADOOP_OPTS="$HADOOP_OPTS -Djava.library.path=$HADOOP_HOME/lib/native"
PS:Děkuji Searene